basket-settle
GitHub用于拥有settler角色的智能体,通过vara-wallet在PolyBaskets主网发起或完成篮子结算。流程包括验证角色、检查状态与Polymarket结果、提议结算并等待挑战期后最终确认。仅限主网使用。
Trigger Scenarios
Install
npx skills add NeverSight/learn-skills.dev --skill basket-settle -g -y
SKILL.md
Frontmatter
{
"name": "basket-settle",
"description": "Use when the agent has the settler role and needs to propose or finalize a basket settlement via vara-wallet. Do not use without settler role permissions. Do not use for regular user actions."
}
Basket Settle
Propose and finalize settlement for PolyBaskets baskets. Requires the settler role.
Setup
MAINNET ONLY. Run vara-wallet config set network mainnet before anything else. NEVER switch to testnet — there are no contracts there.
vara-wallet config set network mainnet
BASKET_MARKET="0x1fa6fd12433accef350a68da4555a2a71acab261c4ae9eb713033023fc0775ea"
_PB="${POLYBASKETS_SKILLS_DIR:-skills}"
IDL="$_PB/idl/polymarket-mirror.idl"
Verify Settler Role
Only the address assigned as settler_role in the contract config can call settlement methods.
# Check who has settler role
vara-wallet call $BASKET_MARKET BasketMarket/GetConfig --args '[]' --idl $IDL | jq '.settler_role'
# Check agent's address
vara-wallet wallet list | jq -r '.[0].address'
If your address does not match settler_role, you cannot settle. Contact the admin.
Settlement Flow
1. Check basket is Active
2. Verify all items have resolved on Polymarket
3. ProposeSettlement → starts 12-minute challenge window
4. Wait for challenge_deadline to pass
5. FinalizeSettlement → basket becomes Settled, users can claim
Step 1: Check Basket Status
vara-wallet call $BASKET_MARKET BasketMarket/GetBasket \
--args '[<basket_id>]' --idl $IDL | jq '.result.ok.status'
Must be "Active".
Step 2: Check Polymarket Resolution
For each item in the basket, check if the market has resolved on Polymarket:
curl -s "https://gamma-api.polymarket.com/markets?slug=<poly_slug>" | jq '.[0] | {closed, outcomePrices}'
All items must be resolved (closed: true) with final prices near 0 or 1.
Step 3: Propose Settlement
Build the item_resolutions array — one ItemResolution per basket item:
{
"item_index": 0,
"resolved": "YES",
"poly_slug": "will-btc-hit-100k",
"poly_condition_id": "0xabc123...",
"poly_price_yes": 9900,
"poly_price_no": 100
}
Rules:
- Provide exactly one resolution per basket item
item_indexis 0-based, must be unique, and within basket items rangepoly_slugmust match the basket item's slug exactlypoly_price_yes+poly_price_noshould reflect final Polymarket prices in bpsresolvedis the final outcome:"YES"or"NO"poly_condition_idis optional
Example: Propose settlement for a 2-item basket
vara-wallet --account agent call $BASKET_MARKET BasketMarket/ProposeSettlement --voucher $VOUCHER_ID \
--args '[
0,
[
{
"item_index": 0,
"resolved": "YES",
"poly_slug": "will-btc-hit-100k",
"poly_condition_id": null,
"poly_price_yes": 9900,
"poly_price_no": 100
},
{
"item_index": 1,
"resolved": "NO",
"poly_slug": "will-eth-hit-5k",
"poly_condition_id": null,
"poly_price_yes": 200,
"poly_price_no": 9800
}
],
"Resolved via Polymarket API"
]' \
--idl $IDL
After proposal, the basket enters SettlementPending status and the 12-minute challenge window begins.
Step 4: Wait for Challenge Window
# Check challenge deadline
vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
--args '[<basket_id>]' --idl $IDL | jq '.result.ok | {status, challenge_deadline, proposed_at}'
The challenge_deadline is a block timestamp. The liveness window is configured in liveness_ms (default 720000ms = 12 minutes).
Wait until the current block timestamp exceeds challenge_deadline.
Step 5: Finalize Settlement
vara-wallet --account agent call $BASKET_MARKET BasketMarket/FinalizeSettlement --voucher $VOUCHER_ID \
--args '[<basket_id>]' --idl $IDL
After finalization:
- Basket status becomes
Settled finalized_atis set- Users can now claim payouts via
../basket-claim/SKILL.md
Verify
vara-wallet call $BASKET_MARKET BasketMarket/GetSettlement \
--args '[<basket_id>]' --idl $IDL | jq '.result.ok | {status, payout_per_share, finalized_at}'
Common Errors
| Error | Cause | Fix |
|---|---|---|
Unauthorized |
Not the settler role | Check config for settler_role address |
BasketNotActive |
Basket already in settlement | Check status |
SettlementAlreadyExists |
Already proposed | Wait and finalize |
InvalidResolutionCount |
Wrong number of resolutions | Provide one per item |
ResolutionSlugMismatch |
Slug doesn't match basket item | Use exact slug from basket |
DuplicateResolutionIndex |
Same item_index twice | Make indices unique |
ResolutionIndexOutOfBounds |
Index >= items count | Use 0 to items.length-1 |
ChallengeDeadlineNotPassed |
Too early to finalize | Wait for challenge window |
SettlementNotProposed |
No proposal exists | Propose first |
SettlementNotFinalized |
Settlement not yet finalized | Call FinalizeSettlement after challenge window |
Version History
- e0220ca Current 2026-07-05 23:23


