NAC_Blockchain/nac-sdk/docs/ACC20C_GUIDE.md

503 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.

# ACC-20C: 兼容层协议使用指南
## 概述
ACC-20C是NAC与以太坊生态之间的**战略性桥梁**而非妥协。它提供双向包装机制让NAC原生的ACC-20资产能够在以太坊生态OpenSea等中流通同时保留NAC的合规特性。
## 核心理念
**NAC是核心ACC-20C是流动性入口**
### 为什么需要ACC-20C
1. **现实情况**
- 以太坊生态拥有数百万用户和成熟基础设施
- NAC是新生态需要冷启动
- 完全隔离会导致流动性不足
2. **战略价值**
- **短期1-2年**: 让ACC-20资产在OpenSea等市场流通
- **中期2-3年**: 逐步引导用户使用NAC原生工具
- **长期3年+**: ACC-20C变成可选而非必需
3. **合规不妥协**
- 即使包装成ERC-721仍保留KYC/AML检查
- 合规状态在NAC链上验证
- 冻结机制跨链同步
## 架构
```text
┌─────────────────────────────────────────────────────────┐
│ NAC原生生态核心
│ ┌──────────────────────────────────────────────────┐ │
│ │ ACC-20 Enhanced + GNACS + 主权管理 + 合规引擎 │ │
│ └──────────────────────────────────────────────────┘ │
│ ↕ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ ACC-20C兼容层战略桥梁 │ │
│ │ - 包装器合约 │ │
│ │ - 状态同步引擎 │ │
│ │ - 元数据生成器 │ │
│ │ - 权限代理系统 │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 以太坊生态(流动性来源) │
│ ERC-721标准 + OpenSea + MetaMask + DeFi协议 │
└─────────────────────────────────────────────────────────┘
```
## 核心组件
### 1. 包装器合约Wrapper
- 锁定ACC-20资产
- 铸造ERC-721 NFT
- 管理包装/解包装流程
### 2. 状态同步引擎SyncEngine
- 监听两条链的事件
- 同步状态变更
- 处理跨链消息
### 3. 元数据生成器MetadataGenerator
- 生成ERC-721元数据
- 包含GNACS信息
- 符合OpenSea标准
### 4. 权限代理系统PermissionProxy
- 跨链权限验证
- 合规检查代理
- 主权规则验证
## 使用流程
### 包装Wrap
```text
1. 用户在NAC链上调用wrap()
2. 锁定ACC-20资产
3. 生成包装记录
4. 同步引擎监听事件
5. 在以太坊链铸造ERC-721
6. 用户可在OpenSea交易
```
### 解包装Unwrap
```text
1. 用户在以太坊链销毁ERC-721
2. 同步引擎监听事件
3. 在NAC链验证合规性
4. 解锁ACC-20资产
5. 转回用户账户
```
## 快速开始
### 1. 添加依赖
```toml
[dependencies]
nac-sdk = "0.1.0"
nac-udm = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
```
### 2. 创建客户端
```rust
use nac_sdk::client::NacLensClient;
use nac_sdk::protocols::ACC20C;
let client = NacLensClient::new("https://rpc.newassetchain.io");
let acc20c = ACC20C::new(client);
```
### 3. 包装ACC-20为ERC-721
```rust
use nac_udm::primitives::Address;
use nac_udm::l1_protocol::acc20c::EthAddress;
// 准备地址
let wrapper_address = Address::from_hex("0x1234...")?;
let nac_owner = Address::from_hex("0x2234...")?;
let eth_recipient = EthAddress([0u8; 20]); // 以太坊地址
// 包装
let amount = 5_000_000_000_000_000_000u128; // 5 ACC-20
let token_id = acc20c.wrap(
&wrapper_address,
&nac_owner,
&eth_recipient,
amount,
).await?;
println!("ERC-721 Token ID: {}", token_id.low);
```
### 4. 解包装ERC-721为ACC-20
```rust
let nac_recipient = Address::from_hex("0x3234...")?;
let unwrapped_amount = acc20c.unwrap(
&wrapper_address,
token_id,
&eth_recipient,
&nac_recipient,
).await?;
println!("Unwrapped amount: {}", unwrapped_amount);
```
## API参考
### 包装/解包装操作
#### wrap
包装ACC-20为ERC-721
```rust
pub async fn wrap(
&self,
wrapper_address: &Address,
owner: &Address,
eth_recipient: &EthAddress,
amount: u128,
) -> Result<u256>
```
**参数**
- `wrapper_address` - 包装器合约地址
- `owner` - NAC链上的所有者地址
- `eth_recipient` - 以太坊链上的接收者地址
- `amount` - 包装数量
**返回**ERC-721 Token ID
#### unwrap
解包装ERC-721为ACC-20
```rust
pub async fn unwrap(
&self,
wrapper_address: &Address,
token_id: u256,
eth_owner: &EthAddress,
nac_recipient: &Address,
) -> Result<u128>
```
**参数**
- `wrapper_address` - 包装器合约地址
- `token_id` - ERC-721 Token ID
- `eth_owner` - 以太坊链上的所有者地址
- `nac_recipient` - NAC链上的接收者地址
**返回**解包装的ACC-20数量
### 查询方法
#### get_wrapped_asset
查询包装资产信息
```rust
pub async fn get_wrapped_asset(
&self,
wrapper_address: &Address,
token_id: u256,
) -> Result<WrappedAsset>
```
#### get_locked_holdings
查询锁定的持有量
```rust
pub async fn get_locked_holdings(
&self,
wrapper_address: &Address,
owner: &Address,
) -> Result<u128>
```
#### get_wrapper_config
查询包装器配置
```rust
pub async fn get_wrapper_config(
&self,
wrapper_address: &Address,
) -> Result<WrapperConfig>
```
#### get_wrapper_status
查询包装器状态
```rust
pub async fn get_wrapper_status(
&self,
wrapper_address: &Address,
) -> Result<WrapperStatus>
```
#### get_metadata_uri
获取元数据URI
```rust
pub async fn get_metadata_uri(
&self,
wrapper_address: &Address,
token_id: u256,
) -> Result<String>
```
### 管理方法
#### freeze_wrapped_asset
冻结包装资产
```rust
pub async fn freeze_wrapped_asset(
&self,
wrapper_address: &Address,
token_id: u256,
) -> Result<()>
```
#### unfreeze_wrapped_asset
解冻包装资产
```rust
pub async fn unfreeze_wrapped_asset(
&self,
wrapper_address: &Address,
token_id: u256,
) -> Result<()>
```
### 手续费计算
#### calculate_wrap_fee
计算包装手续费
```rust
pub async fn calculate_wrap_fee(
&self,
wrapper_address: &Address,
amount: u128,
) -> Result<u128>
```
#### calculate_unwrap_fee
计算解包装手续费
```rust
pub async fn calculate_unwrap_fee(
&self,
wrapper_address: &Address,
amount: u128,
) -> Result<u128>
```
## 数据结构
### WrappedAsset
包装后的资产
```rust
pub struct WrappedAsset {
pub token_id: u256,
pub original_holdings: u128,
pub original_owner: Address,
pub current_owner: EthAddress,
pub gnacs_code: GNACSCode,
pub wrapped_at: Timestamp,
pub metadata_uri: String,
pub compliance_snapshot: ComplianceSnapshot,
pub status: WrappedAssetStatus,
}
```
### WrapperConfig
包装器配置
```rust
pub struct WrapperConfig {
pub acc20_per_nft: u128,
pub allow_partial_wrap: bool,
pub wrap_fee_bps: u16,
pub unwrap_fee_bps: u16,
pub fee_recipient: Address,
pub preserve_compliance: bool,
pub min_wrap_amount: u128,
pub max_wrap_amount: u128,
}
```
### ComplianceSnapshot
合规快照
```rust
pub struct ComplianceSnapshot {
pub kyc_level: u8,
pub aml_status: u8,
pub compliance_level: u8,
pub jurisdiction: u8,
pub snapshot_at: Timestamp,
pub snapshot_hash: Hash,
}
```
## 完整示例
### 跨链流程示例
```rust
use nac_sdk::client::NacLensClient;
use nac_sdk::protocols::ACC20C;
use nac_udm::primitives::Address;
use nac_udm::l1_protocol::acc20c::EthAddress;
#[tokio::main]
async fn main() -> Result<()> {
// 1. 创建客户端
let client = NacLensClient::new("https://rpc.newassetchain.io");
let acc20c = ACC20C::new(client);
// 2. 准备地址
let wrapper_address = Address::from_hex("0x1234...")?;
let nac_owner = Address::from_hex("0x2234...")?;
let eth_trader = EthAddress([0x33; 20]);
// 3. 包装ACC-20
let amount = 5_000_000_000_000_000_000u128;
let token_id = acc20c.wrap(
&wrapper_address,
&nac_owner,
&eth_trader,
amount,
).await?;
println!("✓ Wrapped: Token ID {}", token_id.low);
// 4. 在OpenSea交易模拟
let new_eth_owner = EthAddress([0x44; 20]);
println!("✓ Traded on OpenSea");
// 5. 解包装回NAC
let new_nac_owner = Address::from_hex("0x3234...")?;
let unwrapped = acc20c.unwrap(
&wrapper_address,
token_id,
&new_eth_owner,
&new_nac_owner,
).await?;
println!("✓ Unwrapped: {} ACC-20", unwrapped);
Ok(())
}
```
## 最佳实践
### 1. 包装前检查
- 验证包装器状态是否为Active
- 检查包装数量是否在允许范围内
- 计算手续费,确保用户了解成本
### 2. 合规保留
- 包装前确保通过KYC/AML检查
- 定期验证合规快照
- 发现问题及时冻结资产
### 3. 手续费管理
- 使用基点bps计算手续费1基点 = 0.01%
- 包装和解包装都会收取手续费
- 手续费由包装器配置决定
### 4. 状态同步
- 包装后等待同步引擎确认
- 解包装前验证ERC-721所有权
- 监听跨链事件确保状态一致
### 5. 元数据管理
- 元数据URI符合ERC-721标准
- 包含GNACS编码信息
- 在OpenSea上正确显示
## 与ERC-721的对比
| 特性 | 标准ERC-721 | ACC-20C包装的ERC-721 |
|------|-------------|---------------------|
| 基础功能 | ✅ | ✅ |
| 合规检查 | ❌ | ✅ |
| 冻结机制 | ❌ | ✅ |
| GNACS编码 | ❌ | ✅ |
| 合规快照 | ❌ | ✅ |
| 双向包装 | ❌ | ✅ |
| 跨链同步 | ❌ | ✅ |
## 错误处理
```rust
use nac_sdk::error::{NACError, Result};
match acc20c.wrap(&wrapper_address, &owner, &eth_recipient, amount).await {
Ok(token_id) => println!("Success: {}", token_id.low),
Err(NACError::InvalidAddress(e)) => eprintln!("Invalid address: {}", e),
Err(NACError::InvalidResponse(e)) => eprintln!("Invalid response: {}", e),
Err(e) => eprintln!("Error: {:?}", e),
}
```
## 测试
运行单元测试:
```bash
cargo test acc20c
```
运行集成测试需要NAC节点和以太坊测试网
```bash
cargo test --test acc20c_integration_test -- --ignored
```
## 示例代码
完整的示例代码请参考:`examples/acc20c_example.rs`
运行示例:
```bash
cargo run --example acc20c_example
```
## 重要说明
⚠️ **ACC-20C不是NAC的核心而是生态扩展**
- NAC的核心是ACC-20 Enhanced + GNACS + 主权管理
- ACC-20C只是为了冷启动和流动性
- 随着NAC生态成熟ACC-20C的重要性会逐渐降低
- 最终目标是建立完全独立的NAC原生生态
## 相关资源
- [NAC技术白皮书](https://newassetchain.io/whitepaper)
- [ACC-20C兼容层协议文档](https://newassetchain.io/acc20c)
- [OpenSea集成指南](https://newassetchain.io/opensea)
- [跨链桥接安全指南](https://newassetchain.io/bridge-security)
## 许可证
MIT License