Polymarket Bot Tutorial · Kabanata 3 ng 32

Piliin ang iyong Polymarket bot stack: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.6), o Rust (walang opisyal na SDK, gumawa sa ethers-rs). Pros, cons, latency, code samples.

Ano ang sinasaklaw ng kabanatang ito

Ang pagpili ng language ay mas hindi consequential kaysa sa pinapakitang ng karamihan ng builders. Ang Polymarket ay naglalantad ng parehong REST at WebSocket endpoints sa bawat language; ang SDK choice ay karaniwang nagpapasiya kung gaano karaming glue code ang isusulat mo mismo. Ang Python at Node ay parehong may opisyal na maintained na SDKs; ang Rust ay wala, pero feasible para sa hot path. Ang kabanatang ito ay naglalakad sa trade-offs, ipinapakita ang parehong "fetch order book" task sa bawat language para concrete ang diff, at nagtatapos sa mixed-stack pattern na ito ang karamihan ng production bots ay umaabot.

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

Decision framework

Tatlong tanong ang nag-resolve ng 90% ng stack choice.

  1. Mayroon ka bang strong existing skill? Kung nagsusulat ka ng Python araw-araw, isulat ang bot sa Python. Kung nagsusulat ka ng TypeScript araw-araw, isulat ang bot sa Node. Ang SDK quality differences sa ibaba ay totoo pero mas maliit kaysa sa cost ng pakikipaglaban sa unfamiliar language.
  2. Ang strategy ba ay latency-critical? Kung ang edge mo ay depende sa pag-react sa ibaba ng 50ms (5-minute crypto markets, market-making sa panahon ng news), ang hot path ay nakikinabang sa Rust o Go. Karamihan ng strategies ay hindi nito kailangan.
  3. Magpapatakbo ka ba ng higit sa isang strategy? Ang isang Python process ay maaaring komportable na pamahalaan ang 10-20 markets. Sa kabila niyan, ang async Node o split-process Python ay mas mahusay na nag-iscale.

Ang honest default para sa unang bot ay Python. Lumipat lamang kapag napilitan ito ng nasusukat na constraint.

Python (default choice)

Ang Python ay default dahil ang SDK ay ang pinaka-complete at ang iteration loop ay ang pinakamabilis. Ang py-clob-client sa version 0.34.6 (Mayo 2026) ay sumasaklaw sa bawat CLOB v2 endpoint na mahalaga: market at limit orders, FOK/FAK/GTC variants, order book reads, balance/allowance reads, at direct chain operations sa pamamagitan ng web3.py.

Pros: matured na SDK, madaling data analysis sa pandas, malaking community, web3.py para sa on-chain reads. Cons: ang async ergonomics ay awkward kumpara sa JavaScript, ang GIL ay nililimitahan ang multi-core speedups (bihirang mahalaga para sa I/O-bound bot), ang startup time sa cold containers ay mabagal.

Inirerekomenda para sa: 80% ng builders. Lalo na sinuman na ang strategy ay nag-iinvolve ng backtesting, statistical analysis, o anumang data work kasama ng execution.

Node.js (full-stack devs)

Ang Node.js ay ang pangalawang pinakamahusay na sinusuportahang stack. Ang @polymarket/clob-client-v2 sa version 1.0.6 ay sumasaklaw sa parehong endpoints bilang ang Python SDK na may TypeScript types sa lahat. Ang async ay native at mabilis; ang WebSocket handling ay excellent.

Pros: pinakamahusay na async story, native TypeScript types, malaking ecosystem para sa HTTP + WS, madaling deploy sa parehong Node runtime bilang web dashboard. Cons: ang number precision ay nangangailangan ng BigInt o string handling para sa malalaking token IDs (ERC-1155 IDs ay 256-bit), ang pandas-equivalent data tools ay mas mahina.

Inirerekomenda para sa: builders na nagmaintain na ng JavaScript stack at gustong ng isang runtime. Gayundin: sinumang nagbuo ng dashboard kasama ng bot - ang pagbabahagi ng types sa pagitan ng bot core at Next.js dashboard ay nag-aalis ng isang class ng bugs.

Rust (latency-critical hot path)

Ang Rust ay walang opisyal na Polymarket SDK. Magbuo ka laban sa V2 REST at WebSocket APIs nang direkta gamit ang reqwest (HTTP), tokio-tungstenite (WebSocket), at ethers-rs o alloy para sa signing. Halos dalawang araw ng setup work kumpara sa 30 minuto sa Python.

Pros: native EIP-712 signing nang walang JS subprocess, sub-millisecond order construction, deterministic memory profile sa ilalim ng load, walang GC pauses. Cons: walang SDK ibig sabihin nag-re-implement ka kung ano ang kinukuha ng Python users nang libre (clobToken ID parsing, response schema validation, salt/nonce management). Ang win sa latency ay 20-100ms kumpara sa tuned Python, na mahalaga lamang para sa sub-second strategies.

