Polymarket Bot Tutorial · Глава 3 из 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, примеры кода.

Что рассматривается в этой главе

Выбор языка куда менее важен, чем это обычно представляют многие разработчики. 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. Есть ли у вас сильный уже имеющийся skill? Если вы каждый день пишете на Python, пишите bot на Python. Если вы каждый день пишете на TypeScript, пишите bot на Node. Различия в качестве SDK ниже - реальные, но они меньше, чем цена борьбы с незнакомым языком.
  2. Является ли strategy latency-critical? Если ваше edge зависит от реакции быстрее 50ms (crypto markets на 5 минут, market-making во время новостей), hot path выигрывает от Rust или Go. Большинству strategies это не нужно.
  3. Будете ли вы запускать больше одной strategy? Один Python process может комфортно управлять 10-20 markets. Выше этого async Node или Python с разделением процессов масштабируется лучше.

Честный default для первого bot - Python. Переходите на другой stack только если измеримое ограничение заставляет это сделать.

Python (default choice)

Python - default choice, потому что SDK самый полный, а цикл итераций самый быстрый. py-clob-client версии 0.34.6 (май 2026) покрывает все важные endpoints CLOB v2: market и limit orders, варианты FOK/FAK/GTC, чтение order book, чтение balance/allowance, а также direct chain operations через web3.py.

Плюсы: mature SDK, удобный data analysis с pandas, большое community, web3.py для on-chain reads. Минусы: async ergonomics хуже, чем в JavaScript, GIL ограничивает multi-core speedup (для I/O-bound bot это обычно неважно), startup time в cold containers медленный.

Рекомендуется для: 80% builders. Особенно для тех, чья strategy включает backtesting, statistical analysis или любую работу с данными вместе с execution.

Node.js (full-stack devs)

Node.js - второй по качеству поддержки stack. @polymarket/clob-client-v2 версии 1.0.6 покрывает те же endpoints, что и Python SDK, с TypeScript types повсюду. Async - нативный и быстрый; обработка WebSocket отличная.

Плюсы: лучшая история с async, нативные TypeScript types, большой ecosystem для HTTP + WS, легко деплоить в том же Node runtime, что и web dashboard. Минусы: для больших token IDs требуется точность чисел через BigInt или обработка строк (ERC-1155 IDs - 256-bit), инструменты работы с данными уровня pandas слабее.

Рекомендуется для: builders, которые уже поддерживают JavaScript stack и хотят один runtime. Также для тех, кто строит dashboard вместе с bot - общий use of types между core bot и Next.js dashboard убирает целый класс bugs.

Rust (latency-critical hot path)

У Rust нет официального Polymarket SDK. Вы строите решения напрямую поверх V2 REST и WebSocket APIs, используя reqwest (HTTP), tokio-tungstenite (WebSocket) и ethers-rs или alloy для signing. Это примерно два дня setup вместо 30 минут в Python.

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

Рекомендуется для: hot path market-making bot или trade-firing части news-arb bot. Почти никогда - для всего bot целиком.

Setup commands per stack

Минимальные команды для рабочего signed order в mainnet (один 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.

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.

Когда смешивать stack (Python control plane + Rust hot path)

Паттерн, к которому приходят многие production bots: Python для всего, что связано с decisions, Rust - для millisecond execution leg.

Architecture: 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. Версия daemon на Node подходит для sub-100ms; Rust начинает действительно оправдывать себя только ниже 50ms.

Часто задаваемые вопросы

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