Polymarket Bot Tutorial · Chapter 3 of 32

اپنا Polymarket bot stack منتخب کریں: Python (py-clob-client 0.34.6)، Node.js (@polymarket/clob-client-v2 v1.0.6)، یا Rust (official SDK نہیں، ethers-rs پر build کریں)۔ Pros, cons, latency، code samples۔

اس chapter میں کیا شامل ہے

language کا انتخاب اس سے کہیں کم اہم ہے جتنا زیادہ تر builders سمجھتے ہیں۔ Polymarket ہر language کے لیے وہی REST اور WebSocket endpoints expose کرتا ہے؛ SDK کا انتخاب زیادہ تر یہ طے کرتا ہے کہ آپ کو کتنی glue code خود لکھنی پڑے گی۔ Python اور Node دونوں کے پاس officially maintained SDKs ہیں؛ Rust کے پاس نہیں، لیکن hot path کے لیے یہ قابلِ عمل ہے۔ یہ chapter trade-offs پر بات کرتا ہے، ہر language میں ایک ہی "fetch order book" task دکھاتا ہے تاکہ فرق واضح ہو، اور آخر میں mixed-stack pattern پر ختم ہوتا ہے جس پر اکثر production bots واقعی آ کر settle ہوتے ہیں۔

  • Decision framework
  • Python (default choice)
  • Node.js (full-stack devs)
  • Rust (latency-critical hot path)
  • Setup commands per stack
  • Code skeleton: 3 languages میں fetch order book
  • When to mix stacks (Python control plane + Rust hot path)

Decision framework

تین سوال 90% stack choice حل کر دیتے ہیں۔

  1. کیا آپ کے پاس پہلے سے strong skill ہے؟ اگر آپ روزانہ Python لکھتے ہیں، bot Python میں لکھیں۔ اگر آپ روزانہ TypeScript لکھتے ہیں، bot Node میں لکھیں۔ نیچے SDK quality کے فرق حقیقی ہیں، لیکن کسی unfamiliar language سے لڑنے کی cost سے چھوٹے ہیں۔
  2. کیا strategy latency-critical ہے؟ اگر آپ کا edge 50ms سے کم میں react کرنے پر depend کرتا ہے (5-minute crypto markets، news کے دوران market-making)، تو hot path کو Rust یا Go سے فائدہ ہوتا ہے۔ اکثر strategies کو اس کی ضرورت نہیں ہوتی۔
  3. کیا آپ ایک سے زیادہ strategy چلائیں گے؟ ایک single Python process آرام سے 10-20 markets manage کر سکتا ہے۔ اس سے آگے async Node یا split-process Python بہتر scale کرتا ہے۔

پہلے bot کے لیے honest default Python ہے۔ صرف تب switch کریں جب کوئی measured constraint آپ کو مجبور کرے۔

Python (default choice)

Python default ہے کیونکہ SDK سب سے مکمل ہے اور iteration loop سب سے تیز ہے۔ py-clob-client version 0.34.6 (May 2026) پر ہر اہم CLOB v2 endpoint cover کرتا ہے: market اور limit orders، FOK/FAK/GTC variants، order book reads، balance/allowance reads، اور web3.py کے ذریعے direct chain operations۔

Pros: mature SDK، pandas کے ساتھ آسان data analysis، بڑی community، on-chain reads کے لیے web3.py۔ Cons: JavaScript کے مقابلے میں async ergonomics awkward ہیں، GIL multi-core speedups کو محدود کرتا ہے (I/O-bound bot میں شاذونادر matter کرتا ہے)، cold containers پر startup time سست ہے۔

Recommended for: 80% builders۔ خاص طور پر وہ لوگ جن کی strategy میں backtesting، statistical analysis، یا execution کے ساتھ کوئی بھی data work شامل ہو۔

Node.js (full-stack devs)

Node.js دوسرا best-supported stack ہے۔ @polymarket/clob-client-v2 version 1.0.6 پر Python SDK کے برابر endpoints cover کرتا ہے، اور ہر جگہ TypeScript types موجود ہیں۔ Async native اور fast ہے؛ WebSocket handling بہترین ہے۔

