NAC_Blockchain/sdk/nac-sdk/docs/ACC721_GUIDE.md

7.9 KiB
Raw Permalink Blame History

ACC-721 唯一资产证书协议使用指南

概述

ACC-721是NAC原生的唯一资产证书协议用于表示不可分割的唯一资产如房地产、艺术品、收藏品等。与ERC-721不同ACC-721深度集成了NAC的核心特性为RWAReal 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 中添加:

[dependencies]
nac-sdk = "2.0.0"
nac-udm = "1.0.0"
tokio = { version = "1.0", features = ["full"] }

2. 创建客户端

use nac_sdk::client::NacLensClient;
use nac_sdk::protocols::ACC721;

let client = NacLensClient::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 - 资产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 获取完整的使用示例。

运行示例:

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 NAC Lens
哈希算法 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