8.6 KiB
8.6 KiB
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估值提供商
- 宪法收据:所有批量操作都返回宪法收据哈希
- NAC Lens:使用NAC原生RPC协议
快速开始
1. 添加依赖
[dependencies]
nac-sdk = "0.1.0"
nac-udm = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
2. 创建客户端
use nac_sdk::client::NacLensClient;
use nac_sdk::protocols::ACC1155;
let client = NacLensClient::new("https://rpc.newassetchain.io");
let acc1155 = ACC1155::new(client);
3. 创建代币类型
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. 批量铸造代币
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. 批量转移代币
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
获取单个代币余额
let balance = acc1155.balance_of(
&certificate_address,
&holder_address,
token_id,
).await?;
balance_of_batch
批量获取代币余额
let balances = acc1155.balance_of_batch(
&certificate_address,
vec![holder1, holder2, holder3],
vec![token_id1, token_id2, token_id3],
).await?;
代币类型管理
create_token_type
创建新的代币类型(含DNA生成)
let token_dna = acc1155.create_token_type(
&certificate_address,
token_id,
token_type,
gnacs_code,
sovereignty_type,
metadata,
max_supply,
).await?;
get_token_metadata
获取代币元数据
let metadata = acc1155.get_token_metadata(
&certificate_address,
token_id,
).await?;
get_token_dna
获取代币类型DNA
let token_dna = acc1155.get_token_dna(
&certificate_address,
token_id,
).await?;
批量操作
mint_batch
批量铸造代币
let batch_mint = acc1155.mint_batch(
&certificate_address,
&to_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
safe_transfer_batch
批量安全转移
let batch_transfer = acc1155.safe_transfer_batch(
&certificate_address,
&from_address,
&to_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
burn_batch
批量销毁代币
let batch_burn = acc1155.burn_batch(
&certificate_address,
&from_address,
vec![token_id1, token_id2],
vec![amount1, amount2],
).await?;
授权管理
set_approval_for_all
设置授权
acc1155.set_approval_for_all(
&certificate_address,
&owner_address,
&operator_address,
true,
).await?;
is_approved_for_all
检查授权状态
let is_approved = acc1155.is_approved_for_all(
&certificate_address,
&owner_address,
&operator_address,
).await?;
NAC特色功能
get_custody_info
获取托管信息
let custody_info = acc1155.get_custody_info(
&certificate_address,
token_id,
).await?;
get_insurance_info
获取保险信息
let insurance_info = acc1155.get_insurance_info(
&certificate_address,
token_id,
).await?;
update_token_valuation
更新代币估值
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
获取代币估值
let valuation = acc1155.get_token_valuation(
&certificate_address,
token_id,
).await?;
与ERC-1155的对比
| 特性 | ERC-1155 | ACC-1155 |
|---|---|---|
| 基础功能 | ✅ | ✅ |
| 代币类型DNA | ❌ | ✅ |
| GNACS编码 | ❌ | ✅ |
| 主权类型 | ❌ | ✅ |
| 三种代币类型 | ❌ | ✅ |
| 托管系统 | ❌ | ✅ |
| 保险系统 | ❌ | ✅ |
| AI估值 | ❌ | ✅ |
| 混合资产池 | ❌ | ✅ |
| 宪法收据 | ❌ | ✅ |
| 批量操作优化 | ✅ | ✅ |
| RPC协议 | JSON-RPC | NAC Lens |
最佳实践
1. 代币类型设计
- 为不同用途的代币使用不同的代币ID
- 合理设置最大供应量
- 使用GNACS编码进行分类
2. 批量操作
- 尽可能使用批量操作以提高效率
- 批量操作中的token_ids和amounts数组长度必须一致
3. 授权管理
- 谨慎设置授权,避免安全风险
- 定期检查授权状态
4. 估值更新
- 定期更新代币估值
- 设置合理的估值有效期
5. 混合资产管理
- 在同一证书中管理相关的代币类型
- 使用HybridAssetPool进行分类管理
错误处理
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),
}
测试
运行单元测试:
cargo test acc1155
运行集成测试(需要NAC节点):
cargo test --test acc1155_integration_test -- --ignored
示例代码
完整的示例代码请参考:examples/acc1155_example.rs
运行示例:
cargo run --example acc1155_example
相关资源
许可证
MIT License