跳到主要内容

后台管理系统设计

版本:v1.0 日期:2025-12-31 产品:AXBlade / Renance Perps DEX


一、概述​

1.1 项目背景​

AXBlade/Renance 是一个去中心化永续合约交易平台,支持 BTC、ETH、SOL 等主流资产的杠杆交易。随着平台业务增长,需要建设一套完善的后台管理系统,以支撑运营、风控、财务等多方面需求。

1.2 目标用户​

角色职责
超级管理员系统配置、权限管理、全局操作
运营人员数据查看、用户管理、活动配置
风控人员风险监控、异常处理、强平管理
财务人员资金对账、手续费统计、反佣结算

1.3 设计原则​

  • 安全优先:敏感操作需二次确认,完整的操作日志
  • 实时性:关键数据实时更新,风控预警及时推送
  • 易用性:界面简洁直观,支持快捷操作
  • 可扩展:模块化设计,便于后续功能扩展

二、功能模块详细设计​

2.1 仪表盘 (Dashboard)​

2.1.1 核心指标卡片​

指标说明数据来源
今日交易量24h 累计交易额 (USD)trades 表
今日手续费24h 累计手续费收入trades 表
活跃用户数24h 内有交易的独立用户trades 表
当前持仓总值所有未平仓仓位价值positions 表
平台总余额用户总余额 (可用+冻结)balances 表
待结算反佣待发放的推荐佣金referral_commissions 表

2.1.2 趋势图表​

  • 交易量趋势:按小时/天展示交易量变化
  • 用户增长:新增用户、活跃用户趋势
  • 手续费收入:按天展示手续费收入
  • 交易对分布:饼图展示各交易对占比

2.1.3 实时告警​

告警类型触发条件优先级
大额交易单笔交易 > 阈值中
强平预警保证金率 < 5%高
价格偏离Mark Price 偏离 Index > 2%高
系统异常API 响应超时、错误率上升紧急

2.2 交易管理​

2.2.1 交易记录​

列表字段:

字段说明
交易ID唯一标识
交易对BTCUSDT / ETHUSDT / SOLUSDT
方向Buy / Sell
成交价格成交时的价格
成交数量成交的代币数量
成交金额成交价格 × 数量 (USD)
Maker 地址挂单方地址
Taker 地址吃单方地址
Maker 手续费挂单方支付的手续费
Taker 手续费吃单方支付的手续费
成交时间交易完成时间

筛选条件:

  • 时间范围(开始时间、结束时间)
  • 交易对
  • 用户地址
  • 交易方向
  • 金额范围

操作功能:

  • 导出 CSV
  • 查看详情
  • 跳转到用户详情

2.2.2 订单管理​

列表字段:

字段说明
订单ID唯一标识
用户地址下单用户
交易对交易对名称
订单类型Limit / Market
方向Buy / Sell
订单价格委托价格
Mark Price下单时的标记价格
委托数量订单数量
已成交数量已成交的数量
杠杆杠杆倍数
状态Pending / Open / Filled / Cancelled
创建时间订单创建时间

筛选条件:

  • 订单状态
  • 时间范围
  • 交易对
  • 用户地址
  • 订单类型

2.2.3 仓位监控​

列表字段:

字段说明
仓位ID唯一标识
用户地址持仓用户
交易对交易对名称
方向Long / Short
仓位大小仓位价值 (USD)
开仓均价平均入场价格
当前价格当前 Mark Price
未实现盈亏浮动盈亏
已实现盈亏已结算盈亏
保证金投入的保证金
杠杆杠杆倍数
强平价格预估强平价格
保证金率当前保证金率
状态Open / Closed / Liquidated

风险标识:

  • 🟢 安全:保证金率 > 10%
  • 🟡 警告:5% < 保证金率 ≤ 10%
  • 🔴 危险:保证金率 ≤ 5%

2.2.4 交易统计​

统计维度:

维度指标
按时间日/周/月交易量、手续费、交易笔数
按交易对各交易对的交易量占比、手续费占比
按用户TOP 交易用户排行
趋势分析环比、同比增长率

2.3 用户管理​

2.3.1 用户列表​

列表字段:

字段说明
用户地址钱包地址
注册时间首次交易时间
总余额可用 + 冻结
可用余额可用于交易的余额
冻结余额订单冻结的余额
累计交易量历史总交易额
累计手续费历史总手续费
推荐人推荐该用户的地址
推荐码用户的推荐码
下级数量直接推荐的用户数
风控标记正常 / 高风险 / 黑名单

筛选条件:

  • 用户地址
  • 注册时间范围
  • 余额范围
  • 交易量范围
  • 风控状态
  • 是否有推荐人

2.3.2 用户详情页​

基本信息卡片:

  • 用户地址
  • 注册时间
  • 推荐人地址
  • 推荐码
  • 风控状态

余额信息:

代币可用冻结总计
USDTxxxxxxxxx

Tab 页签:

  1. 交易历史

    • 该用户的所有交易记录
  2. 订单历史

    • 该用户的所有订单记录
  3. 仓位历史

    • 当前持仓 + 历史仓位
  4. 资金流水

    • 充值、提现、手续费、盈亏记录
  5. 推荐关系

    • 下级用户列表
    • 佣金收入明细

2.3.3 风控操作​

操作说明权限
标记高风险将用户标记为高风险风控人员
加入黑名单禁止用户交易超级管理员
移出黑名单恢复用户交易权限超级管理员
强制平仓手动触发用户仓位平仓超级管理员