Pros: بہترین async story، native TypeScript types، HTTP + WS کے لیے بڑا ecosystem، web dashboard کے اسی Node runtime پر آسان deploy۔ Cons: number precision کے لیے large token IDs پر BigInt یا string handling درکار ہے (ERC-1155 IDs 256-bit ہیں)، pandas کے equivalent data tools کمزور ہیں۔

Recommended for: وہ builders جو پہلے سے JavaScript stack maintain کرتے ہیں اور ایک ہی runtime چاہتے ہیں۔ نیز: وہ لوگ جو bot کے ساتھ dashboard بھی بنا رہے ہوں - bot core اور Next.js dashboard کے درمیان types share کرنے سے bugs کی ایک class ختم ہو جاتی ہے۔

Rust (latency-critical hot path)

Rust کے پاس official Polymarket SDK نہیں ہے۔ آپ V2 REST اور WebSocket APIs کے خلاف directly build کرتے ہیں: reqwest (HTTP)، tokio-tungstenite (WebSocket)، اور signing کے لیے ethers-rs یا alloy۔ یہ تقریباً دو دن کا setup work ہے، جبکہ Python میں 30 منٹ۔

Pros: JS subprocess کے بغیر native EIP-712 signing، sub-millisecond order construction، load کے تحت deterministic memory profile، GC pauses نہیں۔ Cons: SDK نہ ہونے کا مطلب ہے کہ وہ سب آپ کو خود implement کرنا پڑتا ہے جو Python users کو free ملتا ہے (clobToken ID parsing، response schema validation، salt/nonce management)۔ latency میں فائدہ tuned Python کے مقابلے میں 20-100ms کا ہے، جو صرف sub-second strategies کے لیے اہم ہے۔

Recommended for: market-making bot کے hot path کے لیے، یا news-arb bot کے trade-firing leg کے لیے۔ تقریباً کبھی پورے bot کے لیے نہیں۔

Setup commands per stack

Mainnet پر working signed order تک پہنچنے کے لیے minimum commands (single CLOB v2 endpoint)۔

Python:

python -m venv venv && source venv/bin/activate
pip install py-clob-client==0.34.6 web3 python-dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Node:

npm init -y
npm install @polymarket/[email protected] ethers dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Rust:

cargo new --bin pmt
cd pmt
cargo add tokio reqwest serde serde_json ethers alloy tungstenite tokio-tungstenite
# Hand-write signer + endpoint client; no SDK shortcut.

Time-to-first-order: ~10 min Python، ~15 min Node، ~4-8 hours Rust۔

Code skeleton: 3 languages میں fetch order book

وہی task - Polymarket token کے لیے order book fetch کرنا - ہر stack میں۔ تینوں ایک ہی CLOB v2 REST endpoint hit کرتے ہیں۔

Python (py-clob-client):

from py_clob_client.client import ClobClient
client = ClobClient(host="https://clob.polymarket.com", chain_id=137)
book = client.get_order_book("<token_id>")
print(book.bids[:3], book.asks[:3])

Node (@polymarket/clob-client-v2):

import { ClobClient } from "@polymarket/clob-client-v2";
const c = new ClobClient({ host: "https://clob.polymarket.com", chain: 137 });
const book = await c.getOrderBook("<token_id>");
console.log(book.bids.slice(0,3), book.asks.slice(0,3));

Rust (direct HTTP):

let url = format!("https://clob.polymarket.com/book?token_id={}", token);
let book: serde_json::Value = reqwest::get(&url).await?.json().await?;
println!("{:?} {:?}", &book["bids"][..3], &book["asks"][..3]);

تینوں میں response shape ایک جیسی ہے۔ Rust کی cost باقی ہر جگہ ہے - signing، order construction، error handling - نہ کہ read path میں۔

When to mix stacks (Python control plane + Rust hot path)

وہ pattern جس پر بہت سے production bots آ کر converge کرتے ہیں: decisions سے متعلق ہر چیز کے لیے Python، اور millisecond execution leg کے لیے Rust۔

