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 (офіційного SDK немає, будуйте на ethers-rs). Переваги, недоліки, latency, code samples.

Що охоплює цей розділ

Вибір мови значно менш вирішальний, ніж це сприймають більшість розробників. Polymarket надає ті самі REST і WebSocket endpoints кожній мові; вибір SDK здебільшого визначає, скільки glue code ви напишете самі. Python і Node обидва мають офіційно підтримувані SDK; у Rust такого немає, але він цілком придатний для hot path. У цьому розділі ми розбираємо trade-offs, показуємо одне й те саме завдання "fetch order book" у кожній мові, щоб різниця була конкретною, і завершуємо mixed-stack pattern, до якого на практиці приходить більшість production bots.

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

Decision framework

Три питання вирішують 90% вибору stack.

  1. У вас є сильна наявна експертиза? Якщо ви щодня пишете на Python, пишіть bot на Python. Якщо ви щодня пишете на TypeScript, пишіть bot на Node. Нижче differences у якості SDK реальні, але вони менші за ціну боротьби з незнайомою мовою.
  2. Чи є strategy latency-critical? Якщо ваша edge залежить від реакції менш ніж за 50ms (5-minute crypto markets, market-making під час news), hot path виграє від Rust або Go. Більшості strategies це не потрібно.
  3. Чи будете ви запускати більше ніж одну strategy? Один Python process може комфортно керувати 10-20 markets. Понад це async Node або split-process Python масштабуються краще.

Чесний default для першого bot - Python. Перемикайтеся лише тоді, коли виміряне обмеження змусить це зробити.

Python (default choice)

Python є default, тому що SDK найповніший, а цикл ітерації найшвидший. py-clob-client у версії 0.34.6 (May 2026) покриває кожен важливий endpoint CLOB v2: market і limit orders, варіанти FOK/FAK/GTC, reads order book, reads балансу/allowance, а також direct chain operations через web3.py.

Переваги: mature SDK, простий data analysis з pandas, велика спільнота, web3.py для on-chain reads. Недоліки: async ergonomics незручніші, ніж у JavaScript, GIL обмежує multi-core speedups (зазвичай це не має значення для bot, що працює з I/O), startup time на cold containers повільний.

Рекомендовано для: 80% розробників. Особливо для тих, чия strategy включає backtesting, statistical analysis або будь-яку data work поряд із execution.

Node.js (full-stack devs)

Node.js - це stack із другою найкращою підтримкою. @polymarket/clob-client-v2 у версії 1.0.6 покриває ті самі endpoints, що й Python SDK, із TypeScript types всюди. Async нативний і швидкий; WebSocket handling чудовий.

Переваги: найкраща async story, native TypeScript types, велика ecosystem для HTTP + WS, легко deploy-ити на тому ж Node runtime, що й web dashboard. Недоліки: для великих token IDs потрібен BigInt або обробка як string (ERC-1155 IDs - 256-bit), data tools на кшталт pandas слабші.

Рекомендовано для: розробників, які вже підтримують JavaScript stack і хочуть один runtime. Також: для тих, хто будує dashboard разом із bot - спільні types між bot core і Next.js dashboard прибирають цілий клас багів.

Rust (latency-critical hot path)

У Rust немає офіційного Polymarket SDK. Ви будуєте напряму проти V2 REST і WebSocket APIs, використовуючи reqwest (HTTP), tokio-tungstenite (WebSocket) і ethers-rs або alloy для signing. Це приблизно два дні setup work проти 30 хвилин у Python.

Переваги: native EIP-712 signing без JS subprocess, sub-millisecond order construction, deterministic memory profile під навантаженням, без GC pauses. Недоліки: без SDK ви реалізуєте заново те, що користувачі Python отримують безкоштовно (clobToken ID parsing, response schema validation, salt/nonce management). Виграш у latency становить 20-100ms порівняно з добре налаштованим Python, і це має значення лише для sub-second strategies.

Рекомендовано для: hot path market-making bot або trade-firing leg news-arb bot. Майже ніколи - для всього bot.

Setup commands per stack

Мінімальні команди для working signed order проти mainnet (один 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.

Time-to-first-order: ~10 min Python, ~15 min Node, ~4-8 hours Rust.

Code skeleton: fetch order book in 3 languages

Одне й те саме завдання - отримати order book для Polymarket token - у кожному stack. Усі три звертаються до одного й того ж 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]);

Однакова response shape в усіх трьох. Ціна Rust - всюди в іншому: signing, order construction, error handling - не в read path.

When to mix stacks (Python control plane + Rust hot path)

Pattern, до якого сходяться багато production bots: Python для всього, що пов’язане з decisions, Rust - для execution leg, де важливі мілісекунди.

Архітектура: Python process читає market state, запускає strategy logic і записує невеликий command file (наприклад {"action":"buy","token":"...","size":10,"price":0.45}) у Unix socket. Rust daemon слухає цей socket, підписує order і надсилає його в CLOB. Python process може бути повільним і зручним; Rust daemon - швидким і мінімальним.

Handoff - ключовий момент: ізолюючи signed-order step, ми відновлюємо crash budget Python без втрати latency. Ми використовуємо саме цей pattern у наших production bots - Python emits intentions, а Node daemon на /tmp/clob.sock виконує signing. Node version daemon цілком підходить для sub-100ms; Rust справді виправдовує себе лише нижче 50ms.

Часті запитання

Чи сумісний py-clob-client із Polymarket V2?
Так. py-clob-client 0.34.6 (version, яку ми запускаємо в production на нашому VPS станом на May 2026) сумісний із V2 і працює з міграцією collateral на pUSD. Пакет встановлюється через "pip install py-clob-client".
Який офіційний Node.js Polymarket SDK?
@polymarket/clob-client-v2 (поточна версія v1.0.6 станом на May 2026). "v2" у назві package має значення - старіший пакет @polymarket/clob-client є V1 і не рекомендований для нових projects. Встановлення: "npm install @polymarket/clob-client-v2".
Чи є офіційний Rust Polymarket SDK?
Ні. Станом на May 2026, у Polymarket немає офіційного Rust SDK. Користувачі Rust будують напряму проти V2 REST і WebSocket APIs, використовуючи ethers-rs (для EIP-712 signing) і reqwest або hyper (для HTTP/WS). Це більше code, але виграш у latency та concurrency важливий для market making.
Чи можу я використовувати Go для Polymarket bot?
Так, технічно - у Go є хороші HTTP- і Ethereum libraries (go-ethereum). Офіційного Go SDK немає, тож ви будуєтеся поверх REST API. Ми не бачимо Go настільки часто для Polymarket bots, як Python або Node.js, але це цілком feasible.
Що обрати - Python чи Node.js, якщо я знаю обидва?
Python, якщо ваша strategy дослідницька (pandas, NumPy, scikit-learn). Node.js, якщо ваша strategy real-time / event-driven і ви хочете одну мову для client і server. Обидва досягають тих самих CLOB endpoints; обидва достатньо швидкі для будь-якої non-HFT strategy.
Чи потрібен TypeScript для Node SDK?
Не обов’язково, але рекомендовано. @polymarket/clob-client-v2 постачається з TypeScript types, і виявлення type errors на етапі compile time економить багато debugging, коли payload підпису EIP-712 або order types задані неправильно.
Наскільки швидким має бути Polymarket bot?
Більшість strategies нормально працюють на рівні milliseconds, а не microseconds. Sports microstructure і market making отримують користь від sub-100ms; news arbitrage tolerates 500-1000ms. Використовуйте Python для strategy logic, переходьте на Rust для hot path лише якщо latency profiling доведе, що це справді впливає на вашу edge.