mcpField
B
basket-settle

basket-settle

github.com/adityaakrその他223 回インストール
リポジトリ

basket-settle について

basket-settleは、Vara Network上のPolyBasketsのバスケットを決済するスキルです。市場結果の確認から提案、チャレンジ期間後の確定まで、決済担当者の手順を案内します。

主な機能

  1. 01バスケット状態とPolymarketの結果確認
  2. 02各項目の結果を含む決済提案
  3. 03チャレンジ期限の確認
  4. 04保留中の決済の確定
  5. 05支払額と確定状態の検証

活用シーン

  1. 01全市場の確定後にバスケットを決済
  2. 02チャレンジ期間後に既存提案を確定
  3. 03権限や結果データのエラー調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/adityaakr/polybaskets --skill basket-settle

インストール後、Claude Code で/basket-settleを入力して読み込まれたか確認します。

詳細

Basket Settle

PolyBaskets のバスケットの決済を提案し、確定します。ProposeSettlement には settler ロールが必要です。FinalizeSettlement には settler ロールは必要ありませんが、チャレンジ期限を過ぎた後にのみ実行できます。

セットアップ

メインネットのみです。 何よりも先に vara-wallet config set network mainnet を実行してください。テストネットにはコントラクトが存在しないため、絶対に切り替えないでください。

vara-wallet config set network mainnet
BASKET_MARKET="0xea8373e8b4441ef6e95325c1044d23ebf615b43fdef60a48623836a15ca7a25a"
_PB="${POLYBASKETS_SKILLS_DIR:-skills}"
IDL="$_PB/idl/polymarket-mirror.idl"

Settler ロールを確認する

コントラクト設定で settler_role に割り当てられたアドレスのみが ProposeSettlement を呼び出せます。

# Check who has settler role
vara-wallet call $BASKET_MARKET BasketMarket/GetConfig --args '[]' --idl $IDL | jq -r '.result.settler_role'

# Check agent's hex actor id
MY_ADDR=$(vara-wallet balance --account agent | jq -r .address)
echo "$MY_ADDR"

お使いのアドレスが settler_role と一致しない場合、新しい決済を提案できません。ただし、challenge_deadline の経過後であれば、提案済みの決済を確定できます。

決済フロー

1. Check basket is Active
2. Verify all items have resolved on Polymarket
3. ProposeSettlement → starts the configured challenge window
4. Wait for challenge_deadline to pass
5. FinalizeSettlement → basket becomes Settled, users can claim

ステップ 1:バスケットのステータスを確認する

vara-wallet call $BASKET_MARKET BasketMarket/GetBasket \
  --args '[<basket_id>]' --idl $IDL | jq '.result.ok.status'

"Active" である必要があります。

ステップ 2:Polymarket の結果を確認する

バスケット内の各アイテムについて、Polymarket で市場が確定済みかどうかを確認します。

curl -s "https://gamma-api.polymarket.com/markets?slug=<poly_slug>" | jq '.[0] | {closed, outcomePrices}'

すべてのアイテムが確定済み(closed: true)で、最終価格が 0 または 1 に近い必要があります。

ステップ 3:決済を提案する

item_resolutions 配列を作成します。バスケット内のアイテムごとに ItemResolution を 1 つ指定します。

{
  "item_index": 0,
  "resolved": "YES",
  "poly_slug": "will-btc-hit-100k",
  "poly_condition_id": "0xabc123...",
  "poly_price_yes": 9900,
  "poly_price_no": 100
}

ルール:

  • バスケット内の各アイテムにつき、解決情報を必ず 1 つ指定します
  • item_index は 0 始まりで、一意であり、バスケット内のアイテム数の範囲内である必要があります
  • poly_slug はバスケットアイテムのスラッグと完全に一致する必要があります
  • poly_price_yes + poly_price_no には、bps 単位の Polymarket 最終価格を反映します
  • resolved は最終結果で、"YES" または "NO" を指定します
  • poly_condition_id は省略可能です
例:2 アイテムのバスケットの決済を提案する
vara-wallet --account agent call $BASKET_MARKET BasketMarket/ProposeSettlement --voucher $VOUCHER_ID \
  --args '[
    0,
    [
      {
        "item_index": 0,
        "resolved": "YES",
        "poly_slug": "will-btc-hit-100k",
        "poly_condition_id": null,
        "poly_price_yes": 9900,
        "poly_price_no": 100
      },
      {
        "item_index": 1,
        "resolved": "NO",
        "poly_slug": "will-eth-hit-5k",
        "poly_condition_id": null,
        "poly_price_yes": 200,
        "poly_price_no": 9800
      }
    ],
    "Resolved via Polymarket API"
  ]' \
  --idl $IDL

提案後、バスケットのステータスは SettlementPending になり、設定済みのチャレンジ期間が始まります。

ステップ 4:チャレンジ期間を待つ

# Check challenge deadline
vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
  --args '[<basket_id>]' --idl $IDL | jq '.result.ok | {status, challenge_deadline, proposed_at}'

challenge_deadline はブロックのタイムスタンプです。ライブネス期間は BasketMarket/GetConfig.liveness_ms で設定されているため、期間をハードコードしないでください。

現在のブロックのタイムスタンプが challenge_deadline を超えるまで待ちます。

ステップ 5:決済を確定する

vara-wallet --account agent call $BASKET_MARKET BasketMarket/FinalizeSettlement --voucher $VOUCHER_ID \
  --args '[<basket_id>]' --idl $IDL

確定後:

  • バスケットのステータスは Settled になります
  • finalized_at が設定されます
  • ユーザーは ../basket-claim/SKILL.md を使って払い戻しを請求できるようになります

確認

vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
  --args '[<basket_id>]' --idl $IDL | jq '.result.ok | {status, payout_per_share, finalized_at}'

よくあるエラー

エラー原因対処方法
UnauthorizedProposeSettlement に必要な settler ロールがありません設定で settler_role のアドレスを確認してください
BasketNotActiveバスケットはすでに決済処理中ですステータスを確認してください
SettlementAlreadyExistsすでに提案されています待ってから確定してください
InvalidResolutionCount解決情報の数が正しくありませんアイテムごとに 1 つ指定してください
ResolutionSlugMismatchスラッグがバスケットアイテムと一致しませんバスケットに記載されたスラッグをそのまま使用してください
DuplicateResolutionIndex同じ item_index が 2 回指定されていますインデックスを一意にしてください
ResolutionIndexOutOfBoundsインデックスがアイテム数以上です0 から items.length-1 までの値を使用してください
ChallengeDeadlineNotPassed確定するには時期が早すぎますチャレンジ期間が過ぎるまで待ってください
SettlementNotProposed提案がありません先に提案してください

コメント