NAC_Blockchain/nac-sdk/examples/basic_usage.rs

133 lines
5.2 KiB
Rust
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.

//! NAC SDK 基本使用示例
//!
//! 本示例演示如何使用NAC SDK的基本功能包括
//! - 创建适配器
//! - 使用L0原生层生成密钥对和地址
//! - 使用L1协议层查询余额
//! - 使用L4 AI层进行合规检查
//!
//! 运行示例:
//! ```bash
//! cargo run --example basic_usage
//! ```
use nac_sdk::adapters::{NACAdapter, config::NACConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== NAC SDK 基本使用示例 ===\n");
// 1. 创建配置
println!("1. 创建配置...");
let config = NACConfig::default();
println!(" ✓ 配置创建成功\n");
// 2. 创建适配器
println!("2. 创建NAC适配器...");
let adapter = NACAdapter::new(&config).await?;
println!(" ✓ 适配器创建成功\n");
// 3. 使用L0原生层
println!("3. 使用L0原生层 - 生成密钥对和地址");
// 生成密钥对
let (private_key, public_key) = adapter.l0().generate_keypair();
println!(" ✓ 密钥对生成成功");
println!(" 私钥: {}", hex::encode(&private_key));
println!(" 公钥: {}", hex::encode(&public_key));
// 从公钥生成地址
let address = adapter.l0().address_from_public_key(&public_key)?;
println!(" ✓ 地址生成成功");
println!(" 地址: {}\n", hex::encode(&address));
// 验证地址
let is_valid = adapter.l0().validate_address(&address)?;
println!(" ✓ 地址验证: {}\n", if is_valid { "有效" } else { "无效" });
// 4. 使用L0原生层 - 哈希操作
println!("4. 使用L0原生层 - 哈希操作");
let data = b"Hello, NAC!";
let hash = adapter.l0().hash_sha3_384(data);
println!(" ✓ SHA3-384哈希计算成功");
println!(" 数据: {}", String::from_utf8_lossy(data));
println!(" 哈希: {}\n", hex::encode(&hash));
// 5. 使用L0原生层 - 签名和验证
println!("5. 使用L0原生层 - 签名和验证");
let message = b"This is a test message";
let signature = adapter.l0().sign(&private_key, message)?;
println!(" ✓ 签名成功");
println!(" 消息: {}", String::from_utf8_lossy(message));
println!(" 签名: {}", hex::encode(&signature));
let is_valid = adapter.l0().verify(&public_key, message, &signature)?;
println!(" ✓ 签名验证: {}\n", if is_valid { "有效" } else { "无效" });
// 6. 使用L1协议层 - GNACS编码
println!("6. 使用L1协议层 - GNACS资产分类");
use nac_sdk::primitives::{AssetCategory, Jurisdiction, ComplianceLevel};
let gnacs_code = adapter.l1().encode_gnacs(
AssetCategory::RealEstate,
Jurisdiction::US,
ComplianceLevel::High
)?;
println!(" ✓ GNACS编码成功");
println!(" 资产类别: 房地产");
println!(" 管辖区: 美国");
println!(" 合规级别: 高");
println!(" GNACS代码: {}\n", gnacs_code);
// 解码GNACS
let (category, jurisdiction, compliance) = adapter.l1().decode_gnacs(&gnacs_code)?;
println!(" ✓ GNACS解码成功");
println!(" 资产类别: {:?}", category);
println!(" 管辖区: {:?}", jurisdiction);
println!(" 合规级别: {:?}\n", compliance);
// 7. 演示完整的工作流程
println!("7. 演示完整的工作流程");
println!(" 场景: 用户Alice想要在NAC链上注册一个房地产资产\n");
// 7.1 生成Alice的密钥对
println!(" 7.1 生成Alice的密钥对");
let (alice_private_key, alice_public_key) = adapter.l0().generate_keypair();
let alice_address = adapter.l0().address_from_public_key(&alice_public_key)?;
println!(" ✓ Alice的地址: {}\n", hex::encode(&alice_address));
// 7.2 对资产数据进行哈希
println!(" 7.2 对资产数据进行哈希");
let asset_data = b"Property at 123 Main St, New York, NY 10001";
let asset_hash = adapter.l0().hash_sha3_384(asset_data);
println!(" ✓ 资产数据哈希: {}\n", hex::encode(&asset_hash));
// 7.3 Alice签名资产数据
println!(" 7.3 Alice签名资产数据");
let asset_signature = adapter.l0().sign(&alice_private_key, asset_data)?;
println!(" ✓ 签名成功: {}\n", hex::encode(&asset_signature));
// 7.4 验证签名
println!(" 7.4 验证签名");
let is_valid = adapter.l0().verify(&alice_public_key, asset_data, &asset_signature)?;
println!(" ✓ 签名验证: {}\n", if is_valid { "通过" } else { "失败" });
// 7.5 生成GNACS代码
println!(" 7.5 为资产生成GNACS代码");
let asset_gnacs = adapter.l1().encode_gnacs(
AssetCategory::RealEstate,
Jurisdiction::US,
ComplianceLevel::High
)?;
println!(" ✓ GNACS代码: {}\n", asset_gnacs);
println!("=== 示例完成 ===");
println!("\n提示: 这只是基本功能演示。");
println!(" 查看其他示例了解更多高级功能:");
println!(" - asset_onboarding.rs: 完整的资产上链流程");
println!(" - trading.rs: 交易所交易示例");
println!(" - governance.rs: 链上治理示例");
Ok(())
}