//! 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(()) }