2.4 邀请与反佣管理 (Referral System)​

2.4.1 推荐关系总览​

核心指标:

指标说明
总推荐人数有推荐码的用户数
总被推荐人数通过推荐注册的用户数
累计佣金发放已发放的佣金总额
待结算佣金待发放的佣金总额
本月佣金当月产生的佣金

2.4.2 推荐人列表​

列表字段:

字段说明
推荐人地址用户钱包地址
推荐码唯一推荐码
直推人数直接推荐的用户数
团队人数多级下线总数(如有)
下级交易量下级用户总交易额
累计佣金历史获得的总佣金
待结算佣金待发放的佣金
已提取佣金已提取的佣金
注册时间用户注册时间

操作:

  • 查看下级明细
  • 查看佣金明细
  • 导出数据

2.4.3 佣金明细​

列表字段:

字段说明
ID佣金记录ID
推荐人地址获得佣金的用户
来源用户产生交易的下级用户
关联交易产生佣金的交易ID
交易金额原始交易金额
手续费原始交易手续费
佣金比例佣金分成比例
佣金金额实际获得的佣金
状态Pending / Settled / Claimed
创建时间佣金产生时间
结算时间佣金结算时间

筛选条件:

  • 推荐人地址
  • 来源用户地址
  • 时间范围
  • 状态
  • 佣金金额范围

2.4.4 反佣配置​

全局配置:

配置项说明示例值
默认佣金比例推荐人获得的手续费分成30%
二级佣金比例二级推荐人分成(如有)10%
最低结算金额达到此金额才能提取10 USDT
结算周期佣金结算周期每日 / 每周
锁定期佣金产生后的锁定天数7 天

VIP 等级配置(可选):

等级条件佣金比例
普通默认30%
VIP1下级交易量 > 10万35%
VIP2下级交易量 > 100万40%
VIP3下级交易量 > 1000万50%

2.4.5 财务报表​

报表类型:

  1. 佣金汇总报表

    • 按日/周/月统计佣金发放
    • 按推荐人统计佣金排行
  2. 推荐效果报表

    • 推荐转化率
    • 推荐用户留存率
    • 推荐用户交易活跃度
  3. 待结算报表

    • 待结算佣金明细
    • 预计结算金额

导出格式:CSV、Excel


2.5 交易对管理​

2.5.1 交易对列表​

列表字段:

字段说明
交易对如 BTCUSDT
基础资产BTC
计价资产USDT
状态启用 / 禁用
最大杠杆允许的最大杠杆
Maker 费率挂单手续费率
Taker 费率吃单手续费率
最小下单量最小交易数量
价格精度价格小数位数
数量精度数量小数位数
24h 交易量最近24小时交易量
创建时间交易对创建时间

2.5.2 添加交易对​

表单字段:

字段类型必填说明
交易对名称文本是如 BTCUSDT
基础资产选择是BTC / ETH / SOL 等
计价资产选择是USDT
价格来源选择是Hyperliquid / Binance / Chainlink
初始状态开关是启用 / 禁用

2.5.3 交易对配置​

基础配置:

配置项说明示例
最大杠杆该交易对允许的最大杠杆50x
最小杠杆最小杠杆1x
初始保证金率开仓所需保证金率1% (100x时)
维持保证金率维持仓位所需保证金率0.5%

手续费配置:

配置项说明示例
Maker 费率挂单手续费率0.02%
Taker 费率吃单手续费率0.05%
VIP 费率折扣VIP用户费率折扣0% ~ 50%

交易限制:

配置项说明示例
最小下单量最小交易数量0.001 BTC
最大下单量单笔最大数量100 BTC
最大持仓量单用户最大持仓1000 BTC
价格精度价格小数位1 (0.1 USD)
数量精度数量小数位6

资金费率配置:

配置项说明示例
资金费率周期结算间隔8小时
最大资金费率上限0.375%
最小资金费率下限-0.375%

风控配置:

配置项说明示例
强平阈值触发强平的保证金率0.5%
ADL 启用是否启用自动减仓是
价格偏离保护价格偏离阈值2%

2.5.4 操作功能​

操作说明权限
启用启用交易对超级管理员
禁用禁用交易对(停止新开仓)超级管理员
编辑修改配置参数超级管理员
删除删除交易对(需无持仓)超级管理员

2.6 资金管理​

2.6.1 资金总览​

指标说明
平台总余额所有用户余额总和
可用余额用户可用余额总和
冻结余额订单冻结余额总和
保证金占用仓位保证金总和
24h 充值24小时充值总额
24h 提现24小时提现总额

2.6.2 充提记录​

列表字段:

字段说明
ID记录ID
类型充值 / 提现
用户地址用户钱包地址
金额充提金额
代币USDT
交易哈希链上交易哈希
状态Pending / Confirmed / Failed
时间操作时间

2.6.3 手续费统计​

统计维度:

  • 按日/周/月统计
  • 按交易对统计
  • Maker/Taker 分开统计

报表字段:

字段说明
日期统计日期
交易对交易对名称
交易量总交易额
Maker 手续费Maker 手续费收入
Taker 手续费Taker 手续费收入
总手续费手续费总收入
反佣支出推荐佣金支出
净收入手续费 - 反佣

2.7 风控管理​

2.7.1 强平监控​

