execute_cond/
execute_cond.rs1use std::{env, process};
10use std::str::FromStr;
11use std::sync::Arc;
12use clap::Parser;
13use solana_pubkey::Pubkey;
14use tracing::{info};
15use tracing_subscriber::EnvFilter;
16use bulk_client::api::{BulkHttpClient};
17use bulk_client::api::parts::HttpConfig;
18use bulk_client::common::tif::TimeInForce;
19use bulk_client::msgs::conditional::StopOrTP;
20use bulk_client::msgs::LimitOrder;
21use bulk_client::parts::make_nonce;
22use bulk_client::transaction::{Action, ActionMeta, TransactionSigner};
23
24#[derive(Parser, Debug)]
25#[command(name = "md_query", about = "Query MD")]
26struct Args {
27 #[arg(long, default_value = "http://localhost:12000/api/v1")]
29 url: String,
30}
31
32#[tokio::main]
33async fn main() -> eyre::Result<()> {
34 tracing_subscriber::fmt()
35 .with_env_filter(
36 EnvFilter::from_default_env().add_directive(tracing::Level::INFO.into())
37 )
38 .init();
39
40 let args = Args::parse();
41
42 info!("Connecting to {} for execution", args.url);
43 let key = env::var("BULK_PRIVATE_KEY")?;
44 let signer = TransactionSigner::from_private_key(key.as_str())?;
45 let client = BulkHttpClient::new(&HttpConfig {
46 base_url: args.url,
47 signer: Some(signer.clone()),
48 ..Default::default()
49 }).unwrap();
50
51 let account = if false {
52 Pubkey::from_str("8oqBACkDvyJjBoiWNbZPXrnjZvFjzUjMThbi9oahAVvH")?
53 } else {
54 signer.public_key()
55 };
56 let nonce = 1776682154418;
57
58 let mut orders = vec![
59 Action::TakeProfit(StopOrTP {
60 symbol: Arc::from("BTC-USD"),
61 is_above: false,
62 size: 0.480894,
63 threshold: 40000.0,
64 limit: None,
65 meta: ActionMeta {
66 account,
67 nonce,
68 seqno: 0,
69 hash: None,
70 }
71 }),
72 ];
73
74 let results = client.place_tx(orders, Some(account), Some(nonce)).await?;
75 eprintln!("results: {:?}\n", results);
76
77 process::exit(0);
78}