Skip to main content

execute_cond/
execute_cond.rs

1//! Example: Listen to ticker and L2 order book updates.
2//!
3//! ```bash
4//! cargo run --example md_listener -- \
5//!     --url wss://exchange-wss.bulk.trade \
6//!     --symbols BTC-USD,ETH-USD
7//! ```
8
9use 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    /// WebSocket URL
25    #[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}