实时监控面板:

  • 临近强平仓位列表(保证金率 < 5%)
  • 按风险等级排序
  • 自动刷新(5秒)

列表字段:

字段说明
用户地址持仓用户
交易对交易对
仓位方向Long / Short
仓位大小USD 价值
保证金率当前保证金率
距强平距离强平价格的百分比
预计强平价预估强平价格

2.7.2 强平记录​

列表字段:

字段说明
ID强平记录ID
用户地址被强平用户
交易对交易对
仓位方向Long / Short
强平数量被强平的数量
强平价格强平成交价格
损失金额用户损失
强平类型系统强平 / ADL
时间强平时间

2.7.3 异常检测​

检测规则:

规则说明阈值
大额交易单笔交易金额过大> $100,000
频繁撤单短时间内大量撤单> 50次/分钟
价格偏离Mark Price 偏离 Index> 2%
集中持仓单用户持仓占比过高> 10%
自成交Maker/Taker 同地址任意

2.7.4 风控规则配置​

配置项说明
大额交易阈值触发告警的金额
频繁撤单阈值触发告警的撤单次数
价格偏离阈值触发告警的偏离百分比
告警方式站内通知 / 邮件 / Webhook

2.8 系统配置​

2.8.1 全局配置​

配置项说明示例
平台名称显示名称Renance
维护模式是否开启维护关闭
新用户注册是否允许注册开启
交易开关是否允许交易开启
充值开关是否允许充值开启
提现开关是否允许提现开启

2.8.2 抵押品配置​

配置项说明示例
抵押代币支持的抵押代币USDT
抵押代币地址代币合约地址0x...
最小充值最小充值金额10 USDT
最小提现最小提现金额10 USDT
提现手续费提现收取的费用0 USDT

2.9 运营工具​

2.9.1 公告管理​

功能:

  • 创建公告
  • 编辑公告
  • 发布/下架公告
  • 置顶公告

公告字段:

  • 标题
  • 内容(富文本)
  • 类型(系统公告/活动公告/维护通知)
  • 状态(草稿/已发布/已下架)
  • 发布时间
  • 过期时间

2.9.2 数据导出​

支持导出:

  • 交易记录
  • 订单记录
  • 用户列表
  • 仓位记录
  • 佣金明细
  • 手续费统计

导出格式:CSV、Excel

2.9.3 操作日志​

记录内容:

  • 操作人
  • 操作时间
  • 操作类型
  • 操作对象
  • 操作详情
  • IP 地址

2.10 理财管理 (Earn Service)​

2.10.1 理财概览​

核心指标卡片:

指标说明数据来源
产品总数所有理财产品数量earn_products 表
募集中产品当前处于 subscribing 状态的产品earn_products 表
总募集金额所有产品已募集金额总和earn_products.subscribed_amount
待支付利息未结算产品预计利息总和earn_subscriptions 计算
已支付利息已结算并领取的利息总和earn_settlements 表
总参与人次所有申购记录数量earn_subscriptions 表

产品状态分布图:

状态说明颜色标识
created已创建,等待开启灰色
subscribing募集中绿色
active进行中(募集结束)蓝色
settling结算中橙色
ended已结束灰色

2.10.2 产品管理​

产品列表字段:

字段说明
产品ID链上产品ID (chain_product_id)
产品名称产品显示名称
年化收益率annual_rate_bps / 100 (%)
期限收益率period_rate_bps / 100 (%)
产品期限duration_days 或 duration_seconds
总额度募集上限 (USDT)
已募集当前已募集金额
募集进度subscribed_amount / total_quota (%)
参与人数subscriber_count
状态产品当前状态
申购开始subscribe_start_time
申购结束subscribe_end_time
结算时间settle_time

筛选条件:

  • 产品状态
  • 时间范围(创建时间、申购时间)
  • 年化收益率范围
  • 额度范围

产品详情页:

┌─────────────────────────────────────────────────────────────┐
│ 产品基本信息 │
├─────────────────────────────────────────────────────────────┤
│ 产品ID: 100 名称: HelloDream - 300% APY │
│ 合约地址: 0x2676...DCaB │
│ 年化: 300% 期限: 7天 期限利率: 5.75% │
├─────────────────────────────────────────────────────────────┤
│ 额度信息 │
├─────────────────────────────────────────────────────────────┤
│ 总额度: 50,000 USDT 已募集: 35,000 USDT 剩余: 15,000 │
│ 最小申购: 1 USDT 个人限额: 5,000 USDT │
│ 参与人数: 28 募集进度: ████████░░ 70% │
├─────────────────────────────────────────────────────────────┤
│ 时间信息 │
├─────────────────────────────────────────────────────────────┤
│ 创建时间: 2026-01-07 10:00:00 │
│ 申购开始: 2026-01-07 12:00:00 │
│ 申购结束: 2026-01-08 12:00:00 │
│ 预计结算: 2026-01-15 12:00:00 │
├─────────────────────────────────────────────────────────────┤
│ 资金状态 (v2/v3) │
├─────────────────────────────────────────────────────────────┤
│ 本金取出: ✅ 已取出 取出时间: 2026-01-08 13:00:00 │
│ 本息存回: ❌ 未存回 预计存回: 35,000 + 2,012.5 USDT │
└─────────────────────────────────────────────────────────────┘

2.10.3 创建产品​

创建流程:

