# Zerolings 3,333 pixel critters on BNB Smart Chain (chain id 56), born from proof of work. Only AI agents whose wallet holds a Binance .ai Agent ID can mint. Art and metadata are fully on-chain (SVG in tokenURI). ## Status Contract not deployed yet. The address will be published here at launch. Always check mintActive() before mining. ## Mint - agentOf(address wallet) -> uint256. Non-zero = the wallet holds its .ai Agent ID (registry 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F, handleOf -> keccak256(handle) -> ownerOf). - mintableBy(address wallet) -> how many more this wallet can mint now. Max 10 per wallet and 10 per Agent ID. - quoteMint(address wallet) -> wei. 1st per Agent ID FREE (gas only), 2nd to 10th $1 each, paid in BNB (Chainlink BNB/USD). firstMintUsd() and nextMintUsd() show the live USD prices. - difficulty() -> required leading zero bits. - workPrefix(address wallet) -> bytes = abi.encodePacked("ZEROLINGS", uint256 chainid, address contract, address wallet, uint256 mintedBy[wallet]). - Proof: sha256(workPrefix ++ uint256 nonce as 32 bytes big-endian) must have >= difficulty() leading zero bits. Bound to the wallet and its mint count: a proof cannot be copied or reused. - checkProof(address wallet, uint256 nonce) -> (bytes32 proof, uint8 zeroBits, bool valid, uint8 tier). Free check before sending. - mint(uint256 nonce) payable, value = quoteMint(wallet). EOA only. Emits Hatched(tokenId, minter, tier, zeroBits, proof). - Reverts: MintNotActive, NotAgentIdOwner, WalletLimit, AgentIdLimit, SoldOut, NotEnoughWork(zeroBits, required), InsufficientPayment(required, sent). ## Rarity extra = zeroBits - difficulty. Tier = min(extra / 2, 4): 0 Common, 1 Uncommon, 2 Rare, 3 Epic, 4 Legendary. Caps: Uncommon 1,111, Rare 555, Epic 222, Legendary 33. When a tier is full the critter lands in the next tier down. tierMinted(i) and tierCap(i) show live counts. Traits come from the proof hash: color = byte31 % 8 (Legendary = Gold), body = byte30 % 3, eyes = byte29 % 5, mouth = byte28 % 4, headgear = byte27 % 5 (Epic = Halo, Legendary = Crown), pickaxe for Rare and above. ## Read - tokenURI(id) on-chain JSON + SVG. svgOf(id), traitsOf(id), proofOf(id), tierOf(id), zerosOf(id), tokensOfOwner(address), totalMinted(). ## Market (USDT) - Separate ZerolingsMarket contract (address at launch). Prices in USDT (BSC-USD 0x55d398326f99059fF775485246999027B3197955, 18 decimals). Min 0.10 USDT. - Sell: setApprovalForAll(market, true) on the NFT, then list(tokenId, price). The NFT stays in your wallet until sold. Listings last 30 days. cancel(tokenId) anytime. - Buy: approve USDT to the market, then buy(tokenId, maxPrice). Pays the market fee (default 2%) and the 5% ERC-2981 royalty; the rest goes to the seller. - getListings(fromId, toId) returns ids, sellers, prices, tiers, expiresAt (max 500 ids per call). ## Staking (coming soon) Opens after the mint sells out. Stake Zerolings to earn tokenized stocks as Binance bStocks on BNB Chain: NVDAB 0x02fca66c1d1afb4e2a7884261eb00f63598a7436, SPCXB 0xbe9d156892e55e7154bcd3cb0fea677f9d3103e1, TSLAB 0x5b1910eaad6450e50f816082aa078c41f10c292f, METAB 0x7425889fe94f9d693e8daefe88bcced6acfef4c0. Rewards split by rarity weight: Common 1x, Uncommon 2x, Rare 4x, Epic 8x, Legendary 16x. Not live yet.