483 lines
17 KiB
Markdown
483 lines
17 KiB
Markdown
# 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)
|
||
|
||
```rust
|
||
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)
|
||
|
||
```rust
|
||
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)
|
||
|
||
```rust
|
||
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)
|
||
|
||
```rust
|
||
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资产协议标准
|