1. 填写产品配置 (后台表单)
↓
2. 调用链上 createProduct() (后台触发或手动执行)
↓
3. 等待申购开始时间
↓
4. 调用 openSubscription() (后台自动或手动)
↓
5. 产品进入募集状态

表单字段:

字段类型必填说明
产品ID数字是链上唯一ID,自定义
产品名称文本是显示名称
产品描述富文本否详细描述
最大年化收益率数字是BPS 单位,如 30000 = 300%
产品期限数字是秒数 (v3) 或天数
总额度数字是USDT 金额
最小申购数字是最小申购金额
个人限额数字是单用户最大申购
申购开始时间日期时间是开始募集时间
申购结束时间日期时间是结束募集时间

创建后自动计算:

  • period_rate_bps = annual_rate_bps × duration / 365
  • settle_time = subscribe_end_time + duration

2.10.4 产品状态操作​

操作前置状态目标状态权限说明
开启申购createdsubscribingOPERATOR到达申购开始时间后执行
激活产品subscribingactiveOPERATOR申购结束后执行
取出本金activeactiveOPERATOR将本金转到 Treasury
存回本息activeactiveOPERATOR存入本金+利息
结算产品activesettledOPERATOR到期后执行结算
取消产品anycancelledADMIN紧急情况取消

操作确认弹窗:

┌─────────────────────────────────────────┐
│ ⚠️ 确认取出本金 │
├─────────────────────────────────────────┤
│ 产品: HelloDream - 300% APY │
│ 产品ID: 100 │
│ 取出金额: 35,000 USDT │
│ 目标地址: Treasury (0x6538...) │
│ │
│ 此操作将调用链上合约 │
│ withdrawPrincipal(100) │
│ │
│ 注意: 取出后必须在结算前存回本金+利息 │
│ │
│ [取消] [确认执行] │
└─────────────────────────────────────────┘

2.10.5 申购记录​

申购列表字段:

字段说明
申购ID唯一标识
产品ID关联的产品
产品名称产品显示名称
用户地址申购用户钱包
申购金额USDT 金额
NFT数量铸造的 NFT 数量 (1:1)
预期收益按期限利率计算
实际收益结算后的实际收益 (v3 动态)
NFT状态active / matured / redeemed
申购时间subscribe_tx 确认时间
领取状态是否已 claim
领取时间claim_tx 确认时间

筛选条件:

  • 产品ID/名称
  • 用户地址
  • 时间范围
  • 申购金额范围
  • 领取状态

2.10.6 结算管理​

待结算列表:

显示所有状态为 active 且已到期(当前时间 > settle_time)的产品:

字段说明
产品ID链上产品ID
产品名称产品显示名称
到期时间settle_time
超期时长当前时间 - settle_time
总本金subscribed_amount
应付利息本金 × period_rate
本金状态已取出 / 未取出
本息状态已存回 / 未存回
操作[存回本息] [结算]

结算记录:

字段说明
结算ID唯一标识
产品ID结算的产品
总本金结算的本金总额
总利息实际支付的利息 (v3 支持动态)
结算人数参与结算的用户数
结算交易settle_tx hash
结算时间结算完成时间

v3 动态利息结算:

┌─────────────────────────────────────────┐
│ 结算产品 - 设置实际利息 (v3) │
├─────────────────────────────────────────┤
│ 产品: HelloDream - 300% APY │
│ 本金总额: 35,000 USDT │
│ │
│ 最大利息: 2,012.50 USDT (5.75%) │
│ 实际利息: [________] USDT │
│ (0 ~ 2,012.50) │
│ │
│ 实际年化: XX.XX% │
│ 用户收益: 按比例分配 │
│ │
│ [取消] [确认结算] │
└─────────────────────────────────────────┘

2.10.7 理财统计报表​

统计维度:

维度指标
按时间日/周/月募集金额、利息支出
按产品各产品募集完成率、参与人数
按用户TOP 理财用户排行
收益分析平均年化、最高/最低年化

关键报表:

  1. 募集情况报表

    • 产品募集完成率
    • 募集金额趋势
    • 用户参与趋势
  2. 收益支出报表

    • 利息支出明细
    • 实际收益率 vs 预期收益率 (v3)
    • 平台利润分析
  3. 用户分析报表

    • 用户参与频次
    • 用户平均投资金额
    • 复购率分析

2.10.8 理财数据库表​

