jpskill.com
🛠️ 開発・MCP コミュニティ

basket-settle

vara-walletを通じて、決済担当者(settler)がバスケット取引の提案や最終決定を行う必要がある場合に利用し、決済担当者権限がない場合は使用できない、専門的な業務を支援するSkill。

📜 元の英語説明(参考)

Use when the agent has the settler role and needs to propose or finalize a basket settlement via vara-wallet. Do not use without settler role permissions. Do not use for regular user actions.

🇯🇵 日本人クリエイター向け解説

一言でいうと

vara-walletを通じて、決済担当者(settler)がバスケット取引の提案や最終決定を行う必要がある場合に利用し、決済担当者権限がない場合は使用できない、専門的な業務を支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o basket-settle.zip https://jpskill.com/download/9666.zip && unzip -o basket-settle.zip && rm basket-settle.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9666.zip -OutFile "$d\basket-settle.zip"; Expand-Archive "$d\basket-settle.zip" -DestinationPath $d -Force; ri "$d\basket-settle.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して basket-settle.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → basket-settle フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Basket Settle

PolyBasketsのバスケットの決済を提案し、確定します。settlerロールが必要です。

セットアップ

メインネットのみ。 他の操作を行う前に、必ず vara-wallet config set network mainnet を実行してください。テストネットに切り替えないでください。契約が存在しません。

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

Settlerロールの確認

コントラクト設定で settler_role として割り当てられたアドレスのみが、決済メソッドを呼び出すことができます。

# settlerロールを持つユーザーを確認
vara-wallet call $BASKET_MARKET BasketMarket/GetConfig --args '[]' --idl $IDL | jq '.settler_role'

# エージェントのアドレスを確認
vara-wallet wallet list | jq -r '.[0].address'

あなたのアドレスが settler_role と一致しない場合、決済を行うことはできません。管理者に連絡してください。

決済フロー

1. バスケットがActiveであることを確認
2. すべてのアイテムがPolymarketで解決されていることを確認
3. ProposeSettlement → 12分間のチャレンジ期間を開始
4. challenge_deadline が経過するのを待つ
5. FinalizeSettlement → バスケットがSettledになり、ユーザーが請求できるようになる

ステップ 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 配列を作成します。バスケットアイテムごとに1つの ItemResolution を含めます。

{
  "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 はバスケットアイテムの slug と正確に一致する必要があります
  • poly_price_yes + poly_price_no は、最終的なPolymarket価格をbpsで反映する必要があります
  • 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 ステータスになり、12分間のチャレンジ期間が開始されます。

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

# チャレンジの締め切りを確認
vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
  --args '[<basket_id>]' --idl $IDL | jq '.result.ok | {status, challenge_deadline, proposed_at}'

challenge_deadline はブロックのタイムスタンプです。有効期間は liveness_ms で設定されます (デフォルトは720000ms = 12分)。

現在のブロックのタイムスタンプが 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}'

よくあるエラー

エラー 原因 解決策
Unauthorized settlerロールではない settler_roleアドレスの設定を確認してください
BasketNotActive バスケットがすでに決済中 ステータスを確認してください
SettlementAlreadyExists すでに提案済み 待って確定してください
InvalidResolutionCount 解決策の数が間違っている アイテムごとに1つ提供してください
ResolutionSlugMismatch Slug がバスケットアイテムと一致しない バスケットから正確な slug を使用してください
DuplicateResolutionIndex 同じ item_index が2回使用されている インデックスを一意にしてください
ResolutionIndexOutOfBounds インデックス >= アイテム数 0 から items.length-1 を使用してください
ChallengeDeadlineNotPassed 確定するには早すぎる チャレンジ期間を待ってください
SettlementNotProposed 提案が存在しない 最初に提案してください
SettlementNotFinalized 決済がまだ確定されていない チャレンジ期間後に FinalizeSettlement を呼び出してください
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Basket Settle

Propose and finalize settlement for PolyBaskets baskets. Requires the settler role.

Setup

MAINNET ONLY. Run vara-wallet config set network mainnet before anything else. NEVER switch to testnet — there are no contracts there.

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

Verify Settler Role

Only the address assigned as settler_role in the contract config can call settlement methods.

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

# Check agent's address
vara-wallet wallet list | jq -r '.[0].address'

If your address does not match settler_role, you cannot settle. Contact the admin.

Settlement Flow

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

Step 1: Check Basket Status

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

Must be "Active".

Step 2: Check Polymarket Resolution

For each item in the basket, check if the market has resolved on Polymarket:

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

All items must be resolved (closed: true) with final prices near 0 or 1.

Step 3: Propose Settlement

Build the item_resolutions array — one ItemResolution per basket item:

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

Rules:

  • Provide exactly one resolution per basket item
  • item_index is 0-based, must be unique, and within basket items range
  • poly_slug must match the basket item's slug exactly
  • poly_price_yes + poly_price_no should reflect final Polymarket prices in bps
  • resolved is the final outcome: "YES" or "NO"
  • poly_condition_id is optional

Example: Propose settlement for a 2-item basket

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

After proposal, the basket enters SettlementPending status and the 12-minute challenge window begins.

Step 4: Wait for Challenge Window

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

The challenge_deadline is a block timestamp. The liveness window is configured in liveness_ms (default 720000ms = 12 minutes).

Wait until the current block timestamp exceeds challenge_deadline.

Step 5: Finalize Settlement

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

After finalization:

  • Basket status becomes Settled
  • finalized_at is set
  • Users can now claim payouts via ../basket-claim/SKILL.md

Verify

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

Common Errors

Error Cause Fix
Unauthorized Not the settler role Check config for settler_role address
BasketNotActive Basket already in settlement Check status
SettlementAlreadyExists Already proposed Wait and finalize
InvalidResolutionCount Wrong number of resolutions Provide one per item
ResolutionSlugMismatch Slug doesn't match basket item Use exact slug from basket
DuplicateResolutionIndex Same item_index twice Make indices unique
ResolutionIndexOutOfBounds Index >= items count Use 0 to items.length-1
ChallengeDeadlineNotPassed Too early to finalize Wait for challenge window
SettlementNotProposed No proposal exists Propose first
SettlementNotFinalized Settlement not yet finalized Call FinalizeSettlement after challenge window