execute_limit/
execute_limit.rs1use bulk_client::api::parts::HttpConfig;
10use bulk_client::api::BulkHttpClient;
11use bulk_client::common::tif::TimeInForce;
12use bulk_client::msgs::LimitOrder;
13use bulk_client::parts::make_nonce;
14use bulk_client::transaction::{Action, ActionMeta, TransactionSigner};
15use clap::Parser;
16use std::sync::Arc;
17use std::{env, process};
18use tracing::info;
19use tracing_subscriber::EnvFilter;
20
21#[derive(Parser, Debug)]
22#[command(name = "md_query", about = "Query MD")]
23struct Args {
24 #[arg(long, default_value = "http://localhost:12000/api/v1")]
26 url: String,
27}
28
29#[tokio::main]
30async fn main() -> eyre::Result<()> {
31 tracing_subscriber::fmt()
32 .with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::INFO.into()))
33 .init();
34
35 let args = Args::parse();
36
37 info!("Connecting to {} for execution", args.url);
38 let key = env::var("BULK_PRIVATE_KEY")?;
39 let signer = TransactionSigner::from_private_key(key.as_str())?;
40 let client = BulkHttpClient::new(&HttpConfig {
41 base_url: args.url,
42 signer: Some(signer.clone()),
43 ..Default::default()
44 })
45 .unwrap();
46
47 let account = signer.public_key();
48 let nonce = make_nonce();
49
50 let mut orders = vec![
51 Action::LimitOrder(LimitOrder {
52 symbol: Arc::from("BTC-USD"),
53 is_buy: true,
54 price: 1000.0,
55 size: 0.0001,
56 tif: TimeInForce::IOC,
57 reduce_only: false,
58 iso: false,
59 builder_code: None,
60 meta: ActionMeta {
61 account,
62 nonce,
63 seqno: 0,
64 hash: None,
65 },
66 }),
67 Action::LimitOrder(LimitOrder {
68 symbol: Arc::from("ETH-USD"),
69 is_buy: true,
70 price: 1000.0,
71 size: 0.0001,
72 tif: TimeInForce::IOC,
73 reduce_only: false,
74 iso: false,
75 builder_code: None,
76 meta: ActionMeta {
77 account,
78 nonce,
79 seqno: 1,
80 hash: None,
81 },
82 }),
83 ];
84
85 let oids = orders
86 .iter_mut()
87 .map(|o| o.hash().to_string())
88 .collect::<Vec<_>>();
89
90 eprintln!("order IDs: {:?}", oids);
91
92 let results = client.place_tx(orders, Some(account), Some(nonce)).await?;
93 eprintln!("results: {:?}\n", results);
94
95 process::exit(0);
96}