Polymarket Bot Tutorial · Bölüm 3 / 32
Polymarket bot stack’inizi seçin: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.6) veya Rust (resmi SDK yok, ethers-rs üzerinde geliştirin). Artılar, eksiler, latency, code sample’lar.
Bu bölüm neleri kapsıyor
Dil seçimi, çoğu builder’ın düşündüğü kadar kritik değildir. Polymarket, her dil için aynı REST ve WebSocket endpoint’lerini sunar; SDK seçimi çoğunlukla ne kadar glue code’u kendiniz yazacağınızı belirler. Python ve Node’un ikisinin de resmi olarak bakımı yapılan SDK’ları vardır; Rust’ta yoktur, ancak hot path için uygulanabilir. Bu bölüm trade-off’ları anlatır, aynı "fetch order book" görevini her dilde göstererek farkı somutlaştırır ve çoğu production bot’un sonunda benimsediği mixed-stack pattern ile bitirir.
- Decision framework
- Python (varsayılan seçenek)
- Node.js (full-stack devs)
- Rust (latency-critical hot path)
- Her stack için setup komutları
- Code skeleton: 3 dilde order book fetch etme
- Stack’leri ne zaman karıştırmalı (Python control plane + Rust hot path)
Decision framework
Stack seçiminin %90’ını üç soru çözer.
- Zaten güçlü olduğunuz bir dil var mı? Eğer her gün Python yazıyorsanız, botu Python’da yazın. Her gün TypeScript yazıyorsanız, botu Node’da yazın. Aşağıdaki SDK kalite farkları gerçek, ama alışılmadık bir dille savaşmanın maliyetinden daha küçüktür.
- Strateji latency-critical mı? Edge’iniz 50ms altında tepki vermeye bağlıysa (5-minute crypto markets, news sırasında market-making), hot path Rust veya Go’dan fayda görür. Çoğu stratejinin buna ihtiyacı yoktur.
- Birden fazla strateji çalıştıracak mısınız? Tek bir Python process rahatça 10-20 market’i yönetebilir. Bunun ötesinde async Node veya split-process Python daha iyi ölçeklenir.
İlk bot için dürüst varsayılan Python’dur. Yalnızca ölçülmüş bir kısıt sizi zorladığında değiştirin.
Python (varsayılan seçenek)
Python varsayılan seçenektir çünkü SDK en kapsamlı olanıdır ve iteration loop en hızlıdır. py-clob-client 0.34.6 sürümüyle (Mayıs 2026) önemli olan tüm CLOB v2 endpoint’lerini kapsar: market ve limit orders, FOK/FAK/GTC varyantları, order book okumaları, balance/allowance okumaları ve web3.py üzerinden doğrudan chain işlemleri.
Artılar: olgun SDK, pandas ile kolay data analysis, geniş community, on-chain okumalar için web3.py. Eksiler: async ergonomisi JavaScript’e göre daha hantaldır, GIL multi-core hız kazanımlarını sınırlar (I/O-bound bir bot için nadiren önemlidir), cold container’larda startup time yavaştır.
Önerilir: builder’ların %80’i için. Özellikle stratejisi backtesting, statistical analysis veya execution ile birlikte herhangi bir data work içeren herkes için.
Node.js (full-stack devs)
Node.js ikinci en iyi desteklenen stack’tir. @polymarket/clob-client-v2 1.0.6 sürümüyle Python SDK ile aynı endpoint’leri, uçtan uca TypeScript types ile kapsar. Async native ve hızlıdır; WebSocket handling mükemmeldir.
Artılar: en iyi async story, native TypeScript types, HTTP + WS için geniş ecosystem, bir web dashboard ile aynı Node runtime üzerinde kolay deploy. Eksiler: büyük token ID’leri için number precision BigInt veya string handling gerektirir (ERC-1155 ID’leri 256-bit’tir), pandas benzeri data araçları daha zayıftır.
Önerilir: zaten bir JavaScript stack yöneten ve tek bir runtime isteyen builder’lar için. Ayrıca bot ile birlikte dashboard geliştiren herkes için - bot core ile bir Next.js dashboard arasında types paylaşmak bir hata sınıfını ortadan kaldırır.
Rust (latency-critical hot path)
Rust’ın resmi bir Polymarket SDK’sı yoktur. V2 REST ve WebSocket API’lerine doğrudan reqwest (HTTP), tokio-tungstenite (WebSocket) ve imzalama için ethers-rs veya alloy kullanarak bağlanırsınız. Python’da 30 dakika olan kurulum işi yaklaşık iki gün sürer.
Artılar: JS subprocess olmadan native EIP-712 signing, sub-millisecond order construction, yük altında deterministic memory profile, GC pause yok. Eksiler: SDK olmaması, Python kullanıcılarının ücretsiz aldığı şeyleri sizin yeniden uygulamanız anlamına gelir (clobToken ID parsing, response schema validation, salt/nonce management). Latency kazancı, tune edilmiş Python’a kıyasla 20-100ms civarındadır; bu yalnızca sub-second stratejiler için önemlidir.
Önerilir: market-making bot’un hot path’i veya news-arb bot’un trade firing ayağı için. Neredeyse hiç bir zaman bot’un tamamı için değil.
Her stack için setup komutları
Mainnet’e karşı çalışan signed order için minimum komutlar (tek 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.
İlk order’a kadar geçen süre: ~10 dk Python, ~15 dk Node, ~4-8 saat Rust.
Code skeleton: 3 dilde order book fetch etme
Aynı görev - bir Polymarket token’ı için order book’u fetch etmek - her stack’te. Üçü de aynı CLOB v2 REST endpoint’ine gider.
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 (doğrudan 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]);
Üçünde de response shape aynı. Rust’ın maliyeti read path’te değil, signing, order construction ve error handling gibi diğer her yerde ortaya çıkar.
Stack’leri ne zaman karıştırmalı (Python control plane + Rust hot path)
Birçok production bot’un ulaştığı pattern: karar içeren her şey için Python, milisaniyelik execution ayağı için Rust.
Architecture: bir Python process market state’i okur, strategy logic’i çalıştırır ve küçük bir command file yazar (ör. {"action":"buy","token":"...","size":10,"price":0.45}) Unix socket’e. Bir Rust daemon bu socket’i dinler, order’ı imzalar ve CLOB’a gönderir. Python process yavaş ve kullanışlı olabilir; Rust daemon hızlı ve minimaldir.
Buradaki handoff kilit noktadır: signed-order adımını izole ederek, latency’den ödün vermeden Python crash budget geri kazanılır. Production bot’larımızda tam olarak bu pattern’i kullanıyoruz - Python niyetleri üretir, /tmp/clob.sock üzerindeki bir Node daemon imzalamayı yönetir. Daemon’ın Node versiyonu sub-100ms için gayet iyidir; Rust ise ancak 50ms altı durumda gerçekten fark yaratır.












