01 市場を見つける
公開されているアクティブな市場、アウトカム、コンディション ID、CLOB トークン ID を確認します。
macOS terminal: Run workshop commands in Terminal using zsh or bash.
開始条件
workshop_public/polymarket にいて、.env.polymarket を source 済みで、preflight が
準備完了になっています。
なぜ
Polymarket は市場ごとにコンディション ID を持ち、アウトカムごとに別のトークン ID を持ちます。 WebSocket はトークン ID で購読し、公開の取引 API はコンディション ID でフィルターします。
ステップ 1 — Gamma に最も活発なアクティブ市場を 5 件問い合わせる
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
'期待される結果: 5 件の質問。それぞれ 66 文字のコンディション ハッシュ 1 つと、アウトカムごとの トークン ID が 1 つ出力されます。実際の質問はライブ市場に応じて変わります。
ステップ 2 — 1 つのコンディションについて公開取引を確認する
出力からコンディション ID を 1 つコピーします:
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"])
'動きの少ない市場では空のレスポンスも正常です。すぐに取引の行を見たい場合は別のコンディションを 選んでください。認証は一切使いません。
ステップ 3 — collector の選定ロジックを理解する
collector は起動時にステップ 1 を繰り返し、市場を 5 件選び、JSON でエンコードされた
アウトカム/トークンの配列をパースして、両方のアウトカムの行を polymarket.markets に保存します。
その日のトークン ID を .env.polymarket にハードコードすることはありません。
完了条件
- 1 つの市場について、コンディション ID と両アウトカムのトークン ID を特定できる; および
- 公開取引のコマンドが、配列が空であっても JSON を返す。