Туторіал з бота Полімаркет · Розділ 3 із 32

Оберіть ваш Полімаркет bot stack: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.2), або Rust (офіційного SDK немає, будуйте на ethers-rs). Переваги, недоліки, latency, code samples.

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

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

  • Як ухвалити рішення
  • Python (вибір за замовчуванням)
  • Node.js (full-stack розробники)
  • Rust (критичний до затримки гарячий шлях)
  • Команди налаштування для кожного stack
  • Каркас коду: отримання order book трьома мовами
  • Коли поєднувати стеки (керуючий шар на Python + гарячий шлях на Rust)

Як ухвалити рішення

Три питання вирішують 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 (вибір за замовчуванням)

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 розробники)

Node.js - це stack із другою найкращою підтримкою. @polymarket/clob-client-v2 у версії 1.0.2 покриває ті самі 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 (критичний до затримки гарячий шлях)

У Rust немає офіційного Полімаркет 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.

Команди налаштування для кожного 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.

Час до першого ордера: ~10 хв Python, ~15 хв Node, ~4-8 годин Rust.

Каркас коду: отримання order book трьома мовами

Одне й те саме завдання - отримати order book для Полімаркет 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.

Коли поєднувати стеки (керуючий шар на Python + гарячий шлях на Rust)

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 із Полімаркет V2?
Так. py-clob-client 0.34.6 (version, яку ми запускаємо в production на нашому VPS станом на May 2026) сумісний із V2 і працює з міграцією collateral на pUSD. Пакет встановлюється через "pip install py-clob-client".
Який офіційний Node.js Полімаркет SDK?
@polymarket/clob-client-v2 (поточна версія v1.0.2 станом на May 2026). "v2" у назві package має значення - старіший пакет @polymarket/clob-client є V1 і не рекомендований для нових projects. Встановлення: "npm install @polymarket/clob-client-v2".
Чи є офіційний Rust Полімаркет SDK?
Ні. Станом на May 2026, у Полімаркет немає офіційного Rust SDK. Користувачі Rust будують напряму проти V2 REST і WebSocket APIs, використовуючи ethers-rs (для EIP-712 signing) і reqwest або hyper (для HTTP/WS). Це більше code, але виграш у latency та concurrency важливий для market making.
Чи можу я використовувати Go для Полімаркет bot?
Так, технічно - у Go є хороші HTTP- і Ethereum libraries (go-ethereum). Офіційного Go SDK немає, тож ви будуєтеся поверх REST API. Ми не бачимо Go настільки часто для Полімаркет 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 задані неправильно.
Наскільки швидким має бути Полімаркет bot?
Більшість strategies нормально працюють на рівні milliseconds, а не microseconds. Sports microstructure і market making отримують користь від sub-100ms; news arbitrage tolerates 500-1000ms. Використовуйте Python для strategy logic, переходьте на Rust для hot path лише якщо latency profiling доведе, що це справді впливає на вашу edge.