7.9 KiB
7.9 KiB
ACC-721 唯一资产证书协议使用指南
概述
ACC-721是NAC原生的唯一资产证书协议,用于表示不可分割的唯一资产(如房地产、艺术品、收藏品等)。与ERC-721不同,ACC-721深度集成了NAC的核心特性,为RWA(Real World Assets)提供完整的链上管理能力。
核心特性
NAC原生特性
-
资产DNA - 每个唯一资产都有独特的DNA,包含:
- DNA哈希(Blake3)
- 物理指纹(高精度扫描数据的哈希)
- 法律文件哈希
- 生成时间戳
-
GNACS编码 - 48位全球原生资产链统一分类标准
- 资产类别编码
- 地理位置编码
- 合规级别编码
-
主权类型 - 支持7种资产权利类型:
- A0: 完全所有权
- B1: 使用权
- C2: 收益权
- D2: 处置权
- E3: 担保权
- F4: 优先权
- G5: 其他权利
-
托管系统 - 内置托管方信息:
- 托管方地址
- 托管开始时间
- 托管状态
- 托管证明哈希
-
保险系统 - 内置保险信息:
- 保险方地址
- 保险金额(XTZH)
- 保险期限
- 保险单号
-
估值系统 - 支持AI估值:
- 估值金额(XTZH)
- 估值提供者
- 估值时间
- 有效期
-
碎片化 - NAC独有功能:
- 将唯一资产碎片化为可替代代币(ACC-20)
- 支持重组回唯一资产
- 碎片价格和数量可配置
-
宪法收据 - 所有操作都生成宪法收据:
- 记录操作类型
- 记录参与方
- 记录时间戳
- 链上可验证
快速开始
1. 安装依赖
在 Cargo.toml 中添加:
[dependencies]
nac-sdk = "2.0.0"
nac-udm = "1.0.0"
tokio = { version = "1.0", features = ["full"] }
2. 创建客户端
use nac_sdk::client::NRPC3Client;
use nac_sdk::protocols::ACC721;
let client = NRPC3Client::new("https://rpc.newassetchain.io");
let acc721 = ACC721::new(client);
3. 铸造唯一资产
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. 转移资产
let receipt_hash = acc721.transfer_asset(
&certificate_address,
&from_address,
&to_address,
asset_id,
).await?;
println!("Constitutional Receipt: {}", receipt_hash.to_hex());
5. 碎片化资产
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- 资产IDmetadata_uri- 资产元数据URIphysical_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- 资产IDfragment_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- 资产IDvaluation- 新的资产估值
完整示例
查看 examples/acc721_example.rs 获取完整的使用示例。
运行示例:
cargo run --example acc721_example
测试
运行单元测试:
cargo test --test acc721_integration_test
运行集成测试(需要NAC节点):
cargo test --test acc721_integration_test -- --ignored
与ERC-721的区别
| 特性 | ERC-721 | ACC-721 |
|---|---|---|
| 基础功能 | ✅ | ✅ |
| 资产DNA | ❌ | ✅ |
| GNACS编码 | ❌ | ✅ |
| 主权类型 | ❌ | ✅ |
| 托管系统 | ❌ | ✅ |
| 保险系统 | ❌ | ✅ |
| AI估值 | ❌ | ✅ |
| 碎片化 | ❌ | ✅ |
| 宪法收据 | ❌ | ✅ |
| RPC协议 | JSON-RPC | NRPC3.0 |
| 哈希算法 | Keccak256 | Blake3 |
最佳实践
1. 资产DNA生成
// 使用高精度扫描数据生成物理指纹
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. 保险金额计算
// 保险金额应该以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. 碎片化策略
// 碎片数量应该根据资产价值和目标投资者确定
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. 估值更新频率
// 根据资产类型设置合理的估值有效期
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天
};
错误处理
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);
}
}
相关资源
许可证
MIT License