Polymarket Bot Tutorial · Capítulo 3 de 32

Escolha sua stack de bot para Polymarket: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.6) ou Rust (sem SDK oficial, construído em cima de ethers-rs). Prós, contras, latência, exemplos de código.

O que este capítulo cobre

A escolha da linguagem é muito menos decisiva do que a maioria dos builders trata. A Polymarket expõe os mesmos endpoints REST e WebSocket para todas as linguagens; a escolha do SDK determina principalmente quanto código de integração você vai escrever por conta própria. Python e Node têm SDKs mantidos oficialmente; Rust não tem, mas é viável para o hot path. Este capítulo analisa os trade-offs, mostra a mesma tarefa de "buscar order book" em cada linguagem para deixar a diferença concreta e termina com um padrão de stack mista que é o que a maioria dos bots em produção realmente adota.

  • Framework de decisão
  • Python (escolha padrão)
  • Node.js (devs full-stack)
  • Rust (hot path crítico para latência)
  • Comandos de setup por stack
  • Esqueleto de código: buscar order book em 3 linguagens
  • Quando misturar stacks (control plane em Python + hot path em Rust)

Framework de decisão

Três perguntas resolvem 90% da escolha da stack.

  1. Você já tem uma habilidade forte? Se você escreve Python todo dia, escreva o bot em Python. Se você escreve TypeScript todo dia, escreva o bot em Node. As diferenças de qualidade dos SDKs abaixo são reais, mas menores do que o custo de brigar com uma linguagem desconhecida.
  2. A estratégia é crítica para latência? Se sua vantagem depende de reagir em menos de 50ms (mercados cripto de 5 minutos, market making durante notícias), o hot path se beneficia de Rust ou Go. A maioria das estratégias não precisa disso.
  3. Você vai rodar mais de uma estratégia? Um único processo Python consegue gerenciar confortavelmente 10-20 mercados. Além disso, Node assíncrono ou Python com processos separados escala melhor.

O padrão honesto para um primeiro bot é Python. Troque só quando uma restrição medida obrigar.

Python (escolha padrão)

Python é o padrão porque o SDK é o mais completo e o ciclo de iteração é o mais rápido. py-clob-client na versão 0.34.6 (maio de 2026) cobre todo endpoint importante da CLOB v2: ordens de mercado e limit, variações FOK/FAK/GTC, leitura de order book, leitura de balance/allowance e operações diretas na chain via web3.py.

Prós: SDK maduro, análise de dados fácil com pandas, comunidade grande, web3.py para leituras on-chain. Contras: ergonomia de async é mais trabalhosa que em JavaScript, o GIL limita ganhos com múltiplos núcleos (raramente importa para um bot bound por I/O), e o tempo de inicialização em containers frios é lento.

Recomendado para: 80% dos builders. Especialmente para quem tem estratégia com backtesting, análise estatística ou qualquer trabalho de dados junto com execução.

Node.js (devs full-stack)

Node.js é a segunda stack com melhor suporte. @polymarket/clob-client-v2 na versão 1.0.6 cobre os mesmos endpoints que o SDK de Python, com tipos TypeScript em tudo. Async é nativo e rápido; o tratamento de WebSocket é excelente.

Prós: melhor história de async, tipos nativos de TypeScript, ecossistema grande para HTTP + WS, deploy fácil no mesmo runtime Node de um dashboard web. Contras: precisão numérica exige BigInt ou tratamento como string para token IDs grandes (IDs ERC-1155 têm 256 bits), e as ferramentas de dados equivalentes ao pandas são mais fracas.

Recomendado para: builders que já mantêm uma stack JavaScript e querem um único runtime. Também para quem está construindo um dashboard junto com o bot - compartilhar tipos entre o core do bot e um dashboard Next.js elimina uma classe de bugs.

Rust (hot path crítico para latência)

Rust não tem SDK oficial da Polymarket. Você constrói diretamente contra as APIs V2 REST e WebSocket usando reqwest (HTTP), tokio-tungstenite (WebSocket) e ethers-rs ou alloy para assinatura. Em termos de setup, são cerca de dois dias de trabalho contra 30 minutos em Python.

Prós: assinatura EIP-712 nativa sem subprocesso JS, construção de ordem em sub-milisegundos, perfil de memória determinístico sob carga, sem pausas de GC. Contras: sem SDK, você reimplementa o que usuários de Python recebem de graça (parsing de clobToken ID, validação de schema de resposta, gerenciamento de salt/nonce). O ganho de latência é de 20-100ms versus Python ajustado, o que só importa para estratégias sub-second.