Inirerekomenda para sa: hot path ng market-making bot, o trade-firing leg ng news-arb bot. Halos hindi kailanman ang buong bot.

Setup commands per stack

Minimum commands sa working signed order laban sa mainnet (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 oras Rust.

Code skeleton: fetch order book sa 3 languages

Ang parehong task - fetch ang order book para sa Polymarket token - sa bawat stack. Lahat ng tatlo ay tumatama sa parehong CLOB v2 REST endpoint.

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]);

Parehong response shape sa lahat ng tatlo. Ang cost ng Rust ay nasa lahat ng iba pa - signing, order construction, error handling - hindi sa read path.

Kailan mag-mix ng stacks (Python control plane + Rust hot path)

Ang pattern na maraming production bots ay nag-converge: Python para sa lahat ng nag-iinvolve ng decisions, Rust para sa millisecond execution leg.

Architecture: ang Python process ay nagbabasa ng market state, nag-run ng strategy logic, at nagsusulat ng maliit na command file (e.g. {"action":"buy","token":"...","size":10,"price":0.45}) sa Unix socket. Ang Rust daemon ay nakikinig sa socket na iyon, nag-sign ng order, at nag-post sa CLOB. Ang Python process ay maaaring mabagal at convenient; ang Rust daemon ay mabilis at minimal.

Ang handoff ang susi: sa pamamagitan ng pag-iisolate ng signed-order step, ang Python crash budget ay recovered nang hindi nagsasakripisyo ng latency. Ginagamit namin ang exact pattern na ito sa aming production bots - ang Python ay nag-emit ng intentions, ang Node daemon sa /tmp/clob.sock ay humahawak ng signing. Ang Node version ng daemon ay fine para sa sub-100ms; ang Rust ay kumikita lamang ng keep sa ibaba ng 50ms.

Mga madalas na tanong

Ang py-clob-client ba ay compatible sa Polymarket V2?
Oo. Ang py-clob-client 0.34.6 (ang version na ino-operate namin sa production sa aming VPS noong Mayo 2026) ay V2-compatible at gumagana sa pUSD collateral migration. Ang package ay na-install sa pamamagitan ng "pip install py-clob-client".
Ano ang opisyal na Node.js Polymarket SDK?
@polymarket/clob-client-v2 (kasalukuyang v1.0.6 noong Mayo 2026). Ang "v2" sa package name ay mahalaga - ang mas lumang @polymarket/clob-client package ay V1 at hindi inirerekomenda para sa mga bagong project. I-install sa pamamagitan ng "npm install @polymarket/clob-client-v2".
May opisyal na Rust Polymarket SDK ba?
Wala. Noong Mayo 2026 ay walang opisyal na Rust SDK mula sa Polymarket. Ang Rust users ay nagbubuo direkta laban sa V2 REST at WebSocket APIs gamit ang ethers-rs (para sa EIP-712 signing) at reqwest o hyper (para sa HTTP/WS). Mas maraming code, pero ang latency at concurrency wins ay mahalaga para sa market making.
Maaari ko bang gamitin ang Go para sa Polymarket bot?
Oo, technically - ang Go ay may mahusay na HTTP at Ethereum libraries (go-ethereum). Walang opisyal na Go SDK, kaya magbubuo ka laban sa REST API. Hindi namin nakikita ang Go na ginagamit nang ganoon karaming sa Polymarket bots tulad ng Python o Node.js, pero ito ay ganap na feasible.
Dapat ko bang gamitin ang Python o Node.js kung alam ko ang dalawa?
Python kung ang strategy mo ay research-heavy (pandas, NumPy, scikit-learn). Node.js kung ang strategy mo ay real-time / event-driven at gusto mo ang parehong language client at server. Pareho ay umaabot sa parehong CLOB endpoints; pareho ay mabilis na sapat para sa anumang non-HFT strategy.
Kailangan ko ba ng TypeScript para sa Node SDK?
Hindi kinakailangan, pero inirerekomenda. Ang @polymarket/clob-client-v2 ay nag-ship ng TypeScript types, at ang pagkakahuli ng type errors sa compile time ay nakakatipid ng maraming debugging kapag mali ang EIP-712 signature payloads o order types.
Gaano kabilis dapat ang Polymarket bot?
Karamihan ng strategies ay milliseconds-fine, hindi microseconds. Ang sports microstructure at market making ay nakikinabang sa sub-100ms; ang news arbitrage ay nagtitiis ng 500-1000ms. Gamitin ang Python para sa strategy logic, lumipat sa Rust para sa hot path lamang kung pinapatunayan ng latency profiling na mahalaga ito para sa iyong edge.