Architecture: ایک Python process market state read کرتا ہے، strategy logic چلاتا ہے، اور ایک چھوٹی command file (مثلاً {"action":"buy","token":"...","size":10,"price":0.45}) Unix socket پر لکھتا ہے۔ ایک Rust daemon اس socket کو listen کرتا ہے، order sign کرتا ہے، اور اسے CLOB پر post کر دیتا ہے۔ Python process slow اور convenient ہو سکتا ہے؛ Rust daemon fast اور minimal ہوتا ہے۔

یہ handoff کلیدی ہے: signed-order step کو isolate کر کے Python crash budget recover ہو جاتی ہے بغیر latency قربان کیے۔ ہم اپنی production bots میں بالکل یہی pattern استعمال کرتے ہیں - Python intentions emit کرتا ہے، /tmp/clob.sock پر Node daemon signing handle کرتا ہے۔ Node version of daemon sub-100ms کے لیے ٹھیک ہے؛ Rust صرف 50ms سے نیچے واقعی اپنا حق ادا کرتا ہے۔

اکثر پوچھے جانے والے سوالات

کیا py-clob-client Polymarket V2 کے ساتھ compatible ہے؟
جی ہاں۔ py-clob-client 0.34.6 (وہ version جو ہم May 2026 تک اپنی VPS پر production میں چلا رہے ہیں) V2-compatible ہے اور pUSD collateral migration کے ساتھ کام کرتا ہے۔ Package "pip install py-clob-client" سے install ہوتا ہے۔
Official Node.js Polymarket SDK کون سا ہے؟
@polymarket/clob-client-v2 (فی الحال May 2026 تک v1.0.6)۔ package name میں "v2" اہم ہے - پرانا @polymarket/clob-client package V1 ہے اور نئے projects کے لیے recommended نہیں۔ "npm install @polymarket/clob-client-v2" سے install کریں۔
کیا official Rust Polymarket SDK موجود ہے؟
نہیں۔ May 2026 تک Polymarket کی طرف سے کوئی official Rust SDK موجود نہیں ہے۔ Rust users براہِ راست V2 REST اور WebSocket APIs کے خلاف ethers-rs (EIP-712 signing کے لیے) اور reqwest یا hyper (HTTP/WS کے لیے) استعمال کرتے ہوئے build کرتے ہیں۔ یہ زیادہ code ہے، لیکن latency اور concurrency کے فائدے market making کے لیے اہم ہوتے ہیں۔
کیا میں Polymarket bot کے لیے Go استعمال کر سکتا ہوں؟
جی ہاں، technically - Go کے پاس اچھی HTTP اور Ethereum libraries (go-ethereum) ہیں۔ کوئی official Go SDK نہیں ہے، اس لیے آپ REST API کے خلاف build کرتے ہیں۔ ہمیں Polymarket bots کے لیے Go، Python یا Node.js جتنا common نظر نہیں آتا، لیکن یہ مکمل طور پر feasible ہے۔
اگر مجھے Python اور Node دونوں آتے ہیں تو مجھے کون سا استعمال کرنا چاہیے؟
Python اگر آپ کی strategy research-heavy ہے (pandas، NumPy، scikit-learn)۔ Node.js اگر آپ کی strategy real-time / event-driven ہے اور آپ ایک ہی language client اور server کے لیے چاہتے ہیں۔ دونوں ایک ہی CLOB endpoints تک پہنچتے ہیں؛ دونوں کسی بھی non-HFT strategy کے لیے کافی fast ہیں۔
کیا Node SDK کے لیے TypeScript ضروری ہے؟
ضروری نہیں، لیکن recommended ہے۔ @polymarket/clob-client-v2 میں TypeScript types شامل ہیں، اور compile time پر type errors پکڑ لینا EIP-712 signature payloads یا order types غلط ہونے پر کافی debugging بچا دیتا ہے۔
Polymarket bot کتنی تیز ہونی چاہیے؟
زیادہ تر strategies کے لیے milliseconds کافی ہیں، microseconds نہیں۔ Sports microstructure اور market making کو sub-100ms سے فائدہ ہوتا ہے؛ news arbitrage 500-1000ms برداشت کر لیتا ہے۔ strategy logic کے لیے Python استعمال کریں، اور Rust پر صرف hot path کے لیے جائیں اگر latency profiling ثابت کرے کہ آپ کے edge کے لیے یہ واقعی اہم ہے۔