web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
description の原文を見る
Polymarket integration for prediction market trading on Polygon. Covers authentication (L1 EIP-712, L2 HMAC-SHA256, builder headers), order placement (GTC/GTD/FOK/FAK, batch, post-only, heartbeat), market data (Gamma API, Data API, orderbook, subgraph), WebSocket streaming (market/user/sports channels), CTF operations (split, merge, redeem, negative risk), bridge (deposits, withdrawals, multi-chain), and gasless relayer transactions. Use when building AI agents, autonomous market makers, prediction market UIs, or any application integrating with Polymarket on Polygon.
SKILL.md 本文
Polymarket スキル
ソース: Polymarket/agent-skills の公式 Polymarket スキル。アップストリームと同期を保つ。下の「EloPhanto Setup」セクションはローカルです — その他すべてはアップストリームをミラーします。
EloPhanto Setup
トリガー: "polymarket"、"prediction market"、"place a bet"、"polygon"、"CLOB"、"trading bot for polymarket"。
1. 初回使用時に Python SDK をインストール
pip install py-clob-client-v2 # レガシー `py-clob-client` パッケージは 2026-05-11 以降新しい注文で order_version_mismatch を返すため、-v2 フォークを使用します
( через shell_execute 実行。デフォルトでは pyproject.toml には含まれません — このスキルが実際に使用される場合にのみインストールされます。)
2. ボルト内に認証情報を保存 (1 回限り)
vault_set polymarket_private_key VALUE # Polygon EOA 秘密鍵 (ファンディング wallet)
vault_set polymarket_funder_address VALUE # polymarket.com/settings からのプロキシ/safe アドレス (signature_type != 0 の場合のみ)
vault_set polymarket_signature_type 2 # 0=EOA、1=POLY_PROXY、2=GNOSIS_SAFE (最も一般的 = 2)
3. Python 内で vault_lookup を使用して認証情報を使用
from py_clob_client.client import ClobClient
pk = vault_lookup("polymarket_private_key")
funder = vault_lookup("polymarket_funder_address")
sig_type = int(vault_lookup("polymarket_signature_type") or "2")
temp = ClobClient("https://clob.polymarket.com", key=pk, chain_id=137)
creds = temp.create_or_derive_api_creds()
client = ClobClient(
"https://clob.polymarket.com",
key=pk, chain_id=137,
creds=creds,
signature_type=sig_type,
funder=funder,
)
3a. どの signature_type がコラテラルを保有しているかを自動検出
同じ polymarket_private_key は 複数のプロキシタイプ (EOA、POLY_PROXY、GNOSIS_SAFE) にわたってファンドを持つことができます。Polymarket の Web UI はあなたが切り替えられているウォレットを表示します; ユーザーは通常、1 つ (例: POLY_PROXY) にデポジットしますが、ボルト設定は別の (例: GNOSIS_SAFE) を指しています。結果: SDK は $0 USDC を報告し、注文は「残高不足」または、コーディングエラーのように見える理由で order_version_mismatch で失敗します。
セッションの最初の注文を配置する前に必ず 3 つすべてをプローブし、ファンドされているものを使用します:
from py_clob_client.client import ClobClient
from py_clob_client.clob_types import BalanceAllowanceParams, AssetType
best_sig_type = None
best_balance_usdc = 0.0
for sig_type in (0, 1, 2):
try:
c = ClobClient(
"https://clob.polymarket.com",
key=pk, chain_id=137,
signature_type=sig_type,
funder=funder,
)
c.set_api_creds(c.create_or_derive_api_creds())
bal = c.get_balance_allowance(
BalanceAllowanceParams(
asset_type=AssetType.COLLATERAL, signature_type=sig_type
)
)
usdc = int(bal.get("balance", 0)) / 1_000_000
print(f"sig_type={sig_type}: ${usdc:.2f} USDC")
if usdc > best_balance_usdc:
best_balance_usdc, best_sig_type = usdc, sig_type
except Exception as e:
print(f"sig_type={sig_type}: probe failed ({e!r})")
if best_sig_type is None or best_balance_usdc == 0:
raise SystemExit("No funded Polymarket wallet found for this key.")
# セッションの残りの部分にファンドされた sig_type を使用します。
client = ClobClient(
"https://clob.polymarket.com",
key=pk, chain_id=137,
signature_type=best_sig_type,
funder=funder,
)
client.set_api_creds(client.create_or_derive_api_creds())
検出された best_sig_type がボルト設定と異なる場合、ボルトを更新 して将来のセッションが再プローブを行わないようにします:
vault_set polymarket_signature_type <N>。
4. API 経由でのみ注文を配置します。ブラウザ経由では決してしません。
ハードルール: すべての Polymarket 注文配置は py-clob-client を通じて行う必要があります。決して polymarket.com をブラウザツールで駆動して取引を配置しないでください。Web UI は Privy/embedded-wallet フローを使用しており、ボルト内に保存されているファンダー wallet と互換性がありません — クリック誤りは実際の注文を配置し、エージェントは注文を提出する前に検証する方法がありません。SDK が失敗した場合、停止して正確なエラーを報告してください; GUI にフォールバックとして切り替えないでください。
5. tick_size と neg_risk を動的に検出 (ハードコードしない)
create_order は両方のオプションを必要とします。両方は市場ごとで、SDK / オンチェーン値は権威的です — 間違った tick_size (「0.01」対「0.001」) を推測すると、混乱したエラーで注文を拒否します。
# CLOB から直接フェッチ
tick_size = client.get_tick_size(token_id) # "0.001" / "0.01" / "0.1"
neg_risk = client.get_neg_risk(token_id) # bool
signed = client.create_order(
OrderArgs(token_id=token_id, price=price, size=size, side=BUY),
options={"tick_size": tick_size, "neg_risk": neg_risk}, # ← キーワード引数、dict
)
resp = client.post_order(signed, OrderType.GTC)
インストール済みの py-clob-client バージョンで get_neg_risk が利用できない場合、gamma-api 経由で市場メタデータから negRisk を読み取ります:
import requests
m = requests.get(
"https://gamma-api.polymarket.com/events",
params={"slug": EVENT_SLUG}, timeout=20,
).json()[0]["markets"]
neg_risk = next(mk for mk in m if mk["clobTokenIds"] and token_id in mk["clobTokenIds"])["negRisk"]
options パラメータはより新しい SDK バージョンで キーワードのみ です — 位置的に渡すと TypeError が発生します。常に options= を使用してください。
6. 必須の 取引前リスク ゲート (place_order の前に毎回これを実行)
エージェントのライブ取引履歴は、エッジ測定なしで中確率市場を買収し、終了がない連続的な損失を示していました。2 つのツールが制約を強制します; 取引エントリー注文を配置する前に両方がパスする必要があります。
ステップ A — ドローダウン サーキットブレーカー。 新しいポジションを開く前に:
breaker = polymarket_circuit_breaker(
peak_equity=<ローリング 30 日間高値 USD>,
current_equity=<現在のポートフォリオ USD>,
)
if breaker["paused"]:
# ドローダウン閾値 (デフォルト 20%) に達しました。新しいポジションを開かないでください。
# 既存のものを閉じることは許可されています。エクイティが回復するか、オペレータ が上書きするまで待ちます。
raise SystemExit(breaker["reason"])
ステップ B — 取引前ゲート。 各候補市場について:
gate = polymarket_pre_trade(
llm_prob=<YES の推定確率>,
market_price=<オーダーブックからの現在の YES 価格>,
confidence=<自己報告信頼度 0-1>,
market_tags=<Polymarket 親イベント タグ スラグのリスト>,
market_title=<市場質問テキスト>,
)
if not gate["allow_trade"]:
# blockers は理由をリストします: エッジが小さすぎる、スポーツ タグ、
# タイトル フレーズ ブロックリストのヒット、など。この市場をスキップします。
continue
stop_levels = gate["stop_loss"]
# stop_levels["stop_loss_price"] および ["take_profit_price"] は
# エントリーフィルで即座に配置する必要がある companion limit orders です。
ステップ C — エントリー注文を配置し、その直後に companion ストップロス + テイク プロフィット リミットを配置します。
⚠️ Polymarket のストップリミットは トリガー注文ではありません — これらは本に置かれている通常の制限注文です。「ストップロス」価格が現在のオーダーブック (例: 最高ビッドが 0.95 である場合に 0.94 で売却停止を設定) を超える場合、最高ビッドで即座に実行され、開いたばかりのポジションをすぐに閉じます。保護リミットを投稿する前に、現在のトップオブブックをフェッチし、ストップ価格が 外部 にあることを確認します (売却停止の場合は最高ビッドより下、買収停止の場合は最低アスクより上)。2026-05-11 レトロを参照してください: エージェントはストップリミットがブックを超えた後に偶然に 7.49 個の 7.5 シェア NO ポジションを売却した後、自分自身を旗立てました。
# 1. 市場またはあなたが選択した制限でのエントリー注文
entry_resp = client.create_and_post_order(OrderArgs(
token_id=token_id,
price=entry_price,
size=size,
side=BUY if gate["edge"]["side"] == "YES" else SELL,
))
# 2. ストップロス リミット (BUY エントリーの場合は売却側、SELL の場合は買収側)
client.create_and_post_order(OrderArgs(
token_id=token_id,
price=stop_levels["stop_loss_price"],
size=size,
side=SELL if gate["edge"]["side"] == "YES" else BUY,
))
# 3. テイク プロフィット リミット
client.create_and_post_order(OrderArgs(
token_id=token_id,
price=stop_levels["take_profit_price"],
size=size,
side=SELL if gate["edge"]["side"] == "YES" else BUY,
))
これが譲歩できない理由: ゲートのエッジ フィルタは、あなたの「洞察」が既に価格設定されている取引をブロックします (スプレッドは何も支払われません)。スキップタグ フィルタはスポーツ / エンターテイメント / 賞市場を除外します — LLM ベットがシャープに対してエッジを持たない純粋なノイズ。ストップロス + テイク プロフィット ペアはすべてのポジションでダウンサイドをキャップするため、単一の損失ポジションが P&L を支配することはできません。サーキットブレイカーは悪い週の後のティルト取引を停止します。
config.yaml の polymarket: セクション経由で調整可能 (エッジ閾値、停止 pct、ドローダウン閾値、スキップタグ上書き)。core/polymarket_engine.py で数学を参照してください。
6a. 必須の ドローダウン停止 + 所有者確認 (pre_trade に組み込み)
すべての呼び出しで peak_equity と current_equity を polymarket_pre_trade に渡します。ゲートはサーキットブレーカーをインラインで実行します: ドローダウン ≥ polymarket.drawdown_pause_pct (デフォルト 20%) の場合、allow_trade は drawdown_halt ブロッカーで false になります。既存ポジションの閉鎖は許可されたままです; 新しいエントリーのみがゲートされます。 新しいエントリーを再度有効にするには、ゲートの応答から正確な drawdown.reason でドローダウンを所有者に表示し、明示的なゴーアヘッドを取得してから、drawdown_acknowledged=true で再度呼び出します。現在のセッションでその明示的な所有者の会話なしに確認フラグを設定しないでください。
6b. 必須の 上昇側調整ルール (pre_trade に組み込み)
積極的なマンデートは 頻繁な機会による強いリターン です。95.6¢ → $1.00 のすり減りは最大 +4.6% 総額です — これは資本保全であり、エッジ狩りではありません。すべてのエントリーの前に最大総上昇を計算します:
- YES 側 価格
Pで:upside_pct = (1 - P) / P - NO 側 価格
Pで (オーダーブック上の YES 価格):upside_pct = P / (1 - P)
upside_pct を polymarket_pre_trade に渡します。ゲートは次の場合に拒否します (allow_trade=false、upside_misaligned ブロッカー):
upside_pct < 0.10かつcapital_preservation_ackが設定されていない → 取引を完全にスキップupside_pct < 0.20かつ 解決までの時間 > 14 日 → 低い利回り かつ遅い回転; ほぼ価値がない
あなたが登りたいと思っているアライメント ラダー:
| 上昇側 | 解決までの時間 | 判定 |
|---|---|---|
| ≥ 20% | any | マンデートに整列 — 通常 Kelly サイジング |
| 10–20% | < 14 日 | 境界 — 小さく開く (~3% バンクロール)、n_resolved データで防御する必要があります |
| < 10% | any | 資本保全のみ — capital_preservation_ack=true を渡す かつ ポジションを <2% バンクロールに制限、または スキップ |
これはエージェント自身のルール、2026-05-11 キャッシュ駐車ベットレトロから導出されます: 「明確に価格設定されていない近期イベントを 20%+ の上昇側で狩ります、または賭けない。」 ここに永続的なゲートとして符号化されており、一度限りのレッスンではなく。
7. 必須の 精度量子化 (create_and_post_order の前に毎回これを実行)
Polymarket は、price × size (USDC 建値) が 2 を超える小数を持つ注文を拒否します。ライブ取引履歴は 8 つの失敗した注文のうち 6 つ がこの正確なルールに当たったことを示しました:
「無効な金額、市場買い注文メーカー金額は最大 2 小数の精度をサポートし、テイカー金額は最大 5 小数」
静かに拒否された具体的な例:
| 望まれた価格 × サイズ | 計算された建値 | 結果 |
|---|---|---|
0.35 × 42.85 | 14.9975 USDC | 拒否 (4 小数) |
0.95 × 10.5 | 9.975 USDC | 拒否 (3 小数) |
0.28 × 517.2413 | 144.83... USDC | 拒否 (多くの小数) |
すべての注文の前に精度グリッドにスナップするために polymarket_quantize_order を使用します:
quantized = polymarket_quantize_order(
price=0.35,
desired_size=42.85,
side="BUY",
)
# quantized -> {price: 0.35, size: 42.82857, notional_usdc: 14.99, side: "BUY",
# rationale: "desired notional 14.9975 → snapped 14.99 USDC ..."}
# その後、スナップされたサイズで配置:
client.create_and_post_order(OrderArgs(
token_id=token_id,
price=quantized["price"],
size=quantized["size"],
side=BUY,
))
ツールは常に丸め下げます — あなたのポジションは決してあなたが要求したものより大きくありません; 最多で小数シェア小さいです。取引前ゲート (§6) およびストラテジー スコアラー (§8) と組み合わせて、これは精度エラー損失リークを閉じます。
8. セーフ複利戦略 (NO 側ベースライン)
取引前ゲート (§6) は必須ですが中立です — あなたの戦略が提案する取引をチェックします。実行してきた方向 LLM ボットは低エッジの中確率ベットを見つけて P&L を出血させる傾向があります。セーフ複利を並列で実行する構造的に有利な姉妹戦略として追加します。
洞察: 最低 NO アスクが既に > $0.80 (高確率 NO 勝利)、時間減衰増幅 NO 確率がライブアスクを ≥ 3% 上回る、Kelly サイジングが正の分数を返す市場で NO に取引します。メイカー注文を最低 NO アスクの 1¢ 内に配置 — テイカー手数料を支払う代わりに本に座ってリベートを稼ぎます。
candidate = polymarket_safe_compounder(
yes_last_price=0.05, # YES は 5¢ で取引 → 強い NO シグナル
lowest_no_ask=0.92, # NO アスク 92¢ — 高信頼度 NO 勝利
volume=350.0, # この市場の 24h USDC ボリューム
days_to_expiry=12.0, # ~12 日で解決
portfolio_value=500.0, # Polymarket ポートフォリオの総額 USDC
)
if not candidate["qualifies"]:
# 理由は制約が失敗したものをリストします (低ボリューム、エッジなし、
# サブ半日有効期限、オフバンド価格、など)。この市場をスキップします。
continue
# その後、ユニバーサル取引前ゲートも実行:
gate = polymarket_pre_trade(
llm_prob=candidate["estimated_no_prob"],
market_price=candidate["suggested_limit_price"],
confidence=0.75, # セーフ複利は構造的に高信頼度
market_tags=market_tags,
market_title=market_title,
)
if not gate["allow_trade"]:
continue
# サイズを精度グリッドにスナップ:
quantized = polymarket_quantize_order(
price=candidate["suggested_limit_price"],
desired_size=candidate["suggested_size_usdc"] / candidate["suggested_limit_price"],
side="BUY", # NO トークンを買うこと = NO トークン側での BUY
)
# NO トークン側で最低 NO アスク - 1¢ でメイカー制限注文を配置
client.create_and_post_order(OrderArgs(
token_id=no_token_id,
price=quantized["price"],
size=quantized["size"],
side=BUY,
))
# その後、§6 (ステップ C) ごとにストップロス + テイク プロフィットを即座に配置します。
これは 魔法の利益マシンではありません。 これは方向性のあるベット並びの低分散ベースラインで、メイカー手数料と高確実市場からの構造的エッジがあります。LLM 方向性ボット姉妹として使用 — 異なるリスク プロフィール、異なるペース、リソース型スケジューラー経由で並列で両方実行。
core/polymarket_engine.py からのデフォルト (必要な場合は PolymarketConfig 経由で将来オペレータ調整可能): min_no_ask=0.80、min_edge=0.03、min_volume=$10、days_to_expiry=[0.5, 60]、max_position_pct=10% (半 Kelly キャップ)、maker_offset=$0.01。
8a. 必須の キャリブレーション監査ログ (取引前ゲート後、create_and_post_order の前に実行)
リスク ゲート (§6) は取引すべきかどうかを伝えます。キャリブレーション監査は 取引が価値があるかどうか を伝えます — LLM の設定確率 対 実現勝率および対 エントリー価格を バケット化。これなしに、ボットが正しい理由でお金を稼いでいるか、単に運が良いかを伝えることはできません。
3 つのツール、1 つのフィードバック ループ。以下の 3 つのステップはすべて必須で、実際のエントリーを配置する前にこの正確な順序で:
ステップ 1 — 最初にキャリブレーションを読む。 入ることを決める前に polymarket_calibration を呼び出します。レポートはボット の「高信頼度」クレームが実際の解決によってキャリブレーションされたかどうかを伝えます。以下のいずれかが真である場合は取引をスキップします:
brier_score > 0.25オーバーn_resolved ≥ 30— ボットは現実と相関なし、所有者にフラグを立てます。by_confidence_band[band].calibration_gap < -0.10オーバー n ≥ 30 (そのバンドで) — そのバンドのエッジ閾値はあまりにもしばしば。polymarket.<band>_confidence_edgeをconfig.yamlでより厳しくしてから、そのバンドでより多く賭けます。n_resolved < 10— 戦略を防御するのに十分な解決データがありません。ポジションを小さく保つか (<2% バンクロール)、データが蓄積するまで待ちます。
ステップ 2 — polymarket_safe_compounder を呼び出して Kelly 分数を計算、方向性ボットを実行している場合でも。Kelly 分数はサイジング戦略の署名; 後でキャリブレーション監査が 「サイジングは価値があったか?」 に答えることができるように log_prediction にスレッド化する必要があります。セーフ複利が取引を完全に辞退した場合、それはシグナル — 論理を再検討します。
ステップ 3 — polymarket_log_prediction を呼び出す 取引前ゲートがパスした後 (§6a/§6b から必要な drawdown + upside ack を使用) かつ client.create_and_post_order の前に。渡す:
token_id、side(YES/NO)、entry_price、sizellm_prob— YES が勝つあなたの確率 (常に YES フレーム; 監査は内部的に再フレーム化)confidence_band—polymarket_pre_tradeに供給したのと同じ値kelly_fraction— ステップ 2 でpolymarket_safe_compounderが返した値。 ツールはこれが非自明なサイズで ゼロ/不足のときに警告します; その警告を FYI ではなく今すぐ修正の問題として扱います。order_type(post-only/GTC/FOK/ など)、market_slug、1 行のrationale
polymarket_resolve_pending は Polymarket Gamma API をフェッチして、解決された市場の settle_price + outcome + realized_pnl を更新します。最速解決市場タイプに合うペースでスケジュール: 15 分暗号 Up/Down 市場ごと 5 分、毎時ニュース バイナリごと 1 時間、毎週市場ごと 6 時間。最速ペースでの 1 つの cron は結構です — ツールのスラッグごとキャッシュは Gamma 呼び出しをデデュープするため、100 の保留市場を 5 分ごとに確認することは実行ごと 100 の一意 HTTP リクエストのみです (ゆるく Gamma レート制限内)。オペレータ側; エージェントは通常直接呼び出しません。
# 例: ゲートがパスした直後に予測をログ。
log_result = polymarket_log_prediction(
token_id=order_args["token_id"],
side=order_args["side"],
entry_price=order_args["price"],
size=order_args["size"],
llm_prob=my_yes_prob,
confidence_band=gate_input["confidence_band"],
kelly_fraction=gate["sizing"]["kelly_fraction"],
order_type=order_args.get("order_type", "GTC"),
market_slug=market["slug"],
rationale=one_line_thesis,
)
# その後、実際の注文を配置します。
client.create_and_post_order(...)
8c. 高速キャリブレーション用のシャドウ予測
§8a の「n_resolved < 10 の場合は取引をスキップ」ルールのブロッカーはサンプル サイズです。実際のベットは遅く蓄積: ゲートはほとんどの市場をフィルタリングし、解決には日数から週単位がかかります。シャドウ予測 はゼロ資本リスク付きペーパー ベット — 他の予測と同様に Gamma 経由で自動解決されるログ確率推定。バンクロールを燃やさずに日数で月数ではなく n_resolved を増やします。
ワークフロー (通常スケジュールされたタスクから実行):
polymarket_shadow_candidatesを呼び出してエージェントがまだシャドウ予測していない今後の市場をリストします。デフォルトは 14 日以内に閉じられて非自明ボリュームを持つ最大 10 市場を返します。- 1 つを選びます。通常の研究パス (ニュース、前ベースレート、関連市場 — 実際のエントリー候補で実行するのと同じプロセス) を通じて確率推定を形成します。
live=falseでpolymarket_log_predictionを呼び出し、加えて標準token_id/side/entry_price/llm_prob/market_slug/rationale。sizeはシャドウで必要ではありません; 省略するか 0 を渡します。Kelly 警告は抑制されます。- その他何も。
polymarket_resolve_pendingはシャドウ行をライブと同じ方法で解決 — 同じ Gamma フェッチ、同じsettle_price/outcomeライト バック。
polymarket_calibration を読む場合:
- デフォルト (
kind="all") はブレンド統計加えてby_kind分解を示すため、ライブ対シャドウを個別にスポット チェック。 - 実際のエッジに関する主張をしてから前に
kind="live"を渡す — シャドウは実際のお金の動作で信頼を膨らませるべきではありません。 - LLM の純粋確率推定がゲートのフィルタリングと独立に、どのようにキャリブレーションされるかを読むために
kind="shadow"を渡します。
推奨ペース: */30m または時間の cron、task_goal で 「polymarket_shadow_candidates を呼び出し、あなたが知らされた見方を持つ最高信念市場を選び、シャドウ予測をログ」 のような。自然にキャップ — エージェントがすべての興味深い今後の市場をシャドウしたら、候補は新しいものが表示されるまで空のリストを返します。
9. パフォーマンス検査 (オペレータ側、エージェントのためのオプション)
オペレータは取引履歴を以下で検査します:
elophanto polymarket performance # 全時間 + 30d + 7d 並べて
elophanto polymarket performance --window 7d # 先週のみ
elophanto polymarket performance --positions # ポジション テーブルを追加
elophanto polymarket performance --failures-only # エラー分解のみ
出力は 開いているポジションがゼロで解決すると仮定 P&L (保守的な正直な読み) で始まり、実現対未実現を分解します。オペレータは未だに価値があるなら特定のポジションをマークアップします。
同じデータはエージェント経由で polymarket_performance 経由で公開されており、明示的に求められたときの即興読み (「Polymarket でどうしていますか?」) 用。すべての取引の前に必須ではありません — ユニバーサル リスク ゲート (§6、§7) は既に制約を強制; オーダー前に分析を呼び出すと、動作の変更なしトークン コスト リスクがあります。
10. その他のセーフティ レール
- 実際のお金の注文を配置する前に常に所有者と確認します。 取引実行を
DESTRUCTIVEパーミッション レベルとして扱う — オーダー パラメータ (トークン、側、価格、サイズ、USDC コスト) をサーフェス化し、明示的な承認を待ちます。 - 読み取り専用オペレーション (オーダーブック、市場データ、ポジション) は承認を必要としません。
- Polymarket 取引 Polygon の USDC.e。ファンダー wallet に USDC.e と少量の POL があることを確認してガス用 (ただし
signature_type=0の場合のみ; Gnosis Safe 経由のガスレスは POL を必要としません)。 残高/許可不足失敗 — 8 つの歴史的失敗のうち 2 つがこれに当たった。2 つの理由: (a) wallet/プロキシ不一致 — §3asignature_type がコラテラルを保有する かを自動検出を再実行し、実際にファンドを保持している sig_type を使用; (b) USDC 許可が Polymarket コントラクト上で設定されない — オペレータはpython scripts/set_allowances.pyを wallet ごと 1 回実行 (スクリプトはpy-clob-client例に付属)。polymarket_private_keyをログまたはエコーしません。
このスキルを使用する場合
ユーザーが以下について尋ねるか構築する必要がある場合、このスキルを使用します:
- Polymarket API 認証 (L1/L2、API キー、HMAC 署名)
- 注文の配置または管理 (制限、市場、GTC、GTD、FOK、FAK、バッチ、キャンセル)
- オーダーブック データ読み取り (価格、スプレッド、中値、デプス)
- 市場データ フェッチ (イベント、市場、スラッグ別、タグ別、ページネーション)
- WebSocket サブスクリプション (マーケット チャネル、ユーザー チャネル、スポーツ)
- CTF オペレーション (分割、マージ、リディーム ポジション)
- ネガティブ リスク市場 (マルチ結果、変換、拡張ネガティブ リスク)
- ブリッジ オペレーション (デポジット、ウィズドローアル、マルチチェーン)
- ガスレス トランザクション (リレイヤー クライアント、注文属性)
- ビルダー プログラム統合 (注文属性、API キー、層)
- Polymarket SDK 使用 (TypeScript @polymarket/clob-client、Python py-clob-client)
API 設定
| API | ベース URL | 認証 | 目的 |
|---|---|---|---|
| CLOB | https://clob.polymarket.com | 取引エンドポイント用 L2 | オーダーブック、価格、注文提出 |
| Gamma / Data | https://gamma-api.polymarket.com | なし | イベント、市場、検索 |
| Data API | https://data-api.polymarket.com | なし | 取引、ポジション、ユーザー データ |
| WebSocket (マーケット) | wss://ws-subscriptions-clob.polymarket.com/ws/market | なし | リアルタイム オーダーブック |
| WebSocket (ユーザー) | wss://ws-subscriptions-clob.polymarket.com/ws/user | メッセージの API 認証 | 取引/注文更新 |
| WebSocket (スポーツ) | wss://sports-api.polymarket.com/ws | なし | ライブ スコア |
| リレイヤー | https://relayer-v2.polymarket.com/ | ビルダー ヘッダー | ガスレス トランザクション |
| ブリッジ | https://bridge.polymarket.com | なし | デポジット/ウィズドローアル |
コントラクト アドレス (Polygon)
| コントラクト | アドレス |
|---|---|
| USDC (USDC.e) | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 |
| CTF (条件付きトークン) | 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 |
| CTF エクスチェンジ | 0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E |
| ネガティブ リスク CTF エクスチェンジ | 0xC5d563A36AE78145C45a50134d48A1215220f80a |
| ネガティブ リスク アダプター | 0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296 |
クライアント セットアップ
TypeScript
import { ClobClient, Side, OrderType } from "@polymarket/clob-client";
import { Wallet } from "ethers"; // v5.8.0
const HOST = "https://clob.polymarket.com";
const CHAIN_ID = 137;
const signer = new Wallet(process.env.PRIVATE_KEY);
// ステップ 1: L1 — API 認証情報を導出
const tempClient = new ClobClient(HOST, CHAIN_ID, signer);
const apiCreds = await tempClient.createOrDeriveApiKey();
// ステップ 2: L2 — 取引クライアントを初期化
const client = new ClobClient(
HOST,
CHAIN_ID,
signer,
apiCreds,
2, // signatureType: 0=EOA、1=POLY_PROXY、2=GNOSIS_SAFE
"FUNDER_ADDRESS" // polymarket.com/settings からのプロキシ wallet アドレス
);
Python
from py_clob_client.client import ClobClient
import os
host = "https://clob.polymarket.com"
chain_id = 137
pk = os.getenv("PRIVATE_KEY")
# ステップ 1: L1 — API 認証情報を導出
temp_client = ClobClient(host, key=pk, chain_id=chain_id)
api_creds = temp_client.create_or_derive_api_creds()
# ステップ 2: L2 — 取引クライアントを初期化
client = ClobClient(
host,
key=pk,
chain_id=chain_id,
creds=api_creds,
signature_type=2, # 0=EOA、1=POLY_PROXY、2=GNOSIS_SAFE
funder="FUNDER_ADDRESS",
)
クイック リファレンス: 注文タイプ
| タイプ | 動作 | ユース ケース |
|---|---|---|
| GTC | フィル または キャンセルまで本に置かれたまま | デフォルト 制限注文 |
| GTD | 有効期限まで有効 (UTC 秒)。最小 = now + 60 + N | イベント前に自動有効期限 |
| FOK | 完全にすぐフィル または キャンセル | すべてまたはなし市場注文 |
| FAK | 利用可能なものをフィル、残りをキャンセル | 部分フィル 市場注文 |
- FOK/FAK BUY:
amount= 使用するドル金額 - FOK/FAK SELL:
amount= 売却するシェア数 - ポスト オンリー: GTC/GTD のみ — スプレッド交差時に拒否
クイック リファレンス: 署名タイプ
| タイプ | 値 | 説明 |
|---|---|---|
| EOA | 0 | 標準 Ethereum wallet (MetaMask)。ファンダーは EOA アドレスで、ガス用に POL が必要。 |
| POLY_PROXY | 1 | Magic Link メール/Google ユーザー向けカスタム プロキシ wallet (Polymarket.com から PK をエクスポート)。 |
| GNOSIS_SAFE | 2 | Gnosis Safe マルチシグ プロキシ wallet (最も一般的)。任意の新規または返却ユーザーに使用します。 |
コア パターン: 注文を配置
TypeScript
const response = await client.createAndPostOrder(
{
tokenID: "TOKEN_ID",
price: 0.50,
size: 10,
side: Side.BUY,
},
{
tickSize: "0.01", // client.getTickSize(tokenID) または マーケット オブジェクトから
negRisk: false, // client.getNegRisk(tokenID) または マーケット オブジェクトから
},
OrderType.GTC
);
console.log(response.orderID, response.status);
Python
from py_clob_client.clob_types import OrderArgs, OrderType
from py_clob_client.order_builder.constants import BUY
response = client.create_and_post_order(
OrderArgs(token_id="TOKEN_ID", price=0.50, size=10, side=BUY),
options={"tick_size": "0.01", "neg_risk": False},
order_type=OrderType.GTC,
)
print(response["orderID"], response["status"])
コア パターン: オーダーブックを読む
TypeScript
// 認証不要
const readClient = new ClobClient("https://clob.polymarket.com", 137);
const book = await readClient.getOrderBook("TOKEN_ID");
console.log("Best bid:", book.bids[0], "Best ask:", book.asks[0]);
const mid = await readClient.getMidpoint("TOKEN_ID");
const spread = await readClient.getSpread("TOKEN_ID");
Python
read_client = ClobClient("https://clob.polymarket.com", chain_id=137)
book = read_client.get_order_book("TOKEN_ID")
mid = read_client.get_midpoint("TOKEN_ID")
spread = read_client.get_spread("TOKEN_ID")
コア パターン: WebSocket サブスクライブ
const ws = new WebSocket("wss://ws-subscriptions-clob.polymarket.com/ws/market");
ws.onopen = () => {
ws.send(JSON.stringify({
type: "market",
assets_ids: ["TOKEN_ID"],
custom_feature_enabled: true,
}));
// 生きておくために 10s ごと PING を送信
setInterval(() => ws.send("PING"), 10_000);
};
ws.onmessage = (event) => {
if (event.data === "PONG") return;
const msg = JSON.parse(event.data);
// msg.event_type: "book" | "price_change" | "last_trade_price" | "tick_size_change" | "best_bid_ask" | "new_market" | "market_resolved"
};
参照ファイル (オンデマンド読み込み)
特定のトピックについてのより詳細が必要な場合のみこれらを読む:
- 認証 (L1/L2、ビルダー ヘッダー、認証情報ライフサイクル):
authentication.md - 注文パターン (GTC/GTD/FOK/FAK、ティック サイズ、キャンセル、ハートビート、エラー):
order-patterns.md - 市場データ (Gamma API、Data API、CLOB オーダーブック、サブグラフ):
market-data.md - WebSocket (マーケット/ユーザー/スポーツ チャネル、サブスクライブ、ハートビート):
websocket.md - CTF オペレーション (分割、マージ、リディーム、ネガティブ リスク、トークン ID):
ctf-operations.md - ブリッジ (デポジット、ウィズドローアル、サポート チェーン/トークン、ステータス):
bridge.md - ガスレス トランザクション (リレイヤー クライアント、wallet デプロイ、ビルダー セットアップ):
gasless.md
検証
- リアル RPC/SDK 呼び出しが発行され (メインネット、devnet、またはローカル バリデータ)、レスポンス ペイロードがトランスクリプトに記録されており、単なるパラフレーズではありません
- すべてのトランザクションは署名/送信ステップの前にシミュレートされ (
simulateTransactionまたは同等); シミュレーション ログが添付されています - 署名/送信されたトランザクションについて、結果の署名が記録され、チェーンで確認されています (
getSignatureStatusesの返却ステータスまたはエクスプローラー URL) - スリッページ、プライオリティ手数料、およびコンピュート ユニット制限は明示的にコンクリート数値で設定され、ライブラリ デフォルトに左右されません
- 実行で使用されたアカウント アドレス、ミント、およびプログラム ID はターゲット クラスタ (メインネット/devnet ミックスアップなし) の文書化された web3-polymarket アドレスに一致します
- 失敗パスは少なくとも 1 回実行され (残高不足、古いオラクル、有効期限切れ ブロックハッシュ、など)、エージェントのエラー処理は人間が読める可能メッセージを生成しました
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- elophanto
- リポジトリ
- elophanto/EloPhanto
- ライセンス
- Apache-2.0
- 最終更新
- 2026/5/11
Source: https://github.com/elophanto/EloPhanto / ライセンス: Apache-2.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。
blockchain-developer-v2
ブロックチェーン開発者向けワークフロースキル。本番環境対応のWeb3アプリケーション、スマートコントラクト、分散システムの構築が必要な場合に使用します。DeFiプロトコル、NFTプラットフォーム、DAO、エンタープライズブロックチェーン統合の実装に対応します。マージや引き継ぎの前に、オペレーターは上流のワークフロー、コピーされたサポートファイル、および来歴情報を保持する必要があります。