use metaflux_client::{
Client,
rest::exchange::MTF_CHAIN_ID,
types::{
MarketId,
order::{Order, OrderKind, OrderStatus, Side, StpMode, TimeInForce},
},
wallet::Wallet,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let priv_hex = std::env::var("MTF_PRIVATE_KEY")
.map_err(|_| "set MTF_PRIVATE_KEY=<64-char hex> to run this example")?;
let wallet = Wallet::from_hex(&priv_hex)?;
println!("wallet address: {}", wallet.address());
println!("signing against devnet chain id {MTF_CHAIN_ID}");
let client = Client::new("http://127.0.0.1:8080")?;
let btc = MarketId(0);
println!("using BTC market {}", btc.0);
let order = Order {
owner: wallet.address(),
market: btc,
side: Side::Bid,
kind: OrderKind::Limit,
size: 1_000, limit_px: 4_000_000_000_000, tif: TimeInForce::Gtc,
stp_mode: StpMode::CancelOldest,
reduce_only: false,
cloid: None,
builder: None,
position_side: None, trigger: None,
};
let resp = client.exchange().submit_order(&wallet, &order).await?;
for (i, status) in resp.statuses.iter().enumerate() {
match status {
OrderStatus::Resting(r) => {
println!("order[{i}] resting: oid={} cloid={:?}", r.oid.0, r.cloid);
}
OrderStatus::Filled(f) => {
println!(
"order[{i}] filled: oid={} total_sz={} avg_px={}",
f.oid.0, f.total_sz, f.avg_px
);
}
OrderStatus::Error(msg) => {
println!("order[{i}] rejected: {msg}");
}
}
}
Ok(())
}