跳到主要内容

后台管理系统设计

版本: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关键财务数据✅ 采用
消息队列 + Worker100ms-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 - 理财服务设计文档

文档结束