SuperAPI AI 工具集

basket-claim

数据与分析

查看项目

更新于 10-15 11:26

技能介绍

用途

basket-claim 技能用于从已结算的 PolyBaskets 篮子中领取派彩,整个过程通过 vara-wallet 命令行工具完成。该技能明确要求:在结算最终确定之前不要使用。

前置设置

该技能仅适用于主网(MAINNET ONLY)。在执行任何操作之前,应先运行以下命令设置网络:

vara-wallet config set network mainnet

文档明确提示:绝对不要切换到 testnet,因为 testnet 上没有合约。

相关合约地址与变量配置如下:

BASKET_MARKET="0xea8373e8b4441ef6e95325c1044d23ebf615b43fdef60a48623836a15ca7a25a"
BET_LANE="0x35848dea0ab64f283497deaff93b12fe4d17649624b2cd5149f253ef372b29dc"
FREEBET_LEDGER="0x6b4ad81d13194f8e27f71f4046c6e489b2af2b0b1ce835f390899941034fd979"
_PB="${POLYBASKETS_SKILLS_DIR:-skills}"
IDL="$_PB/idl/polymarket-mirror.idl"
BET_LANE_IDL="$_PB/idl/bet_lane_client.idl"
FREEBET_LEDGER_IDL="$_PB/idl/freebet-ledger.idl"

预检查流程

1. 验证结算已最终确定

调用 GetSettlement 查询结算状态:

vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
  --args '[<basket_id>]' --idl $IDL

结果含义:

  • status: "Finalized" — 已可领取。
  • status: "Proposed" — 挑战窗口尚未结束,或尚无人执行最终确定。任何人都可以在 challenge_deadline 之后调用 FinalizeSettlement;在此之前需要等待。
  • 错误 SettlementNotFound — 尚未结算。

解析结算状态的示例:

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

先获取自己的十六进制地址(actor_id 参数不支持 SS58 格式):

MY_ADDR=$(vara-wallet balance | jq -r .address)

2. 验证持仓存在且未领取

# VARA lane
vara-wallet call $BASKET_MARKET BasketMarket/GetPositions \
  --args '["'$MY_ADDR'"]' --idl $IDL | jq '.result[] | select(.basket_id == <basket_id>)'

# native VARA freebet lane
vara-wallet call $BASKET_MARKET BasketMarket/GetFreebetPositions \
  --args '["'$MY_ADDR'"]' --idl $IDL | jq '.result[] | select(.basket_id == <basket_id>)'

# BET lane
vara-wallet call $BET_LANE BetLane/GetPosition \
  --args '["'$MY_ADDR'", <basket_id>]' --idl $BET_LANE_IDL

检查 claimed: false。

领取操作

VARA Lane

适用于 asset_kind: "Vara" 的篮子:

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

返回 u128,即派彩金额,单位为最小 VARA 单位(除以 10^12 得到 VARA)。

对于原生 VARA freebet 持仓,使用同样的 BasketMarket/Claim 方法。合约会将 freebet 本金退回 FreebetLedger,仅将超过原始投入的利润发送到用户钱包。

示例:

# Claim from basket 0
PAYOUT=$(vara-wallet --account agent call $BASKET_MARKET BasketMarket/Claim --voucher $VOUCHER_ID \
  --args '[0]' --idl $IDL)
echo "Payout: $PAYOUT"

BET Token Lane

适用于 asset_kind: "Bet" 的篮子:

vara-wallet --account agent call $BET_LANE BetLane/Claim --voucher $VOUCHER_ID \
  --args '[<basket_id>]' --idl $BET_LANE_IDL

返回 u256,即派彩金额,单位为 BET token 单位。

示例:

# Claim from basket 1 via BET lane
vara-wallet --account agent call $BET_LANE BetLane/Claim --voucher $VOUCHER_ID \
  --args '[1]' --idl $BET_LANE_IDL

派彩计算

公式为:

payout = shares * (settlement_index / entry_index)

payout_per_share 在提案期间已预先计算在 Settlement 结构体中。可以在领取前预览预期派彩:

# Get settlement payout_per_share
SETTLEMENT=$(vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
  --args '[<basket_id>]' --idl $IDL)
echo $SETTLEMENT | jq '.result.ok.payout_per_share'

详细公式与示例参见 ../references/index-math.md。

领取后验证

# Check position is now claimed
vara-wallet call $BASKET_MARKET BasketMarket/GetPositions \
  --args '["'$MY_ADDR'"]' --idl $IDL | jq '.result[] | select(.basket_id == <basket_id>) | .claimed'

# Check native freebet position is now claimed, when applicable
vara-wallet call $BASKET_MARKET BasketMarket/GetFreebetPositions \
  --args '["'$MY_ADDR'"]' --idl $IDL | jq '.result[] | select(.basket_id == <basket_id>) | .claimed'

# Check freebet principal was returned to ledger, when applicable
vara-wallet call $FREEBET_LEDGER FreebetLedger/BalanceOf \
  --args '["'$MY_ADDR'"]' --idl $FREEBET_LEDGER_IDL

# Check VARA balance increased
vara-wallet balance

常见错误

错误 原因 处理
SettlementNotFinalized 结算尚未最终确定 等待最终确定
AlreadyClaimed 该篮子已领取过 无需操作
NothingToClaim 在该篮子中没有持仓 验证持仓是否存在
SettlementNotFound 尚未提出结算 等待 settler 提出
TransferFailed VARA 转账失败 检查合约余额,重试