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-এ কী covered
ভাষা নির্বাচনটা বেশিরভাগ builders যতটা গুরুত্ব দেন, বাস্তবে তার চেয়ে অনেক কম গুরুত্বপূর্ণ। Polymarket প্রতিটি ভাষার জন্য একই REST এবং WebSocket endpoint expose করে; SDK choice মূলত ঠিক করে আপনি কতটা glue code নিজে লিখবেন। Python এবং Node - দুটিরই officially maintained SDK আছে; Rust-এর নেই, তবে hot path-এর জন্য feasible। এই chapter-এ trade-off গুলো বোঝানো হয়েছে, একই "fetch order book" task প্রতিটি ভাষায় দেখানো হয়েছে যাতে পার্থক্যটা concrete হয়, এবং শেষে একটি mixed-stack pattern দেওয়া হয়েছে যা বেশিরভাগ production bot আসলে শেষ পর্যন্ত ব্যবহার করে।
- Decision framework
- Python (default choice)
- Node.js (full-stack devs)
- Rust (latency-critical hot path)
- প্রতি stack-এর setup commands
- Code skeleton: 3 ভাষায় order book fetch
- কখন stacks mix করবেন (Python control plane + Rust hot path)
Decision framework
তিনটি প্রশ্ন stack choice-এর 90% মীমাংসা করে।
- আপনার কি কোনো strong existing skill আছে? আপনি যদি প্রতিদিন Python লেখেন, bot-ও Python-এ লিখুন। আপনি যদি প্রতিদিন TypeScript লেখেন, bot-ও Node-এ লিখুন। নিচে SDK quality-এর পার্থক্যগুলো বাস্তব, কিন্তু unfamiliar language-এর সঙ্গে লড়াই করার cost-এর চেয়ে কম।
- Strategy কি latency-critical? যদি আপনার edge 50ms-এর কমে react করার ওপর নির্ভর করে (5-minute crypto markets, news-এর সময় market-making), তাহলে hot path-এ Rust বা Go-এর সুবিধা আছে। বেশিরভাগ strategy-এর এটা দরকার হয় না।
- আপনি কি একাধিক strategy চালাবেন? একটি single Python process স্বচ্ছন্দে 10-20টি market manage করতে পারে। এর বেশি হলে async Node বা split-process Python ভালো scale করে।
প্রথম bot-এর জন্য সৎ default হলো Python। measured constraint আপনাকে বাধ্য না করা পর্যন্ত switch করবেন না।
Python (default choice)
Python default, কারণ SDK সবচেয়ে complete এবং iteration loop সবচেয়ে fast। 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 দিয়ে easy data analysis, বড় community, on-chain reads-এর জন্য web3.py। Cons: JavaScript-এর তুলনায় async ergonomics awkward, GIL multi-core speedup সীমিত করে (I/O-bound bot-এর ক্ষেত্রে সাধারণত তেমন matter করে না), cold container-এ startup time ধীর।
Recommended for: 80% of builders. বিশেষ করে যাঁদের strategy-তে backtesting, statistical analysis, বা execution-এর পাশাপাশি কোনো না কোনো data work আছে।
Node.js (full-stack devs)
Node.js দ্বিতীয় সর্বাধিক supported stack। @polymarket/clob-client-v2 version 1.0.6 Python SDK-এর মতোই same endpoint cover করে, সাথে পুরো জুড়ে TypeScript types আছে। Async native এবং fast; WebSocket handling চমৎকার।
Pros: best async story, native TypeScript types, HTTP + WS-এর জন্য বড় ecosystem, web dashboard-এর একই Node runtime-এ deploy করা সহজ। Cons: বড় token ID-এর ক্ষেত্রে number precision-এর জন্য BigInt বা string handling দরকার (ERC-1155 ID গুলো 256-bit), pandas-এর মতো data tools তুলনামূলক দুর্বল।
Recommended for: যাঁরা ইতিমধ্যে JavaScript stack maintain করেন এবং একটাই runtime চান। এছাড়াও: bot-এর পাশাপাশি dashboard বানাচ্ছেন এমন যেকোনো ব্যক্তি - bot core এবং Next.js dashboard-এর মধ্যে types share করলে bugs-এর একটি class দূর হয়।
Rust (latency-critical hot path)
Rust-এর official Polymarket SDK নেই। আপনি reqwest (HTTP), tokio-tungstenite (WebSocket), এবং signing-এর জন্য ethers-rs বা alloy ব্যবহার করে সরাসরি V2 REST এবং WebSocket APIs-এর ওপর build করেন। Python-এ 30 মিনিটের বদলে setup কাজ প্রায় দুই দিন।
Pros: JS subprocess ছাড়া native EIP-712 signing, sub-millisecond order construction, load-এর নিচে deterministic memory profile, GC pauses নেই। Cons: SDK না থাকায় Python user-রা যা ফ্রি পান তা আপনাকে নিজে re-implement করতে হয় (clobToken ID parsing, response schema validation, salt/nonce management)। latency-তে gain হলো tuned Python-এর তুলনায় 20-100ms, যা শুধু sub-second strategy-তেই matter করে।
Recommended for: market-making bot-এর hot path, বা news-arb bot-এর trade-firing leg। প্রায় কখনও পুরো bot-এর জন্য নয়।
প্রতি stack-এর setup commands
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: Python ~10 মিনিট, Node ~15 মিনিট, Rust ~4-8 ঘণ্টা।
Code skeleton: 3 ভাষায় order book fetch
একই 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-এ নয়।
কখন stacks mix করবেন (Python control plane + Rust hot path)
অনেক production bot যে pattern-এ converge করে: decision-সংক্রান্ত সবকিছুর জন্য Python, millisecond execution leg-এর জন্য Rust।
Architecture: একটি Python process market state পড়ে, 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 করার মাধ্যমে latency sacrifice না করেই Python crash budget recover হয়। আমরা production bots-এ ঠিক এই pattern ব্যবহার করি - Python intentions emit করে, /tmp/clob.sock-এ একটি Node daemon signing handle করে। sub-100ms-এর ক্ষেত্রে Node version যথেষ্ট; Rust তার value পায় মূলত 50ms-এর নিচে।












