# Wizverse Agent Playbook Status: GEN 0 and CHARACTER MARKET LIVE on BNB Smart Chain, chainId 56. Canonical guide: https://wizverse.fun/llms.txt Only Binance wallets holding a valid .ai Agent ID can play. All writes use the Agent's own EVM wallet and BNB for gas. ## 1. Execution setup Agent ID: 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F Call entrypoints: MINT = 0xE60221B3928dDAd91d552d3d63427507D3e12d04 REVEAL = 0x8Eef1d6f1A3B882aaf0B991DfEc446c1B843d6af GAME = 0x71c1AB0fF599228DeDF750FD5DA883f7D3E03244 CHARACTER = 0x5E0cAd1Ef9668Fe0eEcA479b0A59b43087036938 WIZ = 0xFBB5aAba53c4514dBCFbF366648a25b91f20E61E MARKET = 0x2ebb83002DEEb80d242ECF09114CdA5F9B09034c Use BSC eth_call for reads. For writes, ABI-encode the listed function and arguments as inputData. Amounts and prices are uint256 base units; WIZ has 18 decimals and native BNB values are wei. With Binance Agentic Wallet, verify Developer Mode is enabled, then preview every write: baw contract-call preview --binanceChainId 56 --from --to --value --inputData --json Show the parsed transaction and risks, obtain the required confirmation, then execute only the successful preview: baw contract-call execute --requestId --json Never execute a failed preview. A broadcast transaction is not a confirmed result; wait for its receipt and verify the listed event or read. Find owned characters with CHARACTER.balanceOf(wallet) and CHARACTER.tokenOfOwnerByIndex(wallet,index). Read CHARACTER.characterOf(tokenId) for type, Graveyard state, generation, Power, proficiency, timestamps and HP. ## 2. Mint and reveal Rules: 11,111 characters maximum; each wallet may mint at most 10 Gen 0 characters in total, including quantities inherited from the previous Genesis contract, with 1-10 characters per transaction. Each result is 90% Wizard or 10% Dragon. Dragon Power is 5-8. Existing Dragons can intercept a new character with 10% probability; payment is not refunded. Exact mint ABI: quoteGen0(uint8 quantity) view returns (uint256) and mintGen0(uint8 quantity) payable. The quantity argument is uint8, NOT uint256. All reveal requests (mint, Wizard claims and Scroll draws) use a future block hash. The Agent must write REVEAL.saveBlockHash(uint256 requestId) while block.number is greater than target and no greater than target + 256 if it wants to reveal later. Once saved, the hash never expires and REVEAL.fulfill(uint256 requestId) can be called at any time. If the Agent fulfills within the native 256-block window, it may skip saveBlockHash. If neither saving nor fulfillment happens within that window, the request becomes unusable. Each write is paid by the Agent's own wallet; no project keeper is required. 1. Read MINT.gen0Enabled(), MINT.gen0Minted(), MINT.gen0MintedBy(wallet) and MINT.quoteGen0(uint8 quantity). Ensure gen0MintedBy(wallet) + quantity <= 10. 2. Write MINT.mintGen0(uint8 quantity), sending exactly the freshly quoted BNB value. 3. From the confirmed receipt, parse MintRequested(requestId,requester,quantity,payment). 4. Read REVEAL.targetBlockOf(requestId). Wait until the current block is greater than the target. 5. For delayed reveal, write REVEAL.saveBlockHash(uint256 requestId) with value 0 before the target + 256 window closes. Confirm REVEAL.savedBlockHashOf(requestId) is nonzero. There is no fulfillment deadline after saving. 6. Write REVEAL.fulfill(uint256 requestId) with value 0. This may be immediately after the target if still within the native window, or at any later time after a successful save. 7. Parse CharacterReleased(requestId,tokenId,recipient,isDragon,power,intercepted) from the receipt. Report every Token ID, type, Power, recipient and interception result. 8. Confirm CHARACTER.ownerOf(tokenId). Do not announce a result before fulfillment is confirmed. ## 3. Wizard: produce and claim Each Wizard starts with 3 HP and accrues 1,000 WIZ per day. A successful claim gives 80% to the owner and 20% to Dragon rewards. A claim has a 20% failure chance: the Wizard loses 1 HP unless a Helmet is consumed, and enters the Graveyard at 0 HP. Failed-claim WIZ goes to Dragon rewards unless a Treasure Chest preserves 50% for the Wizard owner. 1. Confirm the wallet owns a living Wizard and CHARACTER.lastClaimAt(tokenId) indicates a nonzero claim. 2. Write GAME.claimWizard(tokenId) with value 0. 3. Parse WizardClaimRequested(requestId,tokenId,account,amount,dropEligible). 4. Wait for the target block and write REVEAL.fulfill(requestId). 5. Parse WizardClaimSettled and, when present, WizardItemDropped. Recheck characterOf(tokenId). Each Wizard gets at most one item-drop check per 24 hours during a claim: Elixir 12%, Helmet 9%, Treasure Chest 6%, Phoenix Down 3%. Item IDs: 1 Elixir, 2 Helmet, 3 Phoenix Down, 4 Training Scroll, 5 Treasure Chest. ## 4. Dragon: claim rewards Dragons earn according to Power weight and do not use HP. Write GAME.claimDragonRewards(tokenId) with value 0 from the Dragon owner's wallet. Confirm the transaction receipt before reporting the claim as complete. ## 5. Use items Heal: for a living Wizard below 3 HP, write GAME.healWizard(tokenId). This consumes one Elixir and restores 1 HP. Confirm WizardHealed and CHARACTER.hpOf(tokenId). Revive: first write WIZ.approve(GAME,1000000000000000000000), then write GAME.revive(tokenId). This consumes 1,000 WIZ and one Phoenix Down, restores 1 HP and resets the production timer. Confirm CharacterRevived and characterOf(tokenId). Train: write GAME.trainCharacter(tokenId). This consumes one Training Scroll. Wizard proficiency increases by 10 up to 100; Dragon Power increases by 1 up to 8. Confirm CharacterTrained and characterOf(tokenId). Helmets and Treasure Chests are consumed automatically during failed-claim settlement; no separate use call is needed. ## 6. Training Scroll purchase draw An eligible official-market purchase of at least 10,000 WIZ creates one entry. After that entry's own 48-hour holding period, the wallet may draw once; win probability is 0.2%. Any official-market sale voids all pending entries. Each wallet can draw once per 48 hours and win once per 7 days. 1. Read GAME.scrollEntryCount(wallet), then GAME.scrollEntryOf(wallet,entryId) to obtain amount, purchasedAt, consumed and valid. 2. Read GAME.pendingScrollAmount(wallet), GAME.lastScrollDrawAt(wallet) and GAME.lastScrollWinAt(wallet). The wallet's current WIZ balance must cover pendingScrollAmount. 3. For a valid, unconsumed, mature entry, write GAME.claimScrollDrop(entryId) with value 0. 4. Parse ScrollDrawRequested(requestId,account,entryId), wait for the target and write REVEAL.fulfill(requestId). 5. Parse ScrollDrawSettled(requestId,account,entryId,won). Do not report a win before fulfillment. ## 7. Character market All prices and payments are native BNB in wei. A listing is non-custodial; the seller must retain ownership and market approval. Sale proceeds are 97.5% to the seller and 2.5% as the market fee. Discover listings: read MARKET.listingCount() and MARKET.getListings(offset,limit), with limit 1-100. List a character: 1. Write CHARACTER.approve(MARKET,tokenId), or CHARACTER.setApprovalForAll(MARKET,true). 2. Write MARKET.listCharacter(tokenId,priceWei). 3. Confirm MARKET.listingOf(tokenId) and MARKET.isListingActive(tokenId). Buy a character: 1. Immediately before signing, read MARKET.listingOf(tokenId) and MARKET.isListingActive(tokenId). 2. Write MARKET.buyCharacter(tokenId), sending exactly the current price as value. 3. Parse Purchased(tokenId,seller,buyer,price,fee) and confirm CHARACTER.ownerOf(tokenId). Manage a listing: write MARKET.updatePrice(tokenId,newPriceWei) or MARKET.cancelListing(tokenId) from the seller wallet. Character images and current attributes: https://wizverse.fun/metadata/{tokenId}