166 lines
7.1 KiB
Rust
166 lines
7.1 KiB
Rust
//! ACC-721唯一资产证书协议使用示例
|
||
//!
|
||
//! 本示例演示如何使用NAC SDK与ACC-721协议交互
|
||
//!
|
||
//! 运行方式:
|
||
//! ```bash
|
||
//! cargo run --example acc721_example
|
||
//! ```
|
||
|
||
use nac_sdk::client::NacLensClient;
|
||
use nac_sdk::protocols::ACC721;
|
||
use nac_sdk::error::Result;
|
||
use nac_udm::primitives::{Address, Hash, Timestamp};
|
||
use nac_udm::l1_protocol::acc::acc721::{AssetId, AssetValuation};
|
||
|
||
#[tokio::main]
|
||
async fn main() -> Result<()> {
|
||
println!("=== NAC ACC-721 唯一资产证书协议示例 ===\n");
|
||
|
||
// 1. 创建NAC Lens客户端
|
||
println!("1. 连接到NAC节点...");
|
||
let client = NacLensClient::new("https://rpc.newassetchain.io");
|
||
let acc721 = ACC721::new(client);
|
||
println!(" ✓ 已连接到NAC RPC节点\n");
|
||
|
||
// 2. 准备测试数据
|
||
println!("2. 准备测试数据...");
|
||
let certificate_address = Address::from_hex("0x12345678901234567890123456789012345678901234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
let owner_address = Address::from_hex("0x22345678901234567890123456789012345678902234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
let custodian_address = Address::from_hex("0x42345678901234567890123456789012345678904234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
let insurer_address = Address::from_hex("0x52345678901234567890123456789012345678905234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
|
||
let asset_id: AssetId = 1;
|
||
let metadata_uri = "ipfs://QmRealEstateAsset123456789".to_string();
|
||
|
||
// 生成资产DNA组件
|
||
let physical_fingerprint = Hash::sha3_384(b"3D_scan_data_of_real_estate");
|
||
let legal_document_hash = Hash::sha3_384(b"property_deed_and_title");
|
||
|
||
println!(" ✓ 证书地址: {}", certificate_address);
|
||
println!(" ✓ 资产持有者: {}", owner_address);
|
||
println!(" ✓ 托管方: {}", custodian_address);
|
||
println!(" ✓ 保险方: {}", insurer_address);
|
||
println!(" ✓ 资产ID: {}", asset_id);
|
||
println!(" ✓ 元数据URI: {}\n", metadata_uri);
|
||
|
||
// 3. 铸造唯一资产
|
||
println!("3. 铸造唯一资产...");
|
||
let insurance_coverage = 5_000_000_000_000_000_000u128; // 5 XTZH
|
||
let insurance_expiry = Timestamp::from_secs(Timestamp::now().as_secs() + 365 * 24 * 3600);
|
||
|
||
println!(" 正在铸造资产(含DNA、托管、保险)...");
|
||
// 注意:这是示例代码,实际运行需要连接到NAC节点
|
||
// let asset_dna = acc721.mint_asset(
|
||
// &certificate_address,
|
||
// &owner_address,
|
||
// asset_id,
|
||
// metadata_uri.clone(),
|
||
// physical_fingerprint,
|
||
// legal_document_hash,
|
||
// custodian_address,
|
||
// insurer_address,
|
||
// insurance_coverage,
|
||
// insurance_expiry,
|
||
// ).await?;
|
||
//
|
||
// println!(" ✓ 资产铸造成功!");
|
||
// println!(" ✓ DNA哈希: {}", asset_dna.dna_hash.to_hex());
|
||
// println!(" ✓ 物理指纹: {}", asset_dna.physical_fingerprint.to_hex());
|
||
// println!(" ✓ 法律文件哈希: {}\n", asset_dna.legal_document_hash.to_hex());
|
||
|
||
println!(" [示例模式] 资产铸造功能已准备就绪\n");
|
||
|
||
// 4. 查询资产信息
|
||
println!("4. 查询资产信息...");
|
||
// let holder = acc721.get_asset_holder(&certificate_address, asset_id).await?;
|
||
// println!(" ✓ 当前持有者: {}", holder);
|
||
//
|
||
// let metadata = acc721.get_asset_metadata(&certificate_address, asset_id).await?;
|
||
// println!(" ✓ 元数据URI: {}\n", metadata);
|
||
|
||
println!(" [示例模式] 资产查询功能已准备就绪\n");
|
||
|
||
// 5. 查询托管信息
|
||
println!("5. 查询托管信息...");
|
||
// let custody_info = acc721.get_custody_info(&certificate_address, asset_id).await?;
|
||
// println!(" ✓ 托管方: {}", custody_info.custodian);
|
||
// println!(" ✓ 托管状态: {}", if custody_info.is_active { "托管中" } else { "已解除" });
|
||
// println!(" ✓ 托管证明: {}\n", custody_info.custody_proof.to_hex());
|
||
|
||
println!(" [示例模式] 托管信息查询功能已准备就绪\n");
|
||
|
||
// 6. 查询保险信息
|
||
println!("6. 查询保险信息...");
|
||
// let insurance_info = acc721.get_insurance_info(&certificate_address, asset_id).await?;
|
||
// println!(" ✓ 保险方: {}", insurance_info.insurer);
|
||
// println!(" ✓ 保险金额: {} XTZH", insurance_info.coverage_xtzh as f64 / 1e18);
|
||
// println!(" ✓ 保险单号: {}\n", insurance_info.policy_number);
|
||
|
||
println!(" [示例模式] 保险信息查询功能已准备就绪\n");
|
||
|
||
// 7. 更新资产估值
|
||
println!("7. 更新资产估值...");
|
||
let valuation_provider = Address::from_hex("0x62345678901234567890123456789012345678906234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
|
||
let valuation = AssetValuation {
|
||
value_xtzh: 10_000_000_000_000_000_000u128, // 10 XTZH
|
||
valuation_provider,
|
||
valued_at: Timestamp::now(),
|
||
validity_period: 30 * 24 * 3600, // 30天
|
||
};
|
||
|
||
// acc721.update_valuation(&certificate_address, asset_id, valuation).await?;
|
||
// println!(" ✓ 资产估值已更新为 10 XTZH\n");
|
||
|
||
println!(" [示例模式] 资产估值功能已准备就绪\n");
|
||
|
||
// 8. 资产碎片化
|
||
println!("8. 资产碎片化(NAC独有功能)...");
|
||
let fragment_count = 1000u64;
|
||
let fragment_price = 10_000_000_000_000_000u128; // 0.01 XTZH per fragment
|
||
|
||
// let pool = acc721.fragmentize_asset(
|
||
// &certificate_address,
|
||
// &owner_address,
|
||
// asset_id,
|
||
// fragment_count,
|
||
// fragment_price,
|
||
// ).await?;
|
||
//
|
||
// println!(" ✓ 资产已碎片化为 {} 个ACC-20代币", fragment_count);
|
||
// println!(" ✓ 碎片代币地址: {}", pool.fragment_token_address);
|
||
// println!(" ✓ 每个碎片价格: {} XTZH", fragment_price as f64 / 1e18);
|
||
// println!(" ✓ 可重组: {}\n", if pool.is_recomposable { "是" } else { "否" });
|
||
|
||
println!(" [示例模式] 资产碎片化功能已准备就绪\n");
|
||
|
||
// 9. 转移资产
|
||
println!("9. 转移资产...");
|
||
let recipient_address = Address::from_hex("0x32345678901234567890123456789012345678903234567890123456789012345678901234567890")
|
||
.map_err(|e| nac_sdk::error::NACError::InvalidAddress(e))?;
|
||
|
||
// let receipt_hash = acc721.transfer_asset(
|
||
// &certificate_address,
|
||
// &owner_address,
|
||
// &recipient_address,
|
||
// asset_id,
|
||
// ).await?;
|
||
//
|
||
// println!(" ✓ 资产转移成功!");
|
||
// println!(" ✓ 宪法收据哈希: {}\n", receipt_hash.to_hex());
|
||
|
||
println!(" [示例模式] 资产转移功能已准备就绪\n");
|
||
|
||
println!("=== ACC-721示例完成 ===");
|
||
println!("\n提示:本示例运行在演示模式。");
|
||
println!("要连接到实际的NAC节点,请取消注释相应的代码行。");
|
||
|
||
Ok(())
|
||
}
|