10 KiB
10 KiB
NAC跨链桥接架构设计文档
1. 架构概述
NAC跨链桥接模块采用锁定-铸造-销毁-解锁模型,实现NAC公链与以太坊、BSC等EVM兼容链之间的资产互通。
1.1 核心组件
┌─────────────────────────────────────────────────────────────┐
│ NAC跨链桥接系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 桥接管理器 │───▶│ 中继节点 │───▶│ 验证器池 │ │
│ │ (Manager) │ │ (Relayer) │ │ (Validator) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 资产锁定器 │ │ 消息传递器 │ │ 事件监听器 │ │
│ │ (Locker) │ │ (Messenger) │ │ (Listener) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ NAC主链 │ │ 以太坊/BSC │
│ │ │ │
│ 锁定合约 │◀────────跨链消息────────▶│ 映射合约 │
│ (Lock) │ │ (Wrapped) │
└─────────────────┘ └─────────────────┘
1.2 工作流程
从NAC到以太坊(锁定-铸造)
- 用户在NAC链上锁定资产
- 事件监听器捕获锁定事件
- 中继节点验证事件有效性
- 验证器池达成共识
- 在以太坊上铸造对应的包装资产
从以太坊到NAC(销毁-解锁)
- 用户在以太坊上销毁包装资产
- 事件监听器捕获销毁事件
- 中继节点验证事件有效性
- 验证器池达成共识
- 在NAC链上解锁原始资产
2. 跨链协议设计
2.1 消息格式
pub struct CrossChainMessage {
// 消息ID(唯一标识)
pub id: [u8; 32],
// 源链ID
pub source_chain: ChainId,
// 目标链ID
pub target_chain: ChainId,
// 消息类型(锁定/解锁/铸造/销毁)
pub message_type: MessageType,
// 资产信息
pub asset: AssetInfo,
// 发送者地址
pub sender: Address,
// 接收者地址
pub receiver: Address,
// 金额
pub amount: U256,
// 时间戳
pub timestamp: u64,
// 签名列表(多签验证)
pub signatures: Vec<Signature>,
}
2.2 验证机制
采用多签验证模式:
- 至少需要 2/3 的验证器签名
- 验证器通过质押NAC代币获得资格
- 恶意验证器将被罚没质押资产
2.3 安全措施
- 双花防护:消息ID唯一性检查
- 重放攻击防护:时间戳和nonce机制
- 金额限制:单笔和日累计限额
- 暂停机制:紧急情况下可暂停桥接
- 审计日志:所有操作完整记录
3. 资产锁定/解锁机制
3.1 锁定机制
pub trait AssetLocker {
// 锁定资产
async fn lock_asset(
&self,
asset: AssetId,
amount: U256,
target_chain: ChainId,
receiver: Address,
) -> Result<LockReceipt>;
// 查询锁定状态
async fn get_lock_status(&self, lock_id: [u8; 32]) -> Result<LockStatus>;
}
3.2 解锁机制
pub trait AssetUnlocker {
// 解锁资产
async fn unlock_asset(
&self,
lock_id: [u8; 32],
proof: UnlockProof,
) -> Result<UnlockReceipt>;
// 验证解锁证明
async fn verify_unlock_proof(&self, proof: &UnlockProof) -> Result<bool>;
}
3.3 状态管理
使用状态机模型管理资产状态:
Pending → Locked → Confirmed → Minted
↓
Failed → Refunded
4. 跨链消息传递协议
4.1 消息传递流程
发送方链 中继网络 接收方链
│ │ │
│──① 发送消息──────────▶│ │
│ │──② 验证消息──────────▶│
│ │ │
│ │◀─③ 确认接收──────────│
│◀─④ 返回收据──────────│ │
4.2 消息优先级
- 高优先级:大额转账、紧急操作
- 普通优先级:常规转账
- 低优先级:批量操作
4.3 消息确认
- 快速确认:1个区块确认(适用于小额)
- 标准确认:12个区块确认(适用于中额)
- 安全确认:64个区块确认(适用于大额)
5. 中继节点设计
5.1 节点职责
- 监听源链事件
- 验证事件有效性
- 构造跨链消息
- 提交到目标链
- 处理失败重试
5.2 节点激励
- 每成功中继一笔交易,获得手续费分成
- 质押NAC代币获得中继资格
- 恶意行为将被罚没质押
5.3 去中心化
- 任何人都可以成为中继节点
- 通过质押和信誉系统筛选节点
- 多节点竞争提高效率和安全性
6. 性能指标
- 吞吐量:100 TPS
- 确认时间:1-5分钟(取决于确认级别)
- 手续费:0.1%-0.5%
- 最大单笔金额:100,000 USDT等值
- 日累计限额:1,000,000 USDT等值
7. 技术栈
- Rust:核心逻辑实现
- Tokio:异步运行时
- Ethers-rs:以太坊集成
- Sled:本地状态存储
- WebSocket:实时事件监听
8. 部署架构
┌─────────────────────────────────────────────────────────┐
│ 生产环境部署 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ 中继节点1 │ │ 中继节点2 │ │ 中继节点3 │ │
│ │ (主节点) │ │ (备份节点) │ │(备份节点) │ │
│ └──────────────┘ └──────────────┘ └───────────┘ │
│ │ │ │ │
│ └────────────────────┴────────────────────┘ │
│ │ │
│ ┌─────────▼─────────┐ │
│ │ 负载均衡器 │ │
│ └─────────┬─────────┘ │
│ │ │
│ ┌────────────────────┼────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ NAC节点 │ │ ETH节点 │ │ BSC节点 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
9. 监控和告警
- 健康检查:节点状态、网络连接、区块同步
- 性能监控:TPS、延迟、成功率
- 异常告警:交易失败、验证失败、网络异常
- 审计日志:所有操作完整记录
10. 未来扩展
- 支持更多区块链(Polygon、Avalanche等)
- 支持NFT跨链
- 支持智能合约跨链调用
- 实现跨链流动性池
- 集成去中心化预言机
文档版本: 1.0
最后更新: 2026-02-18
维护者: NAC开发团队