NAC_Blockchain/nac-sdk/docs/ACC1155_GUIDE.md

425 lines
8.6 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-1155: 多代币证书协议使用指南
## 概述
ACC-1155是NAC原生的多代币证书协议允许在单个证书中管理多种代币类型。与ERC-1155不同ACC-1155深度集成了NAC的核心特性提供了更强大的资产管理能力。
## 核心特性
### 1. 三种代币类型
ACC-1155支持三种代币类型
- **Fungible可替代代币**类似ACC-20每个单位完全相同可互换
- **NonFungible不可替代代币**类似ACC-721每个单位都是唯一的
- **SemiFungible半可替代代币**:介于两者之间,如游戏道具
### 2. 代币类型DNA
每个代币类型都有唯一的DNA包含
- DNA哈希Blake3
- GNACS编码
- 代币类型(可替代性)
- 主权类型
- 元数据哈希
- 生成时间
### 3. 主权类型A0-G5
ACC-1155支持7种资产权利类型
| 类型 | 名称 | 说明 |
|------|------|------|
| A0 | 完全所有权 | 拥有资产的所有权利 |
| B1 | 使用权 | 仅拥有使用资产的权利 |
| C2 | 收益权 | 仅拥有获取资产收益的权利 |
| D2 | 处置权 | 仅拥有处置资产的权利 |
| E3 | 担保权 | 资产作为担保物的权利 |
| F4 | 优先权 | 优先购买或使用的权利 |
| G5 | 其他权利 | 其他特殊权利 |
### 4. 批量操作
ACC-1155针对批量操作进行了优化
- 批量铸造mint_batch
- 批量转移safe_transfer_batch
- 批量销毁burn_batch
- 批量查询余额balance_of_batch
### 5. 混合资产管理
单个ACC-1155证书可以同时管理
- 可替代代币(如游戏金币)
- 不可替代代币(如传奇装备)
- 半可替代代币(如消耗品)
### 6. NAC原生特性
- **GNACS编码**48位全球原生资产链统一分类标准
- **托管系统**:按代币类型的托管信息
- **保险系统**:按代币类型的保险信息
- **AI估值**支持AI估值提供商
- **宪法收据**:所有批量操作都返回宪法收据哈希
- **NRPC3.0**使用NAC原生RPC协议
## 快速开始
### 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::NRPC3Client;
use nac_sdk::protocols::ACC1155;
let client = NRPC3Client::new("https://rpc.newassetchain.io");
let acc1155 = ACC1155::new(client);
```
### 3. 创建代币类型
```rust
use nac_udm::l1_protocol::gnacs::{GNACSCode, AssetCategory, Jurisdiction, ComplianceLevel, RiskLevel};
use nac_udm::l1_protocol::acc::acc1155::{TokenType, SovereigntyType, TokenTypeMetadata};
use nac_udm::primitives::Timestamp;
// 创建GNACS编码
let gnacs = GNACSCode::new(
AssetCategory::Digital,
1,
Jurisdiction::US,
ComplianceLevel::High,
RiskLevel::Low,
);
// 创建代币元数据
let metadata = TokenTypeMetadata {
token_id: 1,
name: "Game Gold".to_string(),
symbol: "GOLD".to_string(),
token_type: TokenType::Fungible,
uri: "ipfs://QmGameGold".to_string(),
max_supply: Some(10_000_000),
current_supply: 0,
created_at: Timestamp::now(),
};
// 创建代币类型
let token_dna = acc1155.create_token_type(
&certificate_address,
1,
TokenType::Fungible,
gnacs,
SovereigntyType::A0,
metadata,
Some(10_000_000),
).await?;
println!("Token DNA: {}", token_dna.dna_hash);
```
### 4. 批量铸造代币
```rust
let batch_mint = acc1155.mint_batch(
&certificate_address,
&owner_address,
vec![1, 2, 3],
vec![1000, 500, 200],
).await?;
println!("Constitutional Receipt: {}", batch_mint.constitutional_receipt);
```
### 5. 批量转移代币
```rust
let batch_transfer = acc1155.safe_transfer_batch(
&certificate_address,
&from_address,
&to_address,
vec![1, 2],
vec![100, 50],
).await?;
println!("Transfer Receipt: {}", batch_transfer.constitutional_receipt);
```
## API参考
### 基础查询
#### balance_of
获取单个代币余额
```rust
let balance = acc1155.balance_of(
&certificate_address,
&holder_address,
token_id,
).await?;
```
#### balance_of_batch
批量获取代币余额
```rust
let balances = acc1155.balance_of_batch(
&certificate_address,
vec![holder1, holder2, holder3],
vec![token_id1, token_id2, token_id3],
).await?;
```
### 代币类型管理
#### create_token_type
创建新的代币类型含DNA生成
```rust
let token_dna = acc1155.create_token_type(
&certificate_address,
token_id,
token_type,
gnacs_code,
sovereignty_type,
metadata,
max_supply,
).await?;
```
#### get_token_metadata
获取代币元数据
```rust
let metadata = acc1155.get_token_metadata(
&certificate_address,
token_id,
).await?;
```
#### get_token_dna
获取代币类型DNA
```rust
let token_dna = acc1155.get_token_dna(
&certificate_address,
token_id,
).await?;
```
### 批量操作
#### mint_batch
批量铸造代币
```rust
let batch_mint = acc1155.mint_batch(
&certificate_address,
&to_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
```
#### safe_transfer_batch
批量安全转移
```rust
let batch_transfer = acc1155.safe_transfer_batch(
&certificate_address,
&from_address,
&to_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
```
#### burn_batch
批量销毁代币
```rust
let batch_burn = acc1155.burn_batch(
&certificate_address,
&from_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
```
### 授权管理
#### set_approval_for_all
设置授权
```rust
acc1155.set_approval_for_all(
&certificate_address,
&owner_address,
&operator_address,
true,
).await?;
```
#### is_approved_for_all
检查授权状态
```rust
let is_approved = acc1155.is_approved_for_all(
&certificate_address,
&owner_address,
&operator_address,
).await?;
```
### NAC特色功能
#### get_custody_info
获取托管信息
```rust
let custody_info = acc1155.get_custody_info(
&certificate_address,
token_id,
).await?;
```
#### get_insurance_info
获取保险信息
```rust
let insurance_info = acc1155.get_insurance_info(
&certificate_address,
token_id,
).await?;
```
#### update_token_valuation
更新代币估值
```rust
let valuation = TokenTypeValuation {
token_id,
value_per_unit_xtzh: 1_000_000_000_000_000u128,
valuation_provider,
valued_at: Timestamp::now(),
validity_period: 30 * 24 * 3600,
};
acc1155.update_token_valuation(
&certificate_address,
token_id,
valuation,
).await?;
```
#### get_token_valuation
获取代币估值
```rust
let valuation = acc1155.get_token_valuation(
&certificate_address,
token_id,
).await?;
```
## 与ERC-1155的对比
| 特性 | ERC-1155 | ACC-1155 |
|------|----------|----------|
| 基础功能 | ✅ | ✅ |
| 代币类型DNA | ❌ | ✅ |
| GNACS编码 | ❌ | ✅ |
| 主权类型 | ❌ | ✅ |
| 三种代币类型 | ❌ | ✅ |
| 托管系统 | ❌ | ✅ |
| 保险系统 | ❌ | ✅ |
| AI估值 | ❌ | ✅ |
| 混合资产池 | ❌ | ✅ |
| 宪法收据 | ❌ | ✅ |
| 批量操作优化 | ✅ | ✅ |
| RPC协议 | JSON-RPC | NRPC3.0 |
## 最佳实践
### 1. 代币类型设计
- 为不同用途的代币使用不同的代币ID
- 合理设置最大供应量
- 使用GNACS编码进行分类
### 2. 批量操作
- 尽可能使用批量操作以提高效率
- 批量操作中的token_ids和amounts数组长度必须一致
### 3. 授权管理
- 谨慎设置授权,避免安全风险
- 定期检查授权状态
### 4. 估值更新
- 定期更新代币估值
- 设置合理的估值有效期
### 5. 混合资产管理
- 在同一证书中管理相关的代币类型
- 使用HybridAssetPool进行分类管理
## 错误处理
```rust
use nac_sdk::error::{NACError, Result};
match acc1155.balance_of(&certificate_address, &holder, token_id).await {
Ok(balance) => println!("Balance: {}", balance),
Err(NACError::InvalidAddress(e)) => eprintln!("Invalid address: {}", e),
Err(NACError::InvalidResponse(e)) => eprintln!("Invalid response: {}", e),
Err(e) => eprintln!("Error: {:?}", e),
}
```
## 测试
运行单元测试:
```bash
cargo test acc1155
```
运行集成测试需要NAC节点
```bash
cargo test --test acc1155_integration_test -- --ignored
```
## 示例代码
完整的示例代码请参考:`examples/acc1155_example.rs`
运行示例:
```bash
cargo run --example acc1155_example
```
## 相关资源
- [NAC技术白皮书](https://newassetchain.io/whitepaper)
- [GNACS编码标准](https://newassetchain.io/gnacs)
- [ACC协议族文档](https://newassetchain.io/acc)
- [NRPC3.0协议规范](https://newassetchain.io/nrpc3)
## 许可证
MIT License