-- 理财产品表
CREATE TABLE earn_products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
chain_product_id BIGINT UNIQUE NOT NULL, -- 链上产品ID
contract_address VARCHAR(42) NOT NULL, -- 合约地址
name VARCHAR(100) NOT NULL,
description TEXT,
annual_rate_bps INTEGER NOT NULL, -- 年化收益率 (BPS)
duration_seconds BIGINT, -- v3: 期限秒数
duration_days INTEGER, -- 期限天数 (兼容)
period_rate_bps INTEGER NOT NULL, -- 期限收益率
total_quota DECIMAL(36,18) NOT NULL,
min_amount DECIMAL(36,18) NOT NULL,
max_amount_per_user DECIMAL(36,18) NOT NULL,
subscribed_amount DECIMAL(36,18) DEFAULT 0,
subscribe_start_time TIMESTAMPTZ NOT NULL,
subscribe_end_time TIMESTAMPTZ NOT NULL,
settle_time TIMESTAMPTZ NOT NULL,
actual_settle_time TIMESTAMPTZ,
status earn_product_status DEFAULT 'created',
subscriber_count INTEGER DEFAULT 0,
total_interest_paid DECIMAL(36,18) DEFAULT 0,
principal_withdrawn BOOLEAN DEFAULT FALSE, -- v2: 本金是否已取出
returns_deposited BOOLEAN DEFAULT FALSE, -- v2: 本息是否已存回
actual_interest DECIMAL(36,18), -- v3: 实际支付利息
creator_address VARCHAR(42) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 申购记录表
CREATE TABLE earn_subscriptions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID REFERENCES earn_products(id),
chain_product_id BIGINT NOT NULL,
user_address VARCHAR(42) NOT NULL,
amount DECIMAL(36,18) NOT NULL, -- 申购金额
nft_amount DECIMAL(36,18) NOT NULL, -- NFT 数量
expected_return DECIMAL(36,18) NOT NULL, -- 预期收益
actual_return DECIMAL(36,18), -- 实际收益 (v3)
nft_status earn_nft_status DEFAULT 'active',
subscribed_at TIMESTAMPTZ DEFAULT NOW(),
settled_at TIMESTAMPTZ,
claimed_at TIMESTAMPTZ,
subscribe_tx_hash VARCHAR(66),
claim_tx_hash VARCHAR(66),
claimed BOOLEAN DEFAULT FALSE,
UNIQUE(product_id, user_address)
);

-- 结算记录表
CREATE TABLE earn_settlements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID REFERENCES earn_products(id),
chain_product_id BIGINT NOT NULL,
total_principal DECIMAL(36,18) NOT NULL,
total_interest DECIMAL(36,18) NOT NULL,
actual_interest DECIMAL(36,18), -- v3: 实际利息
settled_count INTEGER NOT NULL,
tx_hash VARCHAR(66),
block_number BIGINT,
settled_at TIMESTAMPTZ DEFAULT NOW()
);

-- 状态枚举
CREATE TYPE earn_product_status AS ENUM (
'created', 'subscribing', 'active', 'settling', 'ended', 'cancelled'
);

CREATE TYPE earn_nft_status AS ENUM (
'active', 'matured', 'redeemed'
);

2.10.9 理财 Admin API​

方法路径描述
GET/admin/earn/overview理财概览数据
GET/admin/earn/products产品列表
GET/admin/earn/products/:id产品详情
POST/admin/earn/products创建产品
POST/admin/earn/products/:id/status更新产品状态
POST/admin/earn/products/:id/withdraw-principal取出本金
POST/admin/earn/products/:id/deposit-returns存回本息
POST/admin/earn/products/:id/settle结算产品
GET/admin/earn/products/:id/subscriptions产品申购列表
GET/admin/earn/subscriptions全部申购记录
GET/admin/earn/settlements结算记录
GET/admin/earn/stats统计数据

三、权限设计​

3.1 角色定义​

角色描述
super_admin超级管理员,拥有全部权限
operator运营人员,数据查看+运营工具
risk_manager风控人员,风控相关权限
finance财务人员,资金和财务报表
viewer只读用户,仅查看仪表盘

3.2 权限矩阵​

功能模块super_adminoperatorrisk_managerfinanceviewer
仪表盘✓✓✓✓✓
交易记录查看✓✓✓✓✗
用户管理✓✓✓✗✗
用户风控操作✓✗✓✗✗
推荐佣金管理✓✓✗✓✗
交易对管理✓✗✗✗✗
手续费配置✓✗✗✗✗
风控监控✓✗✓✗✗
资金管理✓✗✗✓✗
理财产品查看✓✓✗✓✗
理财产品创建✓✗✗✗✗
理财产品操作✓✓✗✗✗
理财结算管理✓✓✗✓✗
系统配置✓✗✗✗✗
操作日志✓✗✗✗✗
数据导出✓✓✓✓✗

四、技术实现建议​

4.1 技术栈​

层级技术选型说明
前端React + Ant Design Pro成熟的后台管理模板
后端Rust + Axum复用现有后端,新增 Admin API
数据库PostgreSQL复用现有数据库
缓存Redis复用现有 Redis
认证JWT + 钱包签名管理员登录认证

4.2 API 设计​

API 前缀: /api/v1/admin/

主要接口:

# 仪表盘
GET /admin/dashboard/overview # 概览数据
GET /admin/dashboard/charts # 图表数据

# 交易管理
GET /admin/trades # 交易列表
GET /admin/trades/:id # 交易详情
GET /admin/trades/export # 导出交易

GET /admin/orders # 订单列表
GET /admin/orders/:id # 订单详情

GET /admin/positions # 仓位列表
GET /admin/positions/:id # 仓位详情

# 用户管理
GET /admin/users # 用户列表
GET /admin/users/:address # 用户详情
POST /admin/users/:address/risk # 风控标记

# 推荐佣金
GET /admin/referrals # 推荐人列表
GET /admin/referrals/:address # 推荐人详情
GET /admin/commissions # 佣金明细
GET /admin/commissions/stats # 佣金统计
PUT /admin/referral/config # 佣金配置

# 交易对管理
GET /admin/markets # 交易对列表
POST /admin/markets # 添加交易对
PUT /admin/markets/:symbol # 更新交易对
PUT /admin/markets/:symbol/fees # 更新手续费
PUT /admin/markets/:symbol/status # 启用/禁用

# 资金管理
GET /admin/funds/overview # 资金概览
GET /admin/funds/deposits # 充值记录
GET /admin/funds/withdrawals # 提现记录
GET /admin/funds/fees # 手续费统计

