Tutorial Bot Polymarket · Bab 3 dari 32
Pilih stack bot Polymarket Anda: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.2), atau Rust (tanpa SDK resmi, bangun di atas ethers-rs). Kelebihan, kekurangan, latensi, contoh kode.
Apa yang dibahas bab ini
Pilihan bahasa jauh kurang menentukan daripada yang biasanya dianggap oleh kebanyakan builder. Polymarket menyediakan endpoint REST dan WebSocket yang sama untuk semua bahasa; pilihan SDK terutama menentukan seberapa banyak glue code yang perlu Anda tulis sendiri. Python dan Node sama-sama memiliki SDK yang dikelola secara resmi; Rust tidak, tetapi tetap layak untuk hot path. Bab ini membahas trade-off, menampilkan tugas "fetch order book" yang sama di setiap bahasa agar perbedaannya konkret, dan diakhiri dengan pola mixed-stack yang sebenarnya dipakai sebagian besar bot production.
- Framework pengambilan keputusan
- Python (pilihan default]
- Node.js (full-stack devs)
- Rust (latency-critical hot path)
- Perintah setup per stack
- Kerangka kode: fetch order book dalam 3 bahasa
- Kapan menggabungkan stack (Python control plane + Rust hot path)
Framework pengambilan keputusan
Tiga pertanyaan menyelesaikan 90% pilihan stack.
- Apakah Anda punya skill yang sudah kuat di salah satu bahasa? Jika Anda menulis Python setiap hari, tulis bot-nya dalam Python. Jika Anda menulis TypeScript setiap hari, tulis bot-nya dalam Node. Perbedaan kualitas SDK di bawah ini memang nyata, tetapi lebih kecil daripada biaya berjuang dengan bahasa yang belum familiar.
- Apakah strateginya sangat sensitif terhadap latensi? Jika edge Anda bergantung pada reaksi di bawah 50ms (market crypto 5 menit, market-making saat berita), hot path akan mendapat manfaat dari Rust atau Go. Sebagian besar strategi tidak membutuhkan ini.
- Apakah Anda akan menjalankan lebih dari satu strategi? Satu proses Python dapat dengan nyaman mengelola 10-20 market. Di atas itu, async Node atau Python dengan proses terpisah akan lebih scalable.
Default yang jujur untuk bot pertama adalah Python. Pindah hanya ketika kendala yang terukur memaksanya.
Python (pilihan default]
Python adalah default karena SDK-nya paling lengkap dan loop iterasinya paling cepat. py-clob-client versi 0.34.6 (Mei 2026) mencakup semua endpoint CLOB v2 yang penting: market dan limit orders, variasi FOK/FAK/GTC, pembacaan order book, pembacaan balance/allowance, dan operasi on-chain langsung melalui web3.py.
Kelebihan: SDK matang, analisis data mudah dengan pandas, komunitas besar, web3.py untuk pembacaan on-chain. Kekurangan: ergonomi async lebih canggung dibanding JavaScript, GIL membatasi speedup multi-core (jarang penting untuk bot yang terikat I/O), waktu startup di cold container lambat.
Direkomendasikan untuk: 80% builder. Terutama siapa pun yang strateginya melibatkan backtesting, analisis statistik, atau kerja data apa pun di samping execution.
Node.js (full-stack devs)
Node.js adalah stack dengan dukungan terbaik kedua. @polymarket/clob-client-v2 versi 1.0.2 mencakup endpoint yang sama seperti Python SDK dengan TypeScript types di seluruh bagian.
Async bersifat native dan cepat; penanganan WebSocket sangat baik.
Kelebihan: cerita async terbaik, native TypeScript types, ekosistem besar untuk HTTP + WS, mudah di-deploy di runtime Node yang sama dengan web dashboard. Kekurangan: presisi angka membutuhkan BigInt atau penanganan string untuk token ID besar (ERC-1155 IDs adalah 256-bit), tools data setara pandas lebih lemah.
Direkomendasikan untuk: builder yang sudah memelihara stack JavaScript dan ingin satu runtime. Juga: siapa pun yang membangun dashboard bersama bot - berbagi types antara core bot dan dashboard Next.js menghilangkan satu kelas bug.
Rust (latency-critical hot path)
Rust tidak memiliki SDK resmi Polymarket. Anda membangun langsung terhadap API V2 REST dan WebSocket menggunakan reqwest (HTTP), tokio-tungstenite (WebSocket), dan ethers-rs atau alloy untuk signing. Kira-kira butuh dua hari setup dibanding 30 menit di Python.
Kelebihan: EIP-712 signing native tanpa subprocess JS, konstruksi order sub-millisecond, memory profile deterministik di bawah beban, tanpa pause GC. Kekurangan: tanpa SDK berarti Anda harus mengimplementasikan ulang apa yang didapat pengguna Python secara gratis (parsing clobToken ID, validasi schema response, pengelolaan salt/nonce). Keuntungan latensi berada di kisaran 20-100ms dibanding Python yang sudah di-tune, dan ini hanya penting untuk strategi sub-detik.
Direkomendasikan untuk: hot path bot market-making, atau jalur eksekusi pada bot news-arb. Hampir tidak pernah untuk seluruh bot.
Perintah setup per stack
Perintah minimum untuk menghasilkan signed order yang bekerja di mainnet (single endpoint CLOB v2).
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.
Waktu ke order pertama: ~10 menit Python, ~15 menit Node, ~4-8 jam Rust.
Kerangka kode: fetch order book dalam 3 bahasa
Tugas yang sama - fetch order book untuk token Polymarket - di setiap stack. Ketiganya memanggil endpoint REST CLOB v2 yang sama.
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]);
Shape responsnya sama di ketiganya. Biaya Rust muncul di bagian lain - signing, konstruksi order, error handling - bukan di read path.
Kapan menggabungkan stack (Python control plane + Rust hot path)
Pola yang diadopsi banyak bot production: Python untuk semua hal yang melibatkan keputusan, Rust untuk leg eksekusi yang bersifat milidetik.
Arsitektur: proses Python membaca market state, menjalankan logika strategi, dan menulis file perintah kecil (mis. {"action":"buy","token":"...","size":10,"price":0.45}) ke Unix socket. Daemon Rust mendengarkan socket itu, menandatangani order, lalu mengirimkannya ke CLOB. Proses Python bisa lambat dan nyaman; daemon Rust cepat dan minimal.
Handoff adalah kuncinya: dengan mengisolasi langkah signed-order, budget crash Python bisa dipulihkan tanpa mengorbankan latensi. Kami menggunakan pola ini persis di bot production kami - Python mengirimkan intent, daemon Node di /tmp/clob.sock menangani signing. Versi Node dari daemon sudah cukup untuk sub-100ms; Rust baru benar-benar unggul di bawah 50ms.



