execute_cond/
execute_cond.rs1use bulk_client::api::parts::HttpConfig;
10use bulk_client::api::BulkHttpClient;
11use bulk_client::msgs::conditional::StopOrTP;
12use bulk_client::transaction::{Action, ActionMeta, TransactionSigner};
13use clap::Parser;
14use solana_pubkey::Pubkey;
15use std::str::FromStr;
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 = if false {
48 Pubkey::from_str("8oqBACkDvyJjBoiWNbZPXrnjZvFjzUjMThbi9oahAVvH")?
49 } else {
50 signer.public_key()
51 };
52 let nonce = 1776682154418;
53
54 let orders = vec![Action::TakeProfit(StopOrTP {
55 symbol: Arc::from("BTC-USD"),
56 is_above: false,
57 size: 0.480894,
58 threshold: 40000.0,
59 limit: None,
60 meta: ActionMeta {
61 account,
62 nonce,
63 seqno: 0,
64 hash: None,
65 },
66 })];
67
68 let results = client.place_tx(orders, Some(account), Some(nonce)).await?;
69 eprintln!("results: {:?}\n", results);
70
71 process::exit(0);
72}