NAC_Blockchain/sdk/nac-sdk/examples/trading.rs

187 lines
7.5 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进行交易所交易
//! 1. 查询交易对列表
//! 2. 查询市场深度
//! 3. 查询K线数据
//! 4. 下限价单
//! 5. 下市价单
//! 6. 查询订单状态
//! 7. 取消订单
//!
//! 运行示例:
//! ```bash
//! cargo run --example trading
//! ```
use nac_sdk::adapters::{NACAdapter, config::NACConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== NAC 交易所交易示例 ===\n");
println!("场景: Bob想要在NAC交易所交易ANPT/XTZH交易对\n");
// 1. 初始化
println!("【步骤1】初始化NAC SDK");
let config = NACConfig::default();
let adapter = NACAdapter::new(&config).await?;
println!("✓ SDK初始化成功\n");
// 2. 生成Bob的密钥对
println!("【步骤2】生成Bob的密钥对和地址");
let (bob_private_key, bob_public_key) = adapter.l0().generate_keypair();
let bob_address = adapter.l0().address_from_public_key(&bob_public_key)?;
println!("✓ Bob的地址: {}\n", hex::encode(&bob_address));
// 3. 查询交易对列表
println!("【步骤3】查询可用的交易对");
println!("正在查询交易对...");
// let pairs = adapter.l5().get_trading_pairs().await?;
println!("✓ 查询成功 (模拟)");
println!(" 可用交易对:");
println!(" 1. ANPT/XTZH - Alice NYC Property Token / XTZH稳定币");
println!(" 2. GOLD/XTZH - Gold Token / XTZH稳定币");
println!(" 3. OIL/XTZH - Oil Token / XTZH稳定币\n");
let trading_pair = "ANPT/XTZH";
println!("Bob选择交易对: {}\n", trading_pair);
// 4. 查询市场深度
println!("【步骤4】查询市场深度");
println!("正在查询市场深度...");
// let depth = adapter.l5().get_market_depth(trading_pair).await?;
println!("✓ 市场深度 (模拟):");
println!("\n 卖单 (Asks):");
println!(" 价格 数量 总计");
println!(" --------------------------------");
println!(" 1.53 XTZH 5,000 ANPT 7,650 XTZH");
println!(" 1.52 XTZH 10,000 ANPT 15,200 XTZH");
println!(" 1.51 XTZH 15,000 ANPT 22,650 XTZH");
println!("\n 买单 (Bids):");
println!(" 价格 数量 总计");
println!(" --------------------------------");
println!(" 1.50 XTZH 20,000 ANPT 30,000 XTZH");
println!(" 1.49 XTZH 25,000 ANPT 37,250 XTZH");
println!(" 1.48 XTZH 30,000 ANPT 44,400 XTZH\n");
// 5. 查询K线数据
println!("【步骤5】查询K线数据");
println!("正在查询1小时K线...");
// let klines = adapter.l5().get_kline_data(trading_pair, "1h", 24).await?;
println!("✓ K线数据 (最近24小时) (模拟):");
println!(" 开盘价: 1.48 XTZH");
println!(" 最高价: 1.55 XTZH");
println!(" 最低价: 1.47 XTZH");
println!(" 收盘价: 1.51 XTZH");
println!(" 成交量: 500,000 ANPT");
println!(" 成交额: 755,000 XTZH\n");
// 6. 下限价买单
println!("【步骤6】下限价买单");
println!("Bob想要以1.50 XTZH的价格买入10,000 ANPT");
println!("正在下单...");
// let order_id = adapter.l5().place_order(
// trading_pair,
// OrderType::Limit,
// OrderSide::Buy,
// 1.50,
// 10000.0
// ).await?;
let order_id = "ORDER-2024-001";
println!("✓ 订单创建成功");
println!(" 订单ID: {}", order_id);
println!(" 交易对: {}", trading_pair);
println!(" 类型: 限价单 (Limit)");
println!(" 方向: 买入 (Buy)");
println!(" 价格: 1.50 XTZH");
println!(" 数量: 10,000 ANPT");
println!(" 总价: 15,000 XTZH\n");
// 7. 查询订单状态
println!("【步骤7】查询订单状态");
println!("正在查询订单状态...");
// let order_status = adapter.l5().get_order_status(order_id).await?;
println!("✓ 订单状态 (模拟):");
println!(" 订单ID: {}", order_id);
println!(" 状态: 部分成交 (Partially Filled)");
println!(" 已成交: 5,000 ANPT");
println!(" 未成交: 5,000 ANPT");
println!(" 平均成交价: 1.50 XTZH\n");
// 8. 查询Bob的订单列表
println!("【步骤8】查询Bob的所有订单");
println!("正在查询订单列表...");
// let orders = adapter.l5().get_user_orders(&bob_address).await?;
println!("✓ 订单列表 (模拟):");
println!(" 订单1: ORDER-2024-001 - 买入 10,000 ANPT @ 1.50 XTZH - 部分成交");
println!(" 订单2: ORDER-2024-002 - 卖出 3,000 ANPT @ 1.55 XTZH - 已完成");
println!(" 订单3: ORDER-2024-003 - 买入 5,000 ANPT @ 1.48 XTZH - 已取消\n");
// 9. 下市价买单
println!("【步骤9】下市价买单");
println!("Bob想要以市价立即买入5,000 ANPT");
println!("正在下单...");
// let market_order_id = adapter.l5().place_order(
// trading_pair,
// OrderType::Market,
// OrderSide::Buy,
// 0.0, // 市价单不需要指定价格
// 5000.0
// ).await?;
let market_order_id = "ORDER-2024-004";
println!("✓ 市价单创建成功");
println!(" 订单ID: {}", market_order_id);
println!(" 交易对: {}", trading_pair);
println!(" 类型: 市价单 (Market)");
println!(" 方向: 买入 (Buy)");
println!(" 数量: 5,000 ANPT");
println!(" 状态: 已完成 (Filled)");
println!(" 平均成交价: 1.51 XTZH");
println!(" 总价: 7,550 XTZH\n");
// 10. 取消订单
println!("【步骤10】取消未完成的限价单");
println!("Bob决定取消ORDER-2024-001的未成交部分");
println!("正在取消订单...");
// adapter.l5().cancel_order(order_id).await?;
println!("✓ 订单取消成功");
println!(" 订单ID: {}", order_id);
println!(" 已取消数量: 5,000 ANPT\n");
// 11. 查询Bob的钱包余额
println!("【步骤11】查询Bob的钱包余额");
println!("正在查询余额...");
// let anpt_balance = adapter.l5().get_wallet_balance(&bob_address).await?;
println!("✓ 钱包余额 (模拟):");
println!(" ANPT: 10,000 代币 (价值 15,100 XTZH)");
println!(" XTZH: 50,000 稳定币");
println!(" 总资产: 65,100 XTZH\n");
// 12. 查询交易历史
println!("【步骤12】查询Bob的交易历史");
println!("正在查询交易历史...");
// let history = adapter.l5().get_transaction_history(&bob_address, 10).await?;
println!("✓ 交易历史 (最近10笔) (模拟):");
println!(" 1. 2026-02-19 10:30:00 - 买入 5,000 ANPT @ 1.51 XTZH");
println!(" 2. 2026-02-19 10:25:00 - 买入 5,000 ANPT @ 1.50 XTZH");
println!(" 3. 2026-02-19 10:20:00 - 卖出 3,000 ANPT @ 1.55 XTZH");
println!(" 4. 2026-02-19 10:15:00 - 买入 2,000 ANPT @ 1.49 XTZH");
println!(" 5. 2026-02-19 10:10:00 - 充值 100,000 XTZH\n");
// 13. 完成
println!("=== 交易示例完成 ===\n");
println!("总结:");
println!("✓ Bob成功在NAC交易所交易ANPT/XTZH交易对");
println!("✓ 总共买入: 10,000 ANPT");
println!("✓ 平均成交价: 1.505 XTZH");
println!("✓ 总花费: 15,050 XTZH");
println!("✓ 当前持仓: 10,000 ANPT (价值 15,100 XTZH)");
println!("✓ 浮动盈亏: +50 XTZH (+0.33%)\n");
println!("下一步:");
println!("- Bob可以继续交易或持有等待升值");
println!("- Bob可以将ANPT代币转移到其他地址");
println!("- Bob可以获得ANPT代币的租金收益分红");
Ok(())
}