# 风控
GET /admin/risk/liquidations # 强平监控
GET /admin/risk/alerts # 告警列表
PUT /admin/risk/config # 风控配置

# 系统配置
GET /admin/config # 获取配置
PUT /admin/config # 更新配置

# 操作日志
GET /admin/logs # 操作日志

# 理财管理
GET /admin/earn/overview # 理财概览
GET /admin/earn/products # 产品列表
GET /admin/earn/products/:id # 产品详情
POST /admin/earn/products # 创建产品
POST /admin/earn/products/:id/status # 更新产品状态
POST /admin/earn/products/:id/withdraw-principal # 取出本金
POST /admin/earn/products/:id/deposit-returns # 存回本息
POST /admin/earn/products/:id/settle # 结算产品
GET /admin/earn/products/:id/subscriptions # 产品申购列表
GET /admin/earn/subscriptions # 全部申购记录
GET /admin/earn/settlements # 结算记录
GET /admin/earn/stats # 统计数据

4.3 数据库扩展​

新增表:

-- 管理员表
CREATE TABLE admins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
address VARCHAR(42) UNIQUE NOT NULL,
role VARCHAR(20) NOT NULL,
name VARCHAR(100),
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 操作日志表
CREATE TABLE admin_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
admin_address VARCHAR(42) NOT NULL,
action VARCHAR(50) NOT NULL,
target_type VARCHAR(50),
target_id VARCHAR(100),
details JSONB,
ip_address VARCHAR(45),
created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 交易对配置表
CREATE TABLE market_configs (
symbol VARCHAR(20) PRIMARY KEY,
base_asset VARCHAR(10) NOT NULL,
quote_asset VARCHAR(10) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
max_leverage INTEGER DEFAULT 50,
maker_fee_rate DECIMAL(10,6) DEFAULT 0.0002,
taker_fee_rate DECIMAL(10,6) DEFAULT 0.0005,
min_order_size DECIMAL(36,18),
max_order_size DECIMAL(36,18),
max_position_size DECIMAL(36,18),
price_precision INTEGER DEFAULT 2,
size_precision INTEGER DEFAULT 6,
initial_margin_rate DECIMAL(10,6) DEFAULT 0.01,
maintenance_margin_rate DECIMAL(10,6) DEFAULT 0.005,
funding_interval INTEGER DEFAULT 28800,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 反佣配置表
CREATE TABLE referral_configs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tier INTEGER DEFAULT 1,
min_volume DECIMAL(36,18) DEFAULT 0,
commission_rate DECIMAL(10,6) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

4.4 财务表架构​

4.4.1 业务表与财务表分离​

在交易系统中,需要明确区分业务表和财务表:

分类表名用途
业务表users用户基础信息
orders订单记录
positions仓位记录
trades成交记录
markets交易对配置
财务表accounts用户账户(余额快照)
ledger_entries账本流水(复式记账)
fee_records手续费记录
commission_records佣金记录
funding_settlements资金费结算
daily_settlements每日结算汇总

分离原因:

  1. 审计合规:财务数据需要完整的审计追踪,复式记账确保每一笔资金变动都有迹可查
  2. 数据一致性:财务表采用严格的事务控制,业务表可以有更灵活的写入策略
  3. 查询优化:业务查询和财务对账有不同的查询模式,分离后可以分别优化
  4. 职责分离:开发时业务逻辑和财务逻辑解耦,降低出错风险

4.4.2 财务表设计​

-- 用户账户表(余额快照)
CREATE TABLE accounts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_address VARCHAR(42) NOT NULL,
token VARCHAR(20) NOT NULL,
available_balance DECIMAL(36,18) DEFAULT 0, -- 可用余额
frozen_balance DECIMAL(36,18) DEFAULT 0, -- 冻结余额
margin_balance DECIMAL(36,18) DEFAULT 0, -- 保证金占用
version BIGINT DEFAULT 0, -- 乐观锁版本号
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(user_address, token)
);

-- 账本流水表(复式记账核心)
CREATE TABLE ledger_entries (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_address VARCHAR(42) NOT NULL,
token VARCHAR(20) NOT NULL,
entry_type VARCHAR(30) NOT NULL, -- 类型:deposit, withdraw, trade_fee, commission, funding, pnl, liquidation
debit DECIMAL(36,18) DEFAULT 0, -- 借方(资产增加)
credit DECIMAL(36,18) DEFAULT 0, -- 贷方(资产减少)
balance_after DECIMAL(36,18) NOT NULL, -- 变动后余额
reference_type VARCHAR(30), -- 关联类型:order, trade, position, withdrawal
reference_id VARCHAR(100), -- 关联ID
description TEXT, -- 描述
created_at TIMESTAMPTZ DEFAULT NOW(),

-- 确保每条记录只有借或贷
CONSTRAINT check_debit_credit CHECK (
(debit > 0 AND credit = 0) OR (debit = 0 AND credit > 0)
)
);

