execute_limit/
execute_limit.rs1use std::{env, process};
10use std::sync::Arc;
11use clap::Parser;
12use tracing::{info};
13use tracing_subscriber::EnvFilter;
14use bulk_client::api::{BulkHttpClient};
15use bulk_client::api::parts::HttpConfig;
16use bulk_client::common::tif::TimeInForce;
17use bulk_client::msgs::LimitOrder;
18use bulk_client::parts::make_nonce;
19use bulk_client::transaction::{Action, ActionMeta, TransactionSigner};
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(
33 EnvFilter::from_default_env().add_directive(tracing::Level::INFO.into())
34 )
35 .init();
36
37 let args = Args::parse();
38
39 info!("Connecting to {} for execution", args.url);
40 let key = env::var("BULK_PRIVATE_KEY")?;
41 let signer = TransactionSigner::from_private_key(key.as_str())?;
42 let client = BulkHttpClient::new(&HttpConfig {
43 base_url: args.url,
44 signer: Some(signer.clone()),
45 ..Default::default()
46 }).unwrap();
47
48 let account = signer.public_key();
49 let nonce = make_nonce();
50
51 let mut orders = vec![
52 Action::LimitOrder(LimitOrder {
53 symbol: Arc::from("BTC-USD"),
54 is_buy: true,
55 price: 1000.0,
56 size: 0.0001,
57 tif: TimeInForce::IOC,
58 reduce_only: false,
59 iso: false,
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 meta: ActionMeta {
76 account,
77 nonce,
78 seqno: 1,
79 hash: None,
80 }
81 }),
82 ];
83
84 let oids = orders.iter_mut()
85 .map(|o| o.hash().to_string())
86 .collect::<Vec<_>>();
87
88 eprintln!("order IDs: {:?}", oids);
89
90 let results = client.place_tx(orders, Some(account), Some(nonce)).await?;
91 eprintln!("results: {:?}\n", results);
92
93 process::exit(0);
94}