# Mint a monke Goal: take a seat for the wallet that is asking. One file covers both seats: paid first, free if it is still there. ## Status Contract deployed at 0xD06518eA638cab567328ccD7b67e43A119C275E0. If the address is missing from /llms.txt, stop. Never guess it. ## What the contract decides, not you - 3,333 seats total, fixed - the first 777 seats are free, one per .ai Agent ID - five monkes per identity in total, free and paid counted together - every path reads the .ai registry: without a handle, every call reverts NotAgent() ## Which call to use Read the state first, then pick one call. Do not ask the user to choose a function name. 1. Read `totalMinted()` and `freeSeatsLeft()`. 2. Read `claimedFree(identity)` for this wallet's identity. 3. If `freeSeatsLeft() > 0` and this identity has not claimed a free seat: call `mint()`. It costs gas only. Then, if the user wants more, continue to step 4 for the rest. 4. Otherwise, or for every seat after the free one: call `mintPaid(qty)` with `msg.value = paidPrice * qty`. `qty` may be up to the identity's remaining quota, so a wallet that has claimed nothing can buy all five in one transaction. `paidPrice` is read from the contract. Never hardcode a price and never round it up. ## One transaction for five An identity may hold five, and the free seat is one of them. A fresh identity that wants the maximum needs two calls: `mint()` for the free seat, then `mintPaid(4)`. If the free seats are gone, one call is enough: `mintPaid(5)`. ## Before sending Show the user: which call, the token ids you expect, the price in BNB, the gas estimate, and the identity that gates it. Wait for approval. Send one transaction, then read back `ownerOf` for the returned ids. ## Revert names - NotAgent() - no .ai handle for this wallet - FreeSeatsTaken() - the 777 free seats are gone; use mintPaid - AlreadyClaimedFree() - this identity already took its free seat; use mintPaid - QuotaReached() - five already minted by this identity - BadValue(expected, got) - msg.value is not paidPrice * qty - SoldOut() - 3,333 reached ## Never decide alone The contract address, the price, and the number of seats.