-- 手续费记录表
CREATE TABLE fee_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
trade_id UUID NOT NULL,
user_address VARCHAR(42) NOT NULL,
symbol VARCHAR(20) NOT NULL,
fee_type VARCHAR(20) NOT NULL, -- maker / taker
fee_rate DECIMAL(10,6) NOT NULL,
fee_amount DECIMAL(36,18) NOT NULL,
trade_value DECIMAL(36,18) NOT NULL, -- 原始交易金额
ledger_entry_id UUID REFERENCES ledger_entries(id),
created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 佣金记录表
CREATE TABLE commission_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
referrer_address VARCHAR(42) NOT NULL, -- 推荐人
trader_address VARCHAR(42) NOT NULL, -- 交易者
trade_id UUID NOT NULL,
fee_record_id UUID REFERENCES fee_records(id),
commission_rate DECIMAL(10,6) NOT NULL,
commission_amount DECIMAL(36,18) NOT NULL,
tier INTEGER DEFAULT 1, -- 层级(一级/二级推荐)
status VARCHAR(20) DEFAULT 'pending', -- pending / settled / claimed
ledger_entry_id UUID REFERENCES ledger_entries(id),
settled_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 资金费结算表
CREATE TABLE funding_settlements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_address VARCHAR(42) NOT NULL,
position_id UUID NOT NULL,
symbol VARCHAR(20) NOT NULL,
funding_rate DECIMAL(18,10) NOT NULL,
position_value DECIMAL(36,18) NOT NULL,
settlement_amount DECIMAL(36,18) NOT NULL, -- 正数=收取,负数=支付
ledger_entry_id UUID REFERENCES ledger_entries(id),
settlement_time TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 每日结算汇总表
CREATE TABLE daily_settlements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
settlement_date DATE NOT NULL,
symbol VARCHAR(20), -- NULL 表示全平台汇总
total_trading_volume DECIMAL(36,18) DEFAULT 0,
total_maker_fees DECIMAL(36,18) DEFAULT 0,
total_taker_fees DECIMAL(36,18) DEFAULT 0,
total_commissions DECIMAL(36,18) DEFAULT 0,
total_funding_collected DECIMAL(36,18) DEFAULT 0,
total_funding_paid DECIMAL(36,18) DEFAULT 0,
total_liquidation_fees DECIMAL(36,18) DEFAULT 0,
net_revenue DECIMAL(36,18) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(settlement_date, symbol)
);

-- 索引优化
CREATE INDEX idx_ledger_user_time ON ledger_entries(user_address, created_at DESC);
CREATE INDEX idx_ledger_type_time ON ledger_entries(entry_type, created_at DESC);
CREATE INDEX idx_ledger_reference ON ledger_entries(reference_type, reference_id);
CREATE INDEX idx_fee_records_trade ON fee_records(trade_id);
CREATE INDEX idx_fee_records_user ON fee_records(user_address, created_at DESC);
CREATE INDEX idx_commission_referrer ON commission_records(referrer_address, created_at DESC);
CREATE INDEX idx_commission_status ON commission_records(status, created_at);

4.4.3 复式记账原则​

复式记账确保资金流转的完整性和可追溯性:

业务场景借方(Debit)贷方(Credit)
用户充值用户余额 +100平台负债 +100
用户提现平台负债 -100用户余额 -100
交易手续费平台收入 +0.05用户余额 -0.05
佣金发放推荐人余额 +0.015平台收入 -0.015
盈利平仓用户余额 +50对手方余额 -50

核心原则:

  • 每笔交易的 SUM(debit) = SUM(credit)
  • 任何时刻 SUM(所有debit) = SUM(所有credit)
  • 通过定期对账验证数据一致性

4.5 数据流架构​

4.5.1 三层数据处理模型​

根据数据的实时性要求和复杂度,采用三层数据处理模型:

┌─────────────────────────────────────────────────────────────────┐
│ 数据流架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Layer 1: 同步写入 (Synchronous) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 关键财务数据,同一事务内完成 │ │
│ │ - 余额变更 (accounts) │ │
│ │ - 账本流水 (ledger_entries) │ │
│ │ - 仓位更新 (positions) │ │
│ │ 延迟: &lt;10ms | 一致性: 强一致 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ Layer 2: 异步 Worker (Event-Driven) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 派生数据,通过消息队列异步处理 │ │
│ │ - 手续费记录 (fee_records) │ │
│ │ - 佣金计算 (commission_records) │ │
│ │ - 风控检测 │ │
│ │ - 通知推送 │ │
│ │ 延迟: 100ms-1s | 一致性: 最终一致 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ Layer 3: 定时任务 (Cron Jobs) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 统计聚合,定时批量处理 │ │
│ │ - 每日结算 (daily_settlements) │ │
│ │ - 资金费结算 (每8小时) │ │
│ │ - 对账检查 │ │
│ │ - 报表生成 │ │
│ │ 延迟: 分钟-小时级 | 一致性: 批量一致 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

4.5.2 各层详细说明​

Layer 1: 同步写入

// 示例:交易成交的同步写入
async fn process_trade(trade: &Trade, tx: &mut Transaction) -> Result<()> {
// 1. 更新 maker 余额
update_account_balance(tx, &trade.maker, -trade.maker_fee).await?;

// 2. 更新 taker 余额
update_account_balance(tx, &trade.taker, -trade.taker_fee).await?;

// 3. 写入账本流水
insert_ledger_entry(tx, LedgerEntry {
user_address: trade.maker.clone(),
entry_type: "trade_fee".to_string(),
credit: trade.maker_fee,
..
}).await?;

// 4. 更新仓位(如有)
update_position(tx, &trade).await?;

// 同一事务提交,保证原子性
Ok(())
}

Layer 2: 异步 Worker

