Skip to main content

place_and_cancel/
place_and_cancel.rs

1use vertex_sdk::math::to_i128_x18;
2use vertex_sdk::prelude::*;
3use vertex_sdk::utils::private_key::private_key;
4
5#[tokio::main]
6async fn main() {
7    // paste private key or set RUST_SDK_PRIVATE_KEY in .env file
8    let private_key = private_key();
9
10    let client = VertexClient::new(ClientMode::SepoliaTest)
11        .with_signer(private_key)
12        .await
13        .unwrap();
14
15    const BTC_PERP: u32 = 2;
16
17    // sell 1 BTC_PERP
18    let response = client
19        .place_order_builder()
20        .product_id(BTC_PERP)
21        .amount(to_i128_x18(-1))
22        .price_x18(to_i128_x18(35_000))
23        .execute()
24        .await
25        .unwrap();
26
27    let digest = response.unwrap().digest;
28
29    // check subaccount open orders
30    let open_orders = client
31        .get_subaccount_orders(client.subaccount().unwrap(), BTC_PERP)
32        .await
33        .unwrap();
34    println!("open orders: {:?}", open_orders);
35
36    // cancel order
37    let cancellation_response = client
38        .cancellation_builder()
39        .digests(vec![digest])
40        .product_ids(vec![BTC_PERP])
41        .execute()
42        .await
43        .unwrap();
44
45    let canceled_digest = cancellation_response.unwrap().cancelled_orders[0].digest;
46    assert_eq!(digest, canceled_digest)
47}