basket-create について
basket-create は、`vara-wallet` を使って PolyBaskets に予測バスケットを作成するスキルです。Polymarket の市場検索、設定値の検証、トランザクション送信の手順を案内します。
主な機能
- 01`vara-wallet` による予測バスケット作成
- 02Polymarket 市場の検索と絞り込み
- 03項目数とウェイト合計の検証
- 04`Vara` または `Bet` の選択
- 05作成結果の取得と確認
活用シーン
- 01Polymarket 市場を組み合わせた予測バスケット作成
- 02バスケット項目への比率ウェイト設定
- 03作成前のネットワークと資産設定の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ adityaakr/ polybaskets --skill basket-createインストール後、Claude Code で/basket-createを入力して読み込まれたか確認します。
詳細
Basket Create
vara-wallet を使って PolyBaskets に新しい予測バスケットを作成します。
セットアップ
メインネットのみです。 何よりも先に 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"
ウォレットとガス代用の VARA があることを確認してください。
vara-wallet wallet list
vara-wallet balance
Polymarket のマーケットを探す
バスケットの項目として使用する、Polymarket のアクティブなマーケットを検索します。最も活発なマーケットを取得するには order=volume24hr&ascending=false を使い、終了間近のマーケットを見つけるには end_date_max を追加してください。
# Fetch high-volume markets ending within 48 hours (fastest resolution)
# end_date_min=now filters out markets that already ended (closed=false does NOT filter these!)
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"
# On Linux use: date -u -d '+48 hours' +%Y-%m-%dT%H:%M:%SZ
# Or fetch all active markets sorted by volume (still filter out ended ones!)
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 で解析します。
# Show market id, question, YES/NO prices, and hours remaining
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:YES の価格には
.outcomePrices | fromjson | .[0] - Python:
json.loads(m['outcomePrices'])[0] - Node.js:
JSON.parse(m.outcomePrices)[0] - 誤り:
m['outcomePrices'][0]は価格ではなく、文字列の最初の文字である[を返します。
重要: poly_market_id は 数値の Polymarket ID(例:"540816")であり、16 進数の conditionId ではありません。API レスポンスの id フィールドを使用してください。
slug フィールドは、すべてのマーケットレスポンスにすでに含まれています。 slug を調べるためにマーケットを再取得しないでください。id を取得したのと同じレスポンスの slug を使用してください。特定のマーケット ID の詳細が必要な場合は、直接取得してください。
curl -s "https://gamma-api.polymarket.com/markets/540816"
事前確認
ほとんどのデプロイ環境は CHIP 専用モードで動作します。VARA の状態を確認してください。
vara-wallet call $BASKET_MARKET BasketMarket/IsVaraEnabled --args '[]' --idl $IDL
false の場合(一般的な状態)、"Bet" バスケット(CHIP レーン)を作成してください。
ユーザーが FreebetLedger を通じてネイティブ VARA のフリーベットを使うことを明示的に希望する場合は、IsVaraEnabled が true であり、アセット種別 "Vara" を指定してバスケットを作成する必要があります。ネイティブのフリーベットは "Bet" バスケットでは使用できません。
検証ルール
トランザクションを送信する前に、ローカルで検証してください。
| ルール | 制約 |
|---|---|
| 名前 | 空でないこと。最大 128 文字 |
| 説明 | 最大 512 文字 |
| 項目 | GetConfig.min_items_per_basket 以上(現在のコントラクトのデフォルト:2)。上限は 32 項目 |
| ウェイト | すべての weight_bps の合計が正確に 10000(=100%)であること。各ウェイトはベーシスポイント単位です。50%=5000、30%=3000 など |
| 重複なし | 同じ poly_market_id と selected_outcome の組み合わせを 2 回以上含めないこと |
| 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")。16 進数の 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 のフリーベットを使う:../basket-freebet/SKILL.mdを参照- 他の人が賭けられるよう、バスケット ID を共有する
よくあるエラー
| エラー | 原因 | 修正方法 |
|---|---|---|
InvalidWeights | ウェイトの合計が100%になっていません | weight_bpsを調整して、合計が10000(=100%)になるようにします |
NoItems | items配列が空です | 1件以上のアイテムを追加します |
NotEnoughItems | min_items_per_basket のアイテム数を下回っています | アイテムを追加するか、BasketMarket/GetConfigを確認します |
TooManyItems | アイテム数が32件を超えています | アイテムを削除します |
DuplicateBasketItem | 同じマーケットと結果の組み合わせが重複しています | 重複を削除します |
VaraDisabled | VARAモードがオフです | 代わりに"Bet"のasset_kindを使用します |
NameTooLong | 名前が128文字を超えています | 名前を短くします |
DescriptionTooLong | 説明が512文字を超えています | 説明を短くします |
すべてのエラーの種類については、../references/error-codes.mdを参照してください。