17 KiB
17 KiB
NAC RWA资产交易所架构设计
1. 系统概述
NAC RWA资产交易所是一个专为真实世界资产(Real World Assets)设计的去中心化交易平台,支持RWA资产的上架、交易、撮合、结算等全流程功能。系统采用NAC公链原生技术栈,确保合规性、安全性和高性能。
2. 核心架构
2.1 系统分层
┌─────────────────────────────────────────────────────────────┐
│ 前端界面层 (Frontend) │
│ - 交易界面 - 行情展示 - 资产管理 - 用户中心 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ API服务层 (API Layer) │
│ - REST API - WebSocket - NRPC4.0接口 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 业务逻辑层 (Business Logic) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 交易引擎 │ │ 合规引擎 │ │ 资产管理 │ │
│ │ - 订单簿 │ │ - KYC验证 │ │ - 资产上架 │ │
│ │ - 撮合引擎 │ │ - 限额控制 │ │ - 资产查询 │ │
│ │ - 清算结算 │ │ - 合规报告 │ │ - 资产转移 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 (Data Layer) │
│ - 订单数据库 - 用户数据库 - 资产数据库 - 交易记录 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 区块链层 (Blockchain Layer) │
│ - NVM虚拟机 - CBPP共识 - Charter智能合约 - CSNP网络 │
└─────────────────────────────────────────────────────────────┘
2.2 核心模块
2.2.1 交易引擎模块 (Trading Engine)
订单簿模型 (Order Book)
- 买单队列:按价格从高到低排序
- 卖单队列:按价格从低到高排序
- 时间优先:同价格按时间先后排序
- 支持限价单、市价单、止损单
撮合引擎 (Matching Engine)
- 价格优先原则
- 时间优先原则
- 实时撮合算法
- 部分成交支持
清算结算机制 (Settlement)
- T+0实时结算
- 资产锁定机制
- 交割确认流程
- 失败回滚机制
2.2.2 合规引擎模块 (Compliance Engine)
KYC验证集成
- 身份认证接口
- 实名验证流程
- 风险评级系统
- 黑名单管理
交易限额控制
- 单笔交易限额
- 日累计限额
- 月累计限额
- 动态限额调整
合规报告生成
- 交易记录报告
- 异常交易报告
- 监管数据导出
- 审计日志
监管接口
- 监管数据上报
- 实时监控接口
- 紧急冻结接口
- 数据查询接口
2.2.3 资产管理模块 (Asset Management)
资产上架
- 资产信息登记
- 资产审核流程
- 资产估值评估
- 上架审批流程
资产查询
- 资产列表查询
- 资产详情查询
- 资产历史查询
- 资产持有查询
资产转移
- 链上资产转移
- 转移确认机制
- 转移记录追踪
- 失败重试机制
3. 数据模型
3.1 订单模型 (Order)
pub struct Order {
pub id: OrderId, // 订单ID (UUID)
pub user_address: Address, // 用户地址 (32字节)
pub asset_id: AssetId, // 资产ID
pub order_type: OrderType, // 订单类型 (买单/卖单)
pub price_type: PriceType, // 价格类型 (限价/市价)
pub price: u64, // 价格 (单位: 最小精度)
pub quantity: u64, // 数量
pub filled_quantity: u64, // 已成交数量
pub status: OrderStatus, // 订单状态
pub created_at: i64, // 创建时间
pub updated_at: i64, // 更新时间
pub signature: Signature, // 签名 (96字节)
}
pub enum OrderType {
Buy, // 买单
Sell, // 卖单
}
pub enum PriceType {
Limit, // 限价单
Market, // 市价单
}
pub enum OrderStatus {
Pending, // 待处理
PartialFilled, // 部分成交
Filled, // 完全成交
Cancelled, // 已取消
Failed, // 失败
}
3.2 资产模型 (Asset)
pub struct RWAAsset {
pub id: AssetId, // 资产ID
pub name: String, // 资产名称
pub symbol: String, // 资产符号
pub asset_type: AssetType, // 资产类型
pub total_supply: u64, // 总供应量
pub circulating_supply: u64, // 流通量
pub issuer: Address, // 发行方地址 (32字节)
pub valuation: u64, // 估值
pub metadata: AssetMetadata, // 元数据
pub compliance_status: ComplianceStatus, // 合规状态
pub listed_at: i64, // 上架时间
}
pub enum AssetType {
RealEstate, // 房地产
Equity, // 股权
Bond, // 债券
Commodity, // 大宗商品
ArtWork, // 艺术品
Other, // 其他
}
pub enum ComplianceStatus {
Pending, // 待审核
Approved, // 已批准
Rejected, // 已拒绝
Suspended, // 已暂停
}
3.3 交易记录模型 (Trade)
pub struct Trade {
pub id: TradeId, // 交易ID
pub buy_order_id: OrderId, // 买单ID
pub sell_order_id: OrderId, // 卖单ID
pub buyer: Address, // 买方地址 (32字节)
pub seller: Address, // 卖方地址 (32字节)
pub asset_id: AssetId, // 资产ID
pub price: u64, // 成交价格
pub quantity: u64, // 成交数量
pub total_amount: u64, // 总金额
pub fee: u64, // 手续费
pub status: TradeStatus, // 交易状态
pub executed_at: i64, // 执行时间
pub settled_at: Option<i64>, // 结算时间
pub tx_hash: Hash, // 交易哈希 (48字节 SHA3-384)
}
pub enum TradeStatus {
Pending, // 待处理
Executing, // 执行中
Completed, // 已完成
Failed, // 失败
Rolled Back, // 已回滚
}
3.4 用户模型 (User)
pub struct User {
pub address: Address, // 用户地址 (32字节)
pub kyc_status: KYCStatus, // KYC状态
pub risk_level: RiskLevel, // 风险等级
pub daily_limit: u64, // 日交易限额
pub monthly_limit: u64, // 月交易限额
pub daily_volume: u64, // 日累计交易量
pub monthly_volume: u64, // 月累计交易量
pub is_blacklisted: bool, // 是否在黑名单
pub created_at: i64, // 创建时间
pub updated_at: i64, // 更新时间
}
pub enum KYCStatus {
NotVerified, // 未验证
Pending, // 审核中
Verified, // 已验证
Rejected, // 已拒绝
}
pub enum RiskLevel {
Low, // 低风险
Medium, // 中风险
High, // 高风险
Critical, // 极高风险
}
4. 核心算法
4.1 订单撮合算法
算法: 价格-时间优先撮合
输入: 新订单 new_order
输出: 撮合结果列表 matches
1. 如果 new_order 是买单:
a. 从卖单队列中取出价格最低的卖单 sell_order
b. 如果 sell_order.price <= new_order.price:
- 计算可成交数量 match_quantity = min(new_order.remaining, sell_order.remaining)
- 创建交易记录 trade
- 更新订单状态
- 如果 new_order 完全成交,退出
- 否则继续下一个卖单
c. 如果没有可匹配的卖单,将 new_order 加入买单队列
2. 如果 new_order 是卖单:
a. 从买单队列中取出价格最高的买单 buy_order
b. 如果 buy_order.price >= new_order.price:
- 计算可成交数量 match_quantity = min(new_order.remaining, buy_order.remaining)
- 创建交易记录 trade
- 更新订单状态
- 如果 new_order 完全成交,退出
- 否则继续下一个买单
c. 如果没有可匹配的买单,将 new_order 加入卖单队列
3. 返回撮合结果
4.2 清算结算流程
流程: T+0实时结算
1. 锁定阶段:
- 买方锁定支付金额
- 卖方锁定资产数量
- 验证双方余额充足
2. 执行阶段:
- 调用Charter智能合约执行资产转移
- 记录链上交易哈希
- 更新订单状态为"执行中"
3. 确认阶段:
- 等待区块确认 (3个区块)
- 验证交易成功
- 更新交易状态为"已完成"
4. 结算阶段:
- 解锁买方剩余资金
- 解锁卖方剩余资产
- 分配手续费
- 更新用户余额
5. 异常处理:
- 如果任何阶段失败,触发回滚
- 恢复双方锁定的资产
- 标记交易为"失败"
- 记录失败原因
5. 技术栈
5.1 后端技术
- 语言: Rust 1.70+
- Web框架: Axum 0.7
- 异步运行时: Tokio 1.0
- 序列化: Serde + Serde JSON
- 数据库: Sled (嵌入式KV数据库)
- 加密: SHA3-384 (NAC原生哈希算法)
- 智能合约: Charter语言
5.2 前端技术
- 框架: React 18 + TypeScript
- 构建工具: Vite
- 样式: TailwindCSS
- 状态管理: Zustand
- 图表: TradingView Lightweight Charts
- WebSocket: Socket.io-client
5.3 区块链技术
- 虚拟机: NVM (NAC Virtual Machine)
- 共识协议: CBPP (Constitutional Byzantine Paxos Protocol)
- 网络协议: CSNP (Constitutional Secure Network Protocol)
- RPC协议: NRPC4.0
- 类型系统: Address (32字节), Hash (48字节), Signature (96字节)
6. 安全设计
6.1 订单安全
- 所有订单必须使用用户私钥签名
- 订单签名验证使用NAC原生签名算法
- 防止重放攻击:订单包含时间戳和nonce
- 订单有效期限制:超时自动取消
6.2 资产安全
- 资产转移必须通过Charter智能合约
- 资产锁定机制防止双花
- 多重签名支持(可选)
- 冷热钱包分离
6.3 合规安全
- KYC数据加密存储
- 敏感信息脱敏处理
- 访问权限控制
- 审计日志完整记录
7. 性能优化
7.1 撮合引擎优化
- 使用优先队列(BinaryHeap)实现订单簿
- 订单索引优化:HashMap快速查找
- 批量撮合:一次处理多个订单
- 异步处理:撮合与结算并行
7.2 数据库优化
- 订单数据分片存储
- 热数据内存缓存
- 冷数据归档压缩
- 索引优化:按资产ID、用户地址、时间建立索引
7.3 网络优化
- WebSocket推送实时行情
- HTTP/2支持
- 数据压缩传输
- CDN加速静态资源
8. 监控与运维
8.1 监控指标
- 订单处理延迟
- 撮合引擎TPS
- 系统资源使用率
- 错误率和成功率
- 用户活跃度
8.2 告警机制
- 系统异常告警
- 性能下降告警
- 安全事件告警
- 合规风险告警
8.3 日志管理
- 结构化日志
- 日志分级:DEBUG, INFO, WARN, ERROR
- 日志归档和清理
- 日志分析和查询
9. 部署架构
9.1 服务部署
┌─────────────────────────────────────────────────────────────┐
│ 负载均衡器 (Nginx) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ API网关 (API Gateway) │
└─────────────────────────────────────────────────────────────┘
↓
┌────────────────┬────────────────┬────────────────┐
↓ ↓ ↓ ↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 交易服务实例1 │ │ 交易服务实例2 │ │ 交易服务实例3 │ │ 交易服务实例N │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
↓ ↓ ↓ ↓
┌─────────────────────────────────────────────────────────────┐
│ 数据库集群 (Sled) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ NAC区块链节点集群 │
└─────────────────────────────────────────────────────────────┘
9.2 容灾备份
- 主从数据库复制
- 定期数据备份
- 异地灾备
- 快速故障切换
10. 开发计划
阶段1: 核心交易功能 (第1-2周)
- 实现订单簿数据结构
- 实现撮合引擎
- 实现清算结算机制
- 单元测试覆盖
阶段2: 合规功能 (第3周)
- 实现KYC验证接口
- 实现交易限额控制
- 实现合规报告生成
- 实现监管接口
阶段3: 前端界面 (第4周)
- 设计交易界面
- 实现行情展示
- 实现交易操作
- 实现用户资产管理
阶段4: 测试与文档 (第5周)
- 集成测试
- 性能测试
- API文档
- 用户手册
阶段5: 部署上线 (第6周)
- 生产环境部署
- 监控配置
- 安全审计
- 正式上线
11. 参考资料
- NAC公链技术白皮书
- Charter智能合约语言规范
- CBPP共识协议文档
- NRPC4.0协议规范
- ACC-20资产协议标准