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.6), 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.

  1. 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.
  2. 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.
  3. 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.6 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.

Pertanyaan yang sering diajukan

Apakah py-clob-client kompatibel dengan Polymarket V2?
Ya. py-clob-client 0.34.6 (versi yang kami jalankan di production pada VPS kami per Mei 2026) kompatibel dengan V2 dan bekerja dengan migrasi collateral pUSD. Package diinstal melalui "pip install py-clob-client".
Apa SDK resmi Polymarket untuk Node.js?
@polymarket/clob-client-v2 (saat ini v1.0.6 per Mei 2026). "v2" pada nama package itu penting - package @polymarket/clob-client yang lebih lama adalah V1 dan tidak direkomendasikan untuk proyek baru. Instal melalui "npm install @polymarket/clob-client-v2".
Apakah ada SDK resmi Polymarket untuk Rust?
Tidak. Per Mei 2026 belum ada SDK Rust resmi dari Polymarket. Pengguna Rust membangun langsung terhadap API V2 REST dan WebSocket menggunakan ethers-rs (untuk EIP-712 signing) dan reqwest atau hyper (untuk HTTP/WS). Kodenya lebih banyak, tetapi keuntungan latensi dan concurrency penting untuk market making.
Bisakah saya menggunakan Go untuk bot Polymarket?
Ya, secara teknis - Go memiliki library HTTP dan Ethereum yang bagus (go-ethereum). Tidak ada SDK Go resmi, jadi Anda membangun langsung terhadap REST API. Kami tidak melihat Go digunakan sesering Python atau Node.js untuk bot Polymarket, tetapi sepenuhnya layak.
Haruskah saya memakai Python atau Node.js jika saya menguasai keduanya?
Python jika strategi Anda banyak riset (pandas, NumPy, scikit-learn). Node.js jika strategi Anda real-time / event-driven dan Anda ingin language yang sama untuk client dan server. Keduanya mencapai endpoint CLOB yang sama; keduanya cukup cepat untuk strategi non-HFT apa pun.
Apakah saya perlu TypeScript untuk Node SDK?
Tidak wajib, tetapi direkomendasikan. @polymarket/clob-client-v2 menyertakan TypeScript types, dan menangkap type errors saat compile sangat membantu mengurangi debugging ketika payload signature EIP-712 atau tipe order salah.
Seberapa cepat bot Polymarket perlu bekerja?
Kebanyakan strategi cukup dengan milidetik, bukan mikrodetik. Microstructure sports dan market making diuntungkan oleh sub-100ms; news arbitrage masih toleran pada 500-1000ms. Gunakan Python untuk logika strategi, pindah ke Rust untuk hot path hanya jika latency profiling membuktikan itu penting bagi edge Anda.