An async rust client for interacting with Polymarket.
- You get to write Rust!
- Most calls are anywhere from 1.5x to upto 4x faster.
- Upto 10x less memory usage.
Some benchmarks on my machine:
polymarket-rs-client | Official Python client | |
---|---|---|
Create a order with EIP-712 signature. | 266.5 ms ± 28.6 ms | 1.127 s ± 0.047 s |
Fetch and parse json(simplified markets). | 404.5 ms ± 22.9 ms | 1.366 s ± 0.048 s |
Fetch markets. Mem usage | 88,053 allocs, 81,823 frees, 15,945,966 bytes allocated | 211,898 allocs, 202,962 frees, 128,457,588 bytes allocated |
cargo add polymarket-rs-client
The client internally uses a reqwest Client
, so you will also need the tokio
runtime.
cargo add -F rt-multi-thread,macros tokio
For representing order amounts and sizes, the client uses the rust-decimal
crate. It is recommended to install this crate as well.
cargo add rust-decimal
Create an instance of the ClobClient
to interact with the CLOB API. Note that the prerequisite allowances must be set before creating and sending an order as described here.
use polymarket_rs_client::ClobClient;
use std::env;
const HOST: &str = "https://clob.polymarket.com";
const POLYGON: u64 = 137;
#[tokio::main]
async fn main() {
let private_key = env::var("PK").unwrap();
let nonce = None;
let mut client = ClobClient::with_l1_headers(HOST, &private_key, POLYGON);
let keys = client.create_or_derive_api_key(nonce).await.unwrap();
client.set_api_creds(keys);
let o = client.get_sampling_markets(None).await.unwrap();
dbg!(o);
}
The ClobClient
implements the same API as the official python client. All available functions are listed in the docs.