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。