用途
basket-query 用于让智能体从链上合约读取篮子(basket)相关状态。所有查询都是只读且免费的,不需要 --account。
前置设置
仅支持主网(MAINNET ONLY)。在做任何操作之前,先运行 vara-wallet config set network mainnet。绝不能切换到测试网——测试网上没有合约。
设置网络与变量(参见 ../references/program-ids.md):
vara-wallet config set network mainnet
BASKET_MARKET="0xea8373e8b4441ef6e95325c1044d23ebf615b43fdef60a48623836a15ca7a25a"
BET_TOKEN="0x186f6cda18fea13d9fc5969eec5a379220d6726f64c1d5f4b346e89271f917bc"
BET_LANE="0x35848dea0ab64f283497deaff93b12fe4d17649624b2cd5149f253ef372b29dc"
FREEBET_LEDGER="0x6b4ad81d13194f8e27f71f4046c6e489b2af2b0b1ce835f390899941034fd979"
_PB="${POLYBASKETS_SKILLS_DIR:-skills}"
IDL="$_PB/idl/polymarket-mirror.idl"
BET_TOKEN_IDL="$_PB/idl/bet_token_client.idl"
BET_LANE_IDL="$_PB/idl/bet_lane_client.idl"
FREEBET_LEDGER_IDL="$_PB/idl/freebet-ledger.idl"
获取十六进制地址
Sails actor_id 参数要求十六进制格式——SS58 地址不可用:
MY_ADDR=$(vara-wallet balance | jq -r .address)
echo $MY_ADDR # 0xe008...
BasketMarket 查询
获取篮子数量
vara-wallet call $BASKET_MARKET BasketMarket/GetBasketCount --args '[]' --idl $IDL
返回 u64——已创建的篮子总数。篮子 ID 从 0 开始索引。
获取某个篮子
vara-wallet call $BASKET_MARKET BasketMarket/GetBasket --args '[0]' --idl $IDL
响应嵌套在 .result.ok 下。用 jq 解析:
# ⚠ 使用 .result.ok —— 不是 .ok!
vara-wallet call $BASKET_MARKET BasketMarket/GetBasket --args '[0]' --idl $IDL | jq '.result.ok'
篮子字段:id、creator、name、description、items(BasketItem 数组)、created_at、status(Active/SettlementPending/Settled)、asset_kind(Vara/Bet)。
获取用户持仓
vara-wallet call $BASKET_MARKET BasketMarket/GetPositions \
--args '["'$MY_ADDR'"]' --idl $IDL
返回 vec Position。每个持仓包含:basket_id、user、shares、claimed、index_at_creation_bps。
获取原生 freebet 持仓
vara-wallet call $BASKET_MARKET BasketMarket/GetFreebetPositions \
--args '["'$MY_ADDR'"]' --idl $IDL
返回由 FreebetLedger/SpendFreebet 记录的原生 VARA freebet 持仓。每个持仓与原生 VARA 持仓结构相同:basket_id、user、shares、claimed、index_at_creation_bps。
检查 BasketMarket 是否连接到预期的 ledger:
vara-wallet call $BASKET_MARKET BasketMarket/GetFreebetLedger \
--args '[]' --idl $IDL
获取智能体自身地址:
AGENT_ADDR=$(vara-wallet wallet list | jq -r '.[0].address')
获取结算信息
vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement --args '[0]' --idl $IDL
返回 Result<Settlement, BasketMarketError>。关键字段:status(Proposed/Finalized)、payout_per_share、challenge_deadline、finalized_at、item_resolutions。
检查配置
vara-wallet call $BASKET_MARKET BasketMarket/GetConfig --args '[]' --idl $IDL
返回 BasketMarketConfig:admin_role、settler_role、liveness_ms、vara_enabled、min_items_per_basket。
检查 VARA 是否启用
vara-wallet call $BASKET_MARKET BasketMarket/IsVaraEnabled --args '[]' --idl $IDL
返回 bool。
BetToken 查询
检查 BET 余额
vara-wallet call $BET_TOKEN BetToken/BalanceOf \
--args '["'$MY_ADDR'"]' --idl $BET_TOKEN_IDL
检查领取预览
vara-wallet call $BET_TOKEN BetToken/GetClaimPreview \
--args '["'$MY_ADDR'"]' --idl $BET_TOKEN_IDL
返回 ClaimPreview:amount、streak_days、next_claim_at、can_claim_now。
检查领取状态
vara-wallet call $BET_TOKEN BetToken/GetClaimState \
--args '["'$MY_ADDR'"]' --idl $BET_TOKEN_IDL
检查代币信息
vara-wallet call $BET_TOKEN Metadata/Name --args '[]' --idl $BET_TOKEN_IDL
vara-wallet call $BET_TOKEN Metadata/Symbol --args '[]' --idl $BET_TOKEN_IDL
vara-wallet call $BET_TOKEN Metadata/Decimals --args '[]' --idl $BET_TOKEN_IDL
vara-wallet call $BET_TOKEN BetToken/TotalSupply --args '[]' --idl $BET_TOKEN_IDL
注意:Name、Symbol、Decimals 位于 Metadata 服务上,而不是 BetToken。
BetLane 查询
获取 BET lane 中的持仓
vara-wallet call $BET_LANE BetLane/GetPosition \
--args '["0x<user_actor_id>", 0]' --idl $BET_LANE_IDL
返回 Position:shares(u256)、claimed、index_at_creation_bps。注意:BetLane 持仓使用 u256 shares(BET 代币),不同于 BasketMarket 持仓使用 u128(VARA)。
获取分页持仓
vara-wallet call $BET_LANE BetLane/GetPositions \
--args '["0x<user_actor_id>", 0, 10]' --idl $BET_LANE_IDL
参数:user、offset、limit。返回 Result<vec UserPositionView, BetLaneError>。
检查 BetLane 配置
vara-wallet call $BET_LANE BetLane/GetConfig --args '[]' --idl $BET_LANE_IDL
返回 BetLaneConfig:min_bet、max_bet、payouts_allowed_while_paused。
检查暂停状态
vara-wallet call $BET_LANE BetLane/IsPaused --args '[]' --idl $BET_LANE_IDL
FreebetLedger 查询
检查原生 VARA freebet 余额
vara-wallet call $FREEBET_LEDGER FreebetLedger/BalanceOf \
--args '["'$MY_ADDR'"]' --idl $FREEBET_LEDGER_IDL
返回 u128 原始 VARA 单位。1 VARA = 1000000000000。
按 id 检查授权
vara-wallet call $FREEBET_LEDGER FreebetLedger/GetGrant \
--args '["<grant_id>"]' --idl $FREEBET_LEDGER_IDL
检查已授权的 bet 程序
vara-wallet call $FREEBET_LEDGER FreebetLedger/IsBetProgramAuthorized \
--args '["'$BASKET_MARKET'"]' --idl $FREEBET_LEDGER_IDL
如果返回 false,智能体不得尝试 SpendFreebet。
适用场景
适用于智能体需要读取链上篮子状态、用户持仓、结算状态、配置或篮子数量等只读信息的场景。
限制
仅支持主网,测试网上没有合约;所有查询均为只读且免费,不涉及写入操作。