clob-client-rust 0.1.3

Polymarket CLOB client ported to Rust: build, sign and submit orders; helper utilities.
Documentation

Polymarket Rust SDK

This repository provides an integrated Rust SDK that unifies the functionality of the TypeScript SDK components: clob-client, builder-signing, order-utils, and builder relayer redeem/merge operations. It delivers a consolidated dependency and documentation surface so that order construction/signing, builder relayer workflows, and common utility calls can be performed within a single codebase.

Overview

src/                Core library implementation
examples/           Usage examples aligned with typical TS scenarios
tests/              Unit / integration tests (more EIP-712 & flow cases to be added)

Feature Matrix

This is a modular feature checklist. Items that have been validated by automated tests or manual verification are marked with ✅; unmarked items are planned or pending additional work.

Signing & Keys

  • [✅] Deterministic EIP-712 signatures (parity with TS SDK)
  • [✅] EOA signature type support (SignatureType: EOA, etc.)
  • [✅] L1 private key derive / create L2 API Key (Create / Derive)
  • [✅] Builder API Key auth header generation (HMAC / Base64)
  • [✅] Unified header construction: mixed L1/L2/Builder fallback

Orders

  • [✅] Limit order build / sign / submit (create + post)
  • [✅] Market order build / sign / submit (price computed externally)
  • [✅] Explicit Tick Size (default fallback "0.01")

clob-client-rust

A production-oriented Rust client for interacting with Polymarket's central limit order book (CLOB) services. This crate focuses on building, signing and submitting orders with an emphasis on EIP-712 parity with the existing TypeScript SDK.

What this crate provides

  • High-quality order builders (limit, market) with validation and tick-size handling.
  • EIP-712 typed-data signing compatible with the TypeScript reference implementation.
  • Typed HTTP helpers for interacting with CLOB endpoints (submit orders, query orders, etc.).
  • Utilities for signature packing, order normalization and MultiSend encoding.
  • Examples that demonstrate common flows and migration guidance from the TypeScript SDK.

Quick start

git clone <repo-url>
cd clob-client-rust
# clob-client-rust

A production-oriented Rust client for interacting with Polymarket's central limit order book (CLOB) services. This crate focuses on building, signing and submitting orders with an emphasis on EIP-712 parity with the existing TypeScript SDK.

## What this crate provides

- High-quality order builders (limit, market) with validation and tick-size handling.
- EIP-712 typed-data signing compatible with the TypeScript reference implementation.
- Typed HTTP helpers for interacting with CLOB endpoints (submit orders, query orders, etc.).
- Utilities for signature packing, order normalization and MultiSend encoding.
- Examples that demonstrate common flows and migration guidance from the TypeScript SDK.

## Quick start