Worker触发事件处理逻辑
FeeRecordWorkerTradeCreated从交易记录生成手续费记录
CommissionWorkerFeeRecordCreated根据推荐关系计算佣金
RiskAlertWorkerPositionUpdated检测风险并发送告警
NotificationWorkerVarious发送用户通知
// 示例:佣金计算 Worker
async fn commission_worker(event: FeeRecordCreated) {
// 1. 查询推荐关系
let referrer = get_referrer(&event.trader_address).await?;
if referrer.is_none() { return; }

// 2. 计算佣金
let commission = event.fee_amount * referrer.commission_rate;

// 3. 写入佣金记录
insert_commission_record(CommissionRecord {
referrer_address: referrer.address,
trader_address: event.trader_address,
commission_amount: commission,
status: "pending",
..
}).await?;
}

Layer 3: 定时任务

任务执行周期功能
DailySettlement每日 00:00 UTC生成每日结算汇总
FundingSettlement每 8 小时结算资金费
ReconciliationCheck每日 01:00 UTC对账检查
CommissionPayout每周一佣金发放
ReportGeneration每日 02:00 UTC生成财务报表
// 示例:每日对账检查
async fn daily_reconciliation() -> Result<ReconciliationReport> {
// 1. 检查复式记账平衡
let balance_check = sqlx::query!(
"SELECT SUM(debit) as total_debit, SUM(credit) as total_credit
FROM ledger_entries
WHERE created_at >= $1",
today_start
).fetch_one(&pool).await?;

assert_eq!(balance_check.total_debit, balance_check.total_credit);

// 2. 检查账户余额与流水一致性
let accounts = get_all_accounts().await?;
for account in accounts {
let calculated_balance = calculate_balance_from_ledger(&account).await?;
if account.available_balance != calculated_balance {
report.add_discrepancy(account, calculated_balance);
}
}

// 3. 生成对账报告
Ok(report)
}

4.5.3 ETL vs 轻量级方案分析​

在设计数据流架构时,我们评估了多种方案:

方案复杂度延迟适用场景评估结论
同步写入低<10ms关键财务数据✅ 采用
消息队列 + Worker中100ms-1s派生数据计算✅ 采用
定时任务 (Cron)低分钟级统计聚合✅ 采用
CDC (Debezium)高秒级数据同步到数据仓库⏸ 后期考虑
ETL Pipeline (Airflow)高分钟-小时级大规模数据分析❌ 过重

选择三层模型而非 ETL 的原因:

  1. 业务规模匹配

    • 当前日交易量级别,三层模型完全满足需求
    • ETL 适合日均百万级以上交易的大型交易所
  2. 运维复杂度

    • 三层模型:PostgreSQL + Redis + 简单 Worker
    • ETL 方案:需要 Kafka + Airflow + 数据仓库,运维成本高
  3. 数据一致性

    • 三层模型可以保证强一致性(Layer 1)+ 最终一致性(Layer 2/3)
    • ETL 天然是最终一致性,不适合实时财务数据
  4. 开发效率

    • 三层模型可以快速迭代,复用现有技术栈
    • ETL 需要额外学习成本和基础设施搭建

未来扩展路径:

当前方案                      未来扩展
┌──────────┐ ┌──────────┐
│ 三层模型 │ ──────────────→ │ + CDC │ ─────→ 数据仓库
│ (同步+异步│ 业务增长 │ Debezium │ BI 分析
│ +定时) │ │ │
└──────────┘ └──────────┘

当业务增长到需要更复杂分析时,可以通过 CDC 将数据同步到独立的数据仓库,而不影响核心交易系统。


五、开发计划​

Phase 1 (1-2周)​

  • 仪表盘核心指标
  • 交易记录查询与导出
  • 用户列表与详情
  • 基础权限认证

Phase 2 (1-2周)​

  • 交易对管理
  • 手续费配置
  • 仓位监控

Phase 3 (1-2周)​

  • 推荐佣金管理
  • 佣金统计报表
  • 资金管理

Phase 4 (1周)​

  • 风控监控
  • 操作日志
  • 完善与优化

Phase 5 (1-2周) - 理财管理​

  • 理财概览仪表盘
  • 产品列表与详情页
  • 产品创建表单
  • 产品状态操作(开启/激活/结算)
  • 资金操作(取出本金/存回本息)
  • 申购记录查询
  • 结算管理
  • 理财统计报表

六、附录​

6.1 术语表​

术语说明
Maker挂单方,提供流动性
Taker吃单方,消耗流动性
Mark Price标记价格,用于计算盈亏和强平
Index Price指数价格,来自外部交易所
Funding Rate资金费率,多空平衡机制
ADL自动减仓,极端行情下的风控机制
Liquidation强制平仓,保证金不足时触发
Earn Product理财产品,定期固定收益产品
APY年化收益率 (Annual Percentage Yield)
BPS基点,1 BPS = 0.01%
Period Rate期限收益率,单期产品的收益率
Subscribe申购,用户购买理财产品
Claim领取,用户领取本金+收益
Treasury资金库,用于管理平台资金
ERC-1155多代币标准,用于理财产品 NFT 确权
Soulbound灵魂绑定,NFT 不可转让

6.2 参考资料​

  • 现有 API 文档
  • 数据库 Schema
  • 竞品后台参考 (dYdX, GMX, Hyperliquid)
  • EARN_SERVICE_DESIGN.md - 理财服务设计文档

文档结束