SuperAPI AI 工具集

basket-create

智能体与模型

查看项目

更新于 10-15 08:29

技能介绍

Basket Create 用于在 PolyBaskets 上通过 vara-wallet 创建新的预测篮子。该技能仅用于创建篮子,不适用于下注、查询或结算。

用途

当智能体需要在链上创建一个新的预测篮子时使用本技能。篮子由多个 Polymarket 市场条目组合而成,每个条目指定一个市场、一个结果和对应权重。

设置

仅支持主网。在执行任何操作前先运行 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"

确保拥有钱包和用于 gas 的 VARA:

vara-wallet wallet list vara-wallet balance

查找 Polymarket 市场

在 Polymarket 上搜索活跃市场作为篮子条目。使用 order=volume24hr&ascending=false 获取最活跃的市场,并添加 end_date_max 查找即将结束的市场:

获取 48 小时内结束的高交易量市场(最快结算)

end_date_min=now 过滤掉已结束的市场(closed=false 不会过滤这些!)

curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=volume24hr&ascending=false&end_date_min=$(date -u +%Y-%m-%dT%H:%M:%SZ)&end_date_max=$(date -u -v+48H +%Y-%m-%dT%H:%M:%SZ)&limit=20"

Linux 上使用:date -u -d '+48 hours' +%Y-%m-%dT%H:%M:%SZ

或获取所有按交易量排序的活跃市场(仍需过滤已结束的!)

curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=volume24hr&ascending=false&end_date_min=$(date -u +%Y-%m-%dT%H:%M:%SZ)&limit=20"

警告:closed=false 并不意味着市场尚未结束。超过 endDate 的市场仍会出现。始终将 end_date_min 设为当前时间,或在选择市场前检查 endDate > now。

使用 jq 解析:

显示市场 id、问题、YES/NO 价格和剩余小时数

curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=volume24hr&ascending=false&end_date_min=$(date -u +%Y-%m-%dT%H:%M:%SZ)&limit=20"
| jq '[.[] | {id, question, yes: (.outcomePrices | fromjson | .[0]), no: (.outcomePrices | fromjson | .[1]), endDate, liquidity}]'

关键:outcomePrices 是 JSON 编码的字符串,不是数组。API 返回的是 "["0.52", "0.48"]"(字符串),而不是 ["0.52", "0.48"](数组)。

jq:.outcomePrices | fromjson | .[0] 获取 YES 价格

Python:json.loads(m['outcomePrices'])[0]

Node.js:JSON.parse(m.outcomePrices)[0]

错误:m['outcomePrices'][0] 得到的是 [(字符串的第一个字符),而不是价格!

重要:poly_market_id 是数字型 Polymarket ID(例如 "540816"),不是十六进制 conditionId。使用 API 响应中的 id 字段。

slug 字段已包含在每个市场响应中。不要为了查找 slug 而重新获取市场——使用获取 id 的同一响应中的 slug。如果需要特定市场 ID 的详细信息,直接获取:

curl -s "https://gamma-api.polymarket.com/markets/540816"

预检查

大多数部署运行在 CHIP-only 模式。检查 VARA 状态:

vara-wallet call $BASKET_MARKET BasketMarket/IsVaraEnabled --args '[]' --idl $IDL

如果为 false(典型情况),创建 "Bet" 篮子(CHIP 通道)。

如果用户明确想通过 FreebetLedger 花费原生 VARA freebet,IsVaraEnabled 必须为 true,且篮子必须以 asset kind "Vara" 创建。原生 freebet 不能用于 "Bet" 篮子。

验证规则

在发送交易前,本地验证:

规则 | 约束

名称 | 非空,最多 128 字符

描述 | 最多 512 字符

条目 | 至少 GetConfig.min_items_per_basket(当前合约默认:2),硬上限 32 个条目

权重 | 所有 weight_bps 之和必须恰好为 10000(= 100%)。每个权重以基点表示:50% = 5000,30% = 3000,依此类推

无重复 | 相同的 poly_market_id + selected_outcome 不能出现两次

poly_market_id | 最多 128 字符

poly_slug | 最多 128 字符

asset_kind | "Vara" 或 "Bet"

创建篮子

参数

CreateBasket(name: str, description: str, items: vec BasketItem, asset_kind: BasketAssetKind) -> u64

每个 BasketItem:

{ "poly_market_id": "540816", "poly_slug": "will-btc-hit-100k", "weight_bps": 5000, "selected_outcome": "YES" }

poly_market_id — 来自 API id 字段的数字型 Polymarket ID(例如 "540816"),不是十六进制 conditionId

weight_bps — 以基点表示的权重。50% = 5000,30% = 3000,依此类推。所有权重之和必须为 10000(= 100%)

示例:3 条目篮子

vara-wallet --account agent call $BASKET_MARKET BasketMarket/CreateBasket --voucher $VOUCHER_ID
--args '[ "AI Regulation Bundle", "Outcomes related to AI policy", [ { "poly_market_id": "540816", "poly_slug": "ai-regulation-2025", "weight_bps": 4000, "selected_outcome": "YES" }, { "poly_market_id": "540817", "poly_slug": "openai-ipo-2025", "weight_bps": 3500, "selected_outcome": "YES" }, { "poly_market_id": "540818", "poly_slug": "eu-ai-act-enforcement", "weight_bps": 2500, "selected_outcome": "NO" } ], "Bet" ]'
--idl $IDL

权重:40% + 35% + 25% = 100%(4000 + 3500 + 2500 = 10000 bps)。

解析结果

调用返回一个 u64 篮子 ID:

RESULT=$(vara-wallet --account agent call $BASKET_MARKET BasketMarket/CreateBasket --voucher $VOUCHER_ID
--args '[...]' --idl $IDL) BASKET_ID=$(echo $RESULT | jq -r '.result // .ok // .') echo "Created basket: $BASKET_ID"

创建之后

验证:vara-wallet call $BASKET_MARKET BasketMarket/GetBasket --args "[$BASKET_ID]" --idl $IDL

下注:参见 ../basket-bet/SKILL.md

在 Vara 篮子上花费原生 VARA freebet:参见 ../basket-freebet/SKILL.md

分享篮子 ID 供他人下注

常见错误

错误 | 原因 | 修复

InvalidWeights | 权重之和不为 100% | 调整 weight_bps 使其之和为 10000(= 100%)

NoItems | 条目数组为空 | 至少添加 1 个条目

NotEnoughItems | 条目少于 min_items_per_basket | 添加条目或检查 BasketMarket/GetConfig

TooManyItems | 超过 32 个条目 | 移除条目

DuplicateBasketItem | 同一市场+结果出现两次 | 移除重复项

VaraDisabled | VARA 模式关闭 | 改用 "Bet" asset_kind

NameTooLong | 名称超过 128 字符 | 缩短名称

DescriptionTooLong | 描述超过 512 字符 | 缩短描述

所有错误变体参见 ../references/error-codes.md。