Recomendado para: o hot path de um bot de market making, ou a perna que dispara trades de um bot de news-arb. Quase nunca para o bot inteiro.

Comandos de setup por stack

Comandos mínimos para obter uma ordem assinada funcionando na mainnet (um 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.

Tempo até a primeira ordem: ~10 min em Python, ~15 min em Node, ~4-8 horas em Rust.

Esqueleto de código: buscar order book em 3 भाषagens

A mesma tarefa - buscar o order book de um token da Polymarket - em cada stack. As três chamam o mesmo endpoint REST da CLOB v2.

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 (HTTP direto):

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]);

O shape da resposta é o mesmo nas três. O custo do Rust está em todo o resto - assinatura, construção de ordens, tratamento de erros - não no caminho de leitura.

Quando misturar stacks (control plane em Python + hot path em Rust)

O padrão ao qual muitos bots em produção convergem: Python para tudo que envolve decisões, Rust para a parte de execução em milissegundos.

Arquitetura: um processo Python lê o estado do mercado, executa a lógica da estratégia e escreve um pequeno arquivo de comando (por exemplo {"action":"buy","token":"...","size":10,"price":0.45}) em um Unix socket. Um daemon Rust escuta esse socket, assina a ordem e a envia para a CLOB. O processo Python pode ser lento e conveniente; o daemon Rust é rápido e minimalista.

A transferência é a chave: ao isolar a etapa de ordem assinada, o orçamento de crash do Python é recuperado sem sacrificar latência. Usamos exatamente esse padrão nos nossos bots em produção - Python emite intenções, um daemon Node em /tmp/clob.sock cuida da assinatura. A versão em Node do daemon é boa para sub-100ms; Rust só vale a pena abaixo de 50ms.

Perguntas frequentes

py-clob-client é compatível com Polymarket V2?
Sim. py-clob-client 0.34.6 (a versão que rodamos em produção no nosso VPS em maio de 2026) é compatível com V2 e funciona com a migração de collateral para pUSD. O pacote é instalado via "pip install py-clob-client".
Qual é o SDK oficial da Polymarket para Node.js?
@polymarket/clob-client-v2 (atualmente v1.0.6 em maio de 2026). O "v2" no nome do pacote é significativo - o pacote mais antigo @polymarket/clob-client é V1 e não é recomendado para projetos novos. Instale via "npm install @polymarket/clob-client-v2".
Existe um SDK oficial da Polymarket para Rust?
Não. Em maio de 2026, não existe SDK oficial em Rust da Polymarket. Usuários de Rust constroem diretamente sobre as APIs V2 REST e WebSocket usando ethers-rs (para assinatura EIP-712) e reqwest ou hyper (para HTTP/WS). É mais código, mas os ganhos de latência e concorrência importam para market making.
Posso usar Go para um bot da Polymarket?
Sim, tecnicamente - Go tem boas bibliotecas HTTP e Ethereum (go-ethereum). Não existe SDK oficial em Go, então você constrói contra a API REST. Não vemos Go usado com tanta frequência para bots da Polymarket quanto Python ou Node.js, mas é totalmente viável.
Devo usar Python ou Node.js se eu conhecer os dois?
Python, se sua estratégia for pesada em pesquisa (pandas, NumPy, scikit-learn). Node.js, se sua estratégia for em tempo real / orientada a eventos e você quiser o mesmo cliente e servidor na mesma linguagem. Ambos alcançam os mesmos endpoints da CLOB; ambos são rápidos o suficiente para qualquer estratégia que não seja HFT.
Preciso de TypeScript para usar o SDK de Node?
Não é obrigatório, mas é recomendado. @polymarket/clob-client-v2 vem com tipos TypeScript, e capturar erros de tipo em compile time economiza muito debugging quando os payloads de assinatura EIP-712 ou os tipos de ordem estão errados.
Quão rápido um bot da Polymarket precisa ser?
A maioria das estratégias funciona bem em milissegundos, não em microssegundos. Microestrutura esportiva e market making se beneficiam de menos de 100ms; arbitragem de notícias tolera 500-1000ms. Use Python para a lógica da estratégia e troque para Rust no hot path só se o profiling de latência provar que isso importa para sua vantagem.