NAC_Blockchain/nac-bridge-contracts/README.md

453 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NAC跨链桥Charter智能合约
**版本**: v1.0.0
**语言**: Charter
**状态**: 开发中
---
## 📦 合约概述
NAC跨链桥智能合约使用**Charter语言**编写实现NAC公链与外部区块链如以太坊的跨链资产转移功能。
### 核心特性
-**Charter原生**完全使用NAC原生Charter语言不继承任何以太坊标准
-**ACC-20C协议**实现NAC包裹资产标准
-**宪法收据集成**:所有跨链操作需要宪法收据验证
-**中继节点验证**:多签名中继节点确保安全性
-**10%限制**单个包裹资产不超过原资产总量的10%
-**BLS签名**使用BLS聚合签名提高效率
---
## 🏗️ 合约结构
```
nac-bridge-contracts/
├── src/
│ ├── cross_chain_bridge.charter # 跨链桥主合约
│ └── wrapped_asset.charter # ACC-20C包裹资产合约
├── tests/
│ ├── bridge_test.charter # 桥合约测试
│ └── wrapped_asset_test.charter # 包裹资产测试
└── README.md
```
---
## 📋 合约详解
### 1. CrossChainBridge跨链桥主合约
#### 核心功能
| 功能 | 方法 | 说明 |
|------|------|------|
| 添加外部链 | `add_external_chain()` | 添加支持的外部区块链 |
| 添加资产映射 | `add_asset_mapping()` | 映射外部资产到NAC包裹资产 |
| 提交锁定请求 | `submit_lock_request()` | 外部链→NAC锁定并铸造 |
| 提交解锁请求 | `submit_unlock_request()` | NAC→外部链销毁并解锁 |
| 查询请求 | `get_request()` | 查询跨链请求状态 |
| 暂停/恢复 | `pause()`/`unpause()` | 紧急暂停功能 |
#### 数据结构
**ExternalChain**(外部链信息)
```charter
public struct ExternalChain {
chain_id: uint64, // 链ID1=以太坊主网)
chain_name: bytes32, // 链名称
bridge_contract: bytes, // 外部链桥合约地址
enabled: bool, // 是否启用
min_confirmations: uint16, // 最小确认数
max_lock_amount: uint128 // 单次最大锁定金额
}
```
**CrossChainRequest**(跨链请求)
```charter
public struct CrossChainRequest {
request_id: bytes32, // 请求ID
operation: CrossChainOperation, // Lock/Unlock/Mint/Burn
source_chain: uint64, // 源链ID
target_chain: uint64, // 目标链ID
source_address: bytes, // 源地址
target_address: [u8; 32], // 目标地址NAC地址
asset_id: bytes32, // 资产ID
amount: uint128, // 数量
tx_hash: bytes32, // 原始交易哈希
proof: bytes, // SPV证明或中继签名
status: RequestStatus, // 状态
created_at: uint64, // 创建时间
completed_at: uint64, // 完成时间
relay_signatures: []bytes // 中继节点签名
}
```
**AssetMapping**(资产映射)
```charter
public struct AssetMapping {
external_chain_id: uint64, // 外部链ID
external_asset_address: bytes, // 外部资产合约地址
nac_wrapped_asset_id: bytes32, // NAC包裹资产ID
symbol: bytes32, // 符号
decimals: uint8, // 小数位数
total_locked: uint128, // 总锁定量
total_minted: uint128, // 总铸造量
enabled: bool // 是否启用
}
```
#### 安全机制
1. **中继签名验证**需要最少N个中继节点的BLS签名
2. **10%限制检查**包裹资产总量不超过原资产的10%
3. **暂停机制**:管理员可紧急暂停所有跨链操作
4. **权限控制**:只有管理员可以添加链和资产映射
---
### 2. WrappedAssetACC-20C包裹资产合约
#### 核心功能
| 功能 | 方法 | 说明 |
|------|------|------|
| 查询余额 | `balance_of()` | 查询账户余额 |
| 转账 | `transfer()` | 转账给其他账户 |
| 授权 | `approve()` | 授权其他账户使用额度 |
| 授权转账 | `transfer_from()` | 从授权额度转账 |
| 铸造 | `mint()` | 铸造新Token仅桥合约 |
| 销毁 | `burn()` | 销毁Token仅桥合约 |
#### ACC-20C vs ERC-20
| 特性 | ERC-20 | ACC-20C |
|------|--------|---------|
| 语言 | Solidity | **Charter** |
| 地址格式 | 20字节 | **32字节NAC地址** |
| 元数据 | name/symbol/decimals | **+ GNACS + sovereignty** |
| 铸造权限 | owner | **仅桥合约** |
| 销毁权限 | 任意 | **仅桥合约** |
| 暂停机制 | 可选 | **内置** |
#### 元数据结构
```charter
public struct WrappedAssetMetadata {
name: bytes32, // 资产名称
symbol: bytes32, // 资产符号
decimals: uint8, // 小数位数
original_chain_id: uint64, // 原始链ID
original_asset_address: bytes, // 原始资产地址
bridge_contract: [u8; 32], // 桥合约地址
gnacs: bytes12, // GNACS编码
sovereignty: bytes2 // 主权级别C2=跨链资产)
}
```
---
## 🚀 使用示例
### 1. 部署跨链桥合约
```charter
// 部署桥合约
let admin = [0x01; 32]; // 管理员地址
let min_signatures = 3; // 最少3个中继签名
let bridge = CrossChainBridge::new(admin, min_signatures);
```
### 2. 添加以太坊支持
```charter
// 添加以太坊主网
bridge.add_external_chain(
1, // 以太坊主网链ID
b"Ethereum", // 链名称
b"0x1234...5678", // 以太坊桥合约地址
12, // 12个确认
1_000_000_000_000_000_000_000 // 最大锁定1000 ETH
);
```
### 3. 添加ETH→wETH映射
```charter
// 映射ETH到wETH
bridge.add_asset_mapping(
1, // 以太坊链ID
b"0x0000000000000000000000000000000000000000", // ETH地址0地址
compute_asset_id(b"wETH"), // NAC包裹ETH资产ID
b"wETH", // 符号
18 // 18位小数
);
```
### 4. 用户跨链流程ETH → NAC
#### Step 1: 用户在以太坊锁定ETH
```solidity
// 以太坊侧(用户操作)
EthereumBridge.lockETH{value: 1 ether}(
nacTargetAddress // 用户的NAC地址
);
```
#### Step 2: 中继节点监听并提交到NAC
```charter
// NAC侧中继节点操作
let request_id = bridge.submit_lock_request(
1, // 以太坊链ID
b"0xUserEthAddress", // 用户以太坊地址
nac_user_address, // 用户NAC地址
b"0x0000000000000000000000000000000000000000", // ETH地址
1_000_000_000_000_000_000, // 1 ETH (wei)
eth_tx_hash, // 以太坊交易哈希
spv_proof, // SPV证明
relay_signatures // 中继签名
);
```
#### Step 3: 用户收到wETH
```charter
// 查询wETH余额
let weth_asset_id = compute_asset_id(b"wETH");
let balance = WrappedAsset::balance_of(nac_user_address);
// balance = 1_000_000_000_000_000_000 (1 wETH)
```
### 5. 用户跨链流程NAC → ETH
#### Step 1: 用户在NAC销毁wETH
```charter
// NAC侧用户操作
let request_id = bridge.submit_unlock_request(
1, // 以太坊链ID
b"0xUserEthAddress", // 用户以太坊地址
weth_asset_id, // wETH资产ID
1_000_000_000_000_000_000 // 1 wETH
);
```
#### Step 2: 中继节点监听并在以太坊解锁
```solidity
// 以太坊侧(中继节点操作)
EthereumBridge.unlockETH(
userEthAddress, // 用户以太坊地址
1 ether, // 1 ETH
nacTxHash, // NAC交易哈希
relaySignatures // 中继签名
);
```
#### Step 3: 用户收到ETH
用户在以太坊账户收到1 ETH。
---
## 🔒 安全特性
### 1. 中继节点多签
- 使用BLS聚合签名
- 需要至少N个中继节点签名
- 中继节点公钥存储在合约中
- 管理员可动态添加/移除中继节点
### 2. 10%限制
```charter
// 检查10%限制
let max_allowed = self.get_max_lockable_amount(nac_asset_id);
require(total_locked + amount <= max_allowed, "Exceeds 10% limit");
```
### 3. 暂停机制
```charter
// 紧急暂停
bridge.pause();
// 恢复
bridge.unpause();
```
### 4. 权限控制
- **管理员**:可以添加链、添加映射、暂停/恢复
- **桥合约**:可以铸造和销毁包裹资产
- **用户**:可以提交解锁请求、转账包裹资产
---
## 📊 Charter语言特性
### 1. 原生类型
| Charter类型 | 说明 | 示例 |
|-------------|------|------|
| `uint8` | 8位无符号整数 | `18` |
| `uint16` | 16位无符号整数 | `5000` |
| `uint64` | 64位无符号整数 | `1` (链ID) |
| `uint128` | 128位无符号整数 | `1_000_000_000_000_000_000` |
| `bytes` | 动态字节数组 | `b"0x1234..."` |
| `bytes32` | 32字节固定数组 | 请求ID、资产ID |
| `bytes48` | 48字节固定数组 | BLS公钥 |
| `[u8; 32]` | 32字节数组 | NAC地址 |
| `bool` | 布尔值 | `true`/`false` |
### 2. 集合类型
```charter
// 映射
map<K, V>
// 动态数组
[]T
// 固定数组
[N]T
```
### 3. 合约结构
```charter
contract ContractName {
storage {
// 存储变量
}
constructor(params) {
// 构造函数
}
pub fn public_function(params) -> ReturnType {
// 公共函数
}
fn private_function(params) -> ReturnType {
// 私有函数
}
}
```
### 4. 事件
```charter
event EventName {
field1: Type1,
field2: Type2
}
// 触发事件
emit EventName {
field1: value1,
field2: value2
};
```
### 5. 断言和错误处理
```charter
require(condition, "Error message");
```
---
## 🧪 测试
### 运行测试
```bash
charter test src/
```
### 测试用例
1. **桥合约测试**
- 添加外部链
- 添加资产映射
- 提交锁定请求
- 提交解锁请求
- 验证中继签名
- 10%限制检查
- 暂停/恢复
2. **包裹资产测试**
- 铸造
- 销毁
- 转账
- 授权
- 授权转账
- 暂停/恢复
---
## 📖 与Solidity对比
| 特性 | Solidity | Charter |
|------|----------|---------|
| 语言设计 | 以太坊专用 | **NAC原生** |
| 地址类型 | `address` (20字节) | **`[u8; 32]` (32字节)** |
| 映射 | `mapping(K => V)` | **`map<K, V>`** |
| 数组 | `uint[]` | **`[]uint`** |
| 断言 | `require()` | **`require()`** |
| 事件 | `event` + `emit` | **`event` + `emit`** |
| 继承 | `is` | **无继承(组合优于继承)** |
| 接口 | `interface` | **`trait`** |
| 修饰符 | `modifier` | **函数内检查** |
---
## 🚀 下一步计划
### Phase 1: 合约完善1周
- [ ] 实现BLS签名验证
- [ ] 实现宪法收据验证
- [ ] 完善10%限制逻辑
- [ ] 添加事件定义
### Phase 2: 测试1周
- [ ] 单元测试
- [ ] 集成测试
- [ ] 安全审计
### Phase 3: 部署1周
- [ ] 部署到NAC测试网
- [ ] 集成到钱包
- [ ] 文档完善
---
## 📄 许可证
Copyright © 2026 NAC Wallet Team
All rights reserved.
---
## 📞 联系方式
**开发团队**: NAC Wallet Team
**项目地址**: `/home/ubuntu/NAC_Clean_Dev/nac-bridge-contracts`
**版本**: v1.0.0
**状态**: 开发中
---
**重要提醒**
- ✅ 使用Charter语言不是Solidity
- ✅ 实现ACC-20C协议不是ERC-20
- ✅ NAC原生开发不继承以太坊标准
- ✅ 32字节NAC地址不是20字节以太坊地址