1use polysqueeze::{
2 client::{ClobClient, OrderArgs},
3 errors::Result,
4 types::{GammaListParams, OrderType, Side},
5};
6use rust_decimal::Decimal;
7use std::env;
8
9fn env_var(key: &str) -> String {
11 env::var(key).expect(&format!("{} must be set for the order example", key))
12}
13
14#[tokio::main]
15async fn main() -> Result<()> {
16 let base_url =
17 env::var("POLY_API_URL").unwrap_or_else(|_| "https://clob.polymarket.com".into());
18 let private_key = env_var("POLY_PRIVATE_KEY");
19 let chain_id = env::var("POLY_CHAIN_ID")
20 .ok()
21 .and_then(|value| value.parse::<u64>().ok())
22 .unwrap_or(137);
23
24 let l1_client = ClobClient::with_l1_headers(&base_url, &private_key, chain_id);
26 let creds = l1_client.create_or_derive_api_key(None).await?;
27 let mut client = ClobClient::with_l2_headers(&base_url, &private_key, chain_id, creds.clone());
28
29 if let Ok(funder) = env::var("POLY_FUNDER") {
30 client.set_funder(&funder)?;
31 }
32
33 let gamma_params = GammaListParams {
34 limit: Some(5), ..Default::default()
36 };
37 let markets_response = client.get_markets(None, Some(&gamma_params)).await?;
38 let market = markets_response
39 .data
40 .get(1) .expect("Gamma markets returned no data");
42
43 let token_id = market.clob_token_ids.first().unwrap();
44
45 let book = client.get_order_book(&token_id).await?;
46 let best_bid = book.bids.first().expect("order book has no bids").price;
47 let best_ask = book.asks.first().expect("order book has no asks").price;
48 let book_mid = (best_bid + best_ask) / Decimal::from(2);
49 let min_order_size: Decimal = 2.into();
50 let order_size = min_order_size;
51 let order_price = book_mid;
52
53 let args = OrderArgs::new(&token_id, order_price, order_size, Side::BUY);
54 let signed_order = client.create_order(&args, None, None, None).await?;
55
56 let response = client.post_order(signed_order, OrderType::GTC).await?;
57 println!("order posted: {}", response);
58
59 Ok(())
60}