187 lines
7.5 KiB
Rust
187 lines
7.5 KiB
Rust
//! 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(())
|
||
}
|