# ACC-721 唯一资产证书协议使用指南 ## 概述 ACC-721是NAC原生的唯一资产证书协议,用于表示不可分割的唯一资产(如房地产、艺术品、收藏品等)。与ERC-721不同,ACC-721深度集成了NAC的核心特性,为RWA(Real World Assets)提供完整的链上管理能力。 ## 核心特性 ### NAC原生特性 1. **资产DNA** - 每个唯一资产都有独特的DNA,包含: - DNA哈希(Blake3) - 物理指纹(高精度扫描数据的哈希) - 法律文件哈希 - 生成时间戳 2. **GNACS编码** - 48位全球原生资产链统一分类标准 - 资产类别编码 - 地理位置编码 - 合规级别编码 3. **主权类型** - 支持7种资产权利类型: - A0: 完全所有权 - B1: 使用权 - C2: 收益权 - D2: 处置权 - E3: 担保权 - F4: 优先权 - G5: 其他权利 4. **托管系统** - 内置托管方信息: - 托管方地址 - 托管开始时间 - 托管状态 - 托管证明哈希 5. **保险系统** - 内置保险信息: - 保险方地址 - 保险金额(XTZH) - 保险期限 - 保险单号 6. **估值系统** - 支持AI估值: - 估值金额(XTZH) - 估值提供者 - 估值时间 - 有效期 7. **碎片化** - NAC独有功能: - 将唯一资产碎片化为可替代代币(ACC-20) - 支持重组回唯一资产 - 碎片价格和数量可配置 8. **宪法收据** - 所有操作都生成宪法收据: - 记录操作类型 - 记录参与方 - 记录时间戳 - 链上可验证 ## 快速开始 ### 1. 安装依赖 在 `Cargo.toml` 中添加: ```toml [dependencies] nac-sdk = "2.0.0" nac-udm = "1.0.0" tokio = { version = "1.0", features = ["full"] } ``` ### 2. 创建客户端 ```rust use nac_sdk::client::NacLensClient; use nac_sdk::protocols::ACC721; let client = NacLensClient::new("https://rpc.newassetchain.io"); let acc721 = ACC721::new(client); ``` ### 3. 铸造唯一资产 ```rust use nac_udm::primitives::{Address, Hash, Timestamp}; let asset_dna = acc721.mint_asset( &certificate_address, &owner_address, asset_id, "ipfs://QmMetadata123".to_string(), physical_fingerprint, legal_document_hash, custodian_address, insurer_address, insurance_coverage, insurance_expiry, ).await?; println!("Asset DNA: {}", asset_dna.dna_hash.to_hex()); ``` ### 4. 转移资产 ```rust let receipt_hash = acc721.transfer_asset( &certificate_address, &from_address, &to_address, asset_id, ).await?; println!("Constitutional Receipt: {}", receipt_hash.to_hex()); ``` ### 5. 碎片化资产 ```rust let pool = acc721.fragmentize_asset( &certificate_address, &owner_address, asset_id, 1000, // 碎片数量 5_000_000_000_000_000u128, // 每个碎片价格(0.005 XTZH) ).await?; println!("Fragment Token Address: {}", pool.fragment_token_address); ``` ## API参考 ### 核心方法 #### mint_asset() 铸造唯一资产。 **参数**: - `certificate_address` - 证书地址 - `to` - 接收者地址 - `asset_id` - 资产ID - `metadata_uri` - 资产元数据URI - `physical_fingerprint` - 物理指纹哈希 - `legal_document_hash` - 法律文件哈希 - `custodian` - 托管方地址 - `insurer` - 保险方地址 - `insurance_coverage` - 保险金额(XTZH) - `insurance_expiry` - 保险到期时间 **返回**:`AssetDNA` #### transfer_asset() 转移资产。 **参数**: - `certificate_address` - 证书地址 - `from` - 发送者地址 - `to` - 接收者地址 - `asset_id` - 资产ID **返回**:宪法收据哈希 #### fragmentize_asset() 碎片化资产(将ACC-721转换为ACC-20)。 **参数**: - `certificate_address` - 证书地址 - `owner` - 资产持有者地址 - `asset_id` - 资产ID - `fragment_count` - 碎片总数 - `fragment_price` - 碎片价格(XTZH) **返回**:`FragmentationPool` ### 查询方法 #### get_asset_holder() 获取资产持有者。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:持有者地址 #### get_asset_dna() 获取资产DNA。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:`AssetDNA` #### get_asset_metadata() 获取资产元数据URI。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:元数据URI字符串 #### get_custody_info() 获取托管信息。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:`CustodyInfo` #### get_insurance_info() 获取保险信息。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:`InsuranceInfo` #### get_asset_valuation() 获取资产估值。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID **返回**:`AssetValuation` ### 管理方法 #### approve_asset() 授权资产。 **参数**: - `certificate_address` - 证书地址 - `owner` - 资产持有者地址 - `approved` - 被授权者地址 - `asset_id` - 资产ID #### burn_asset() 销毁资产。 **参数**: - `certificate_address` - 证书地址 - `owner` - 资产持有者地址 - `asset_id` - 资产ID #### update_valuation() 更新资产估值。 **参数**: - `certificate_address` - 证书地址 - `asset_id` - 资产ID - `valuation` - 新的资产估值 ## 完整示例 查看 `examples/acc721_example.rs` 获取完整的使用示例。 运行示例: ```bash cargo run --example acc721_example ``` ## 测试 运行单元测试: ```bash cargo test --test acc721_integration_test ``` 运行集成测试(需要NAC节点): ```bash cargo test --test acc721_integration_test -- --ignored ``` ## 与ERC-721的区别 | 特性 | ERC-721 | ACC-721 | |------|---------|---------| | 基础功能 | ✅ | ✅ | | 资产DNA | ❌ | ✅ | | GNACS编码 | ❌ | ✅ | | 主权类型 | ❌ | ✅ | | 托管系统 | ❌ | ✅ | | 保险系统 | ❌ | ✅ | | AI估值 | ❌ | ✅ | | 碎片化 | ❌ | ✅ | | 宪法收据 | ❌ | ✅ | | RPC协议 | JSON-RPC | NAC Lens | | 哈希算法 | Keccak256 | Blake3 | ## 最佳实践 ### 1. 资产DNA生成 ```rust // 使用高精度扫描数据生成物理指纹 let scan_data = load_3d_scan_data("asset.obj"); let physical_fingerprint = Hash::sha3_384(&scan_data); // 使用法律文件生成文件哈希 let legal_doc = load_legal_document("deed.pdf"); let legal_document_hash = Hash::sha3_384(&legal_doc); ``` ### 2. 保险金额计算 ```rust // 保险金额应该以XTZH的最小单位(wei)表示 // 1 XTZH = 10^18 wei let insurance_coverage_xtzh = 5.0; // 5 XTZH let insurance_coverage = (insurance_coverage_xtzh * 1e18) as u128; ``` ### 3. 碎片化策略 ```rust // 碎片数量应该根据资产价值和目标投资者确定 let asset_value_xtzh = 1_000_000u128; // 100万 XTZH let target_fragment_price_xtzh = 1000u128; // 1000 XTZH per fragment let fragment_count = (asset_value_xtzh / target_fragment_price_xtzh) as u64; ``` ### 4. 估值更新频率 ```rust // 根据资产类型设置合理的估值有效期 let validity_period = match asset_type { AssetType::RealEstate => 90 * 24 * 3600, // 90天 AssetType::Art => 180 * 24 * 3600, // 180天 AssetType::Commodity => 7 * 24 * 3600, // 7天 _ => 30 * 24 * 3600, // 默认30天 }; ``` ## 错误处理 ```rust use nac_sdk::error::{NACError, Result}; match acc721.mint_asset(...).await { Ok(asset_dna) => { println!("Asset minted: {}", asset_dna.dna_hash.to_hex()); } Err(NACError::InvalidAddress(msg)) => { eprintln!("Invalid address: {}", msg); } Err(NACError::ComplianceError(msg)) => { eprintln!("Compliance check failed: {}", msg); } Err(e) => { eprintln!("Error: {}", e); } } ``` ## 相关资源 - [NAC SDK文档](../README.md) - [ACC-20协议指南](./ACC20_GUIDE.md) - [NAC Lens协议规范](./NRPC3_SPEC.md) - [GNACS编码标准](./GNACS_STANDARD.md) - [NAC技术白皮书](https://newassetchain.io/whitepaper) ## 许可证 MIT License