```bash
git clone <repo-url>
cd clob-client-rust
cargo build --release

Run an example that builds and signs an order (no network credentials required):

cargo run --example sign_order

Examples

  • examples/sign_order.rs — Build and sign a limit order locally.
  • examples/post_order.rs — Build and POST an order to a configured CLOB endpoint (requires L2 credentials).
  • examples/create_and_post_order.rs — Full create + submit flow used in integration tests.

Environment variables

Configuration and credentials are injected via environment variables in examples and some runtime helpers:

  • PK — L1 private key (hex, e.g. 0x...).
  • CLOB_API_URL — CLOB backend base URL (e.g. https://api.polymarket.com).
  • CHAIN_ID — Chain ID (e.g. 137 or 80002).
  • CLOB_API_KEY, CLOB_SECRET, CLOB_PASS_PHRASE — L2 API credentials when required.
  • BUILDER_API_KEY, BUILDER_SECRET_B64, BUILDER_PASSPHRASE — optional Builder auth credentials used by builder relayer flows.

Integration

During development you can reference this crate as a path or git dependency. For publishing, depend on the crates.io release. See INTEGRATION.md for suggested dependency snippets and migration notes from the TypeScript SDK.

Contributing

  • Run tests with cargo test and ensure examples still run.
  • Open issues for bugs or feature requests; submit pull requests for fixes and enhancements.

License

Dual licensed under MIT OR Apache-2.0. See top-level LICENSE files for details.

For more developer notes and a complete example index see the repository README.md and docs/ directory.

Example output

Below are representative, minimal outputs you should expect when running a few local examples. Actual values (addresses, signatures, nonces) will vary.

  • sign_order.rs
Signed order: 0x... (EIP-712 signature, packed)
Order payload: {"maker": "0x...", "taker": "0x...", "amount": "..."}
  • post_order.rs (with valid credentials)
HTTP 200
{"result":"ok","order_id":"12345"}

FAQ

  • Q: Do I need an L2 API key to run examples?

  • A: Examples that POST to the CLOB backend require L2 credentials (CLOB_API_KEY, CLOB_SECRET, CLOB_PASS_PHRASE). Local signing examples (e.g. sign_order.rs) do not.

  • Q: How do I test signing parity with the TypeScript SDK?

  • A: See tests/ for compatibility tests. If you need a reference vector, run the TypeScript fixture and compare the packed signature hex.

Examples index (auto-generated)

Below is a short description (purpose and common env vars) for each example file in examples/.

  • balance_allowance.rs — Query token balance and allowance for a wallet. (Env: PK, CLOB_API_URL)
  • cancel_all.rs — Cancel all open orders for an account (requires L2 creds). (Env: CLOB_API_KEY, CLOB_SECRET)
  • cancel_order.rs — Cancel a single order by id. (Env: CLOB_API_KEY, CLOB_SECRET)
  • cancel_orders.rs — Batch cancel orders by ids. (Env: CLOB_API_KEY, CLOB_SECRET)
  • compare_signing.rs — Compare local EIP-712 signatures against a reference vector.
  • create_and_post_market_order.rs — Build and submit a market order (external price required). (Env: PK, CLOB_API_*)
  • create_and_post_order.rs — Create and submit a limit order end-to-end. (Env: PK, CLOB_API_*)
  • create_api_key.rs — Create a new L2 API key (requires privileged credentials).
  • derive_api_key.rs — Derive an L2 API key from an L1 key (demo utility).
  • get_api_keys.rs — List API keys for the account (requires L2 creds).
  • get_markets.rs — Fetch available markets and their metadata. (Env: CLOB_API_URL)
  • get_notifications.rs — Retrieve notifications for an account.
  • get_open_orders.rs — List open orders for a trader. (Env: CLOB_API_URL, PK)
  • get_order.rs — Fetch details for a single order id.
  • get_order_book.rs — Download order book for a market. (Env: CLOB_API_URL)
  • get_prices.rs — Fetch pricing endpoints (mid, spreads). (Env: CLOB_API_URL)
  • get_trades.rs — Retrieve recent trades for a market.
  • limit_buy_demo.rs — Demo: construct and sign a limit buy order.
  • limit_sell_demo.rs — Demo: construct and sign a limit sell order.
  • market_buy_demo.rs — Demo: market buy using local price helpers.
  • market_buy_order.rs — Build and sign a market buy order.
  • market_sell_demo.rs — Demo: market sell using local price helpers.
  • market_sell_order.rs — Build and sign a market sell order.
  • order_types_demo.rs — Show available order types and validation rules.
  • post_order.rs — Build and POST an order to the CLOB service. (Env: CLOB_API_*)
  • query_orders_demo.rs — Example for querying orders with filters.
  • rewards.rs — Fetch/recompute rewards summary (if supported by backend).
  • scoring.rs — Demo of order scoring endpoint usage.
  • sign_order.rs — Build and locally sign an order (no network). (Env: PK)
  • signature_types_demo.rs — Explore different signature packing formats.
  • test_address_case.rs — Utility to test address normalization.