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确认已加载。

详细介绍

篮子结算

为 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:

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

规则:

  • 每个篮子项目必须且只能提供一个结算结果
  • item_index 从 0 开始,必须唯一,且在篮子项目索引范围内
  • poly_slug 必须与篮子项目的 slug 完全匹配
  • poly_price_yes + poly_price_no 应反映 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}'

常见错误

错误原因修复方法
Unauthorized调用 ProposeSettlement 的地址不是 settler 角色在配置中检查 settler_role 地址
BasketNotActive篮子已进入结算流程检查状态
SettlementAlreadyExists已提议结算等待后完成结算
InvalidResolutionCount结算结果数量不正确每个项目提供一个结算结果
ResolutionSlugMismatchslug 与篮子项目不匹配使用篮子中的确切 slug
DuplicateResolutionIndex同一个 item_index 出现两次确保索引唯一
ResolutionIndexOutOfBounds索引 >= 项目数量使用 0 到 items.length-1 之间的索引
ChallengeDeadlineNotPassed完成结算的时间过早等待挑战期结束
SettlementNotProposed不存在结算提议先提议结算

评论

支持 Markdown