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

8.6 KiB
Raw Permalink Blame History

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