01 Descobrir mercados
Examine mercados públicos ativos, resultados, IDs de condição e IDs de token CLOB.
Ponto de partida
Você está em workshop_public/polymarket, .env.polymarket foi carregado e o preflight está pronto.
Por quê
O Polymarket usa um ID de condição para o mercado e um ID de token diferente para cada resultado. O WebSocket assina por ID de token; a API pública de negociações filtra por ID de condição.
Etapa 1 — Pedir ao Gamma os cinco mercados ativos mais movimentados
curl --fail --silent --show-error --get \
'https://gamma-api.polymarket.com/markets' \
--data-urlencode 'active=true' \
--data-urlencode 'closed=false' \
--data-urlencode 'limit=20' \
--data-urlencode 'order=volume24hr' \
--data-urlencode 'ascending=false' \
| python3 -c '
import json, sys
selected = 0
for market in json.load(sys.stdin):
if not market.get("acceptingOrders"):
continue
outcomes = json.loads(market["outcomes"])
tokens = json.loads(market["clobTokenIds"])
print(market["question"])
print(" condition:", market["conditionId"])
for outcome, token in zip(outcomes, tokens):
print(f" {outcome}: {token}")
selected += 1
if selected == 5:
break
'Esperado: cinco perguntas. Cada uma mostra um hash de condição com 66 caracteres e um ID de token por resultado. As perguntas exatas mudam conforme o mercado ao vivo.
Etapa 2 — Confirmar negociações públicas de uma condição
Copie um ID de condição da saída:
export POLYMARKET_CONDITION_ID='0x...'
curl --fail --silent --show-error --get \
'https://data-api.polymarket.com/trades' \
--data-urlencode "market=$POLYMARKET_CONDITION_ID" \
--data-urlencode 'limit=3' \
| python3 -c '
import json, sys
for trade in json.load(sys.stdin):
print(trade["outcome"], trade["side"], trade["size"], "@", trade["price"])
'Uma resposta vazia é válida para um mercado parado. Escolha outra condição se quiser ver linhas de negociação imediatamente. Nenhuma autenticação é usada.
Etapa 3 — Entender a seleção do coletor
Na inicialização, o coletor repete a Etapa 1, seleciona cinco mercados, interpreta os arrays JSON
de resultados/tokens e armazena as duas linhas de resultado em polymarket.markets. Você não
codifica os IDs de token de hoje em .env.polymarket.
Concluído quando
- você conseguir identificar o ID da condição e os dois IDs de token de resultado de um mercado; e
- o comando de negociações públicas retornar JSON, mesmo que o array esteja vazio.
Próximo: criar o modelo de dados no ClickHouse.