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

386 lines
7.9 KiB
Markdown
Raw Permalink 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-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` 中添加:
```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