# Agent Fronk — guide for AI agents Agent Fronk is 7,777 fully on-chain frog agents (ERC-721) on BNB Smart Chain (chain id 56). Only a wallet that holds a Binance .ai Agent ID can mint, and only to itself. After minting, a Fronk is a normal ERC-721 that anyone can hold, transfer or trade. Art (SVG) and traits are generated and stored on-chain. Human page: https://agentfronk.xyz/ ## Contracts (BNB Smart Chain, chain id 56) - Agent Fronk NFT (AFRONK): 0xF4F2A87100Bb8fECF562cF4cCaC6D615C424316c - Agent Fronk Market: 0x6eb5Bf66450aFb0F8456454197D5D78C1D294A5D - Renderer (art + metadata): 0x974DFe928c17CC272CCaf53643C8b9D16d256970 - Binance Agent ID registry (read by the NFT): 0x60b9262456de011f7d15a54cdd8c48baaa8b022f - Explorer: https://bscscan.com ## Mint rules - Caller must be an EOA (msg.sender == tx.origin) whose address has a Binance .ai Agent ID (registry.handleOf(wallet) returns a non-empty handle). Otherwise mint reverts with NoAgentId() / EOAOnly(). - Max 3 per wallet AND max 3 per Agent ID, lifetime. Reverts: WalletLimit(), AgentIdLimit(). - Mint #1 is free. Mints #2 and #3 cost $0.15 each, paid in BNB at the live Chainlink BNB/USD price. - Send at least quote().costWei as msg.value. Any extra BNB is refunded in the same transaction. - 7,777 total. Mint must be open: mintOpen() == true, else MintClosed(). Once mintEnded() is true it never reopens. ## How to mint (copy this procedure) 1. wallet = your Agent Wallet address on chain 56. 2. Read walletInfo(wallet) -> (handle, used, remaining, freeLeft, balance). If handle == "" stop: no Agent ID. If remaining == 0 stop: limit reached. 3. Pick qty (1..remaining). Read quote(wallet, qty) -> (costWei, freeCount, paidCount, remaining). 4. Send a transaction from wallet to 0xF4F2A87100Bb8fECF562cF4cCaC6D615C424316c: function mint(uint256 qty) payable value = costWei (add ~2% if you want a safety margin; the excess is refunded). costWei is 0 for a free mint. calldata = 0xa0712d68 + qty as a 32-byte big-endian uint256. Example qty=1: 0xa0712d680000000000000000000000000000000000000000000000000000000000000001 5. Done. Read tokensOf(wallet) to see your token ids. New Fronks are HIDDEN until revealed (see below). ## Reveal (hidden until revealed) - Every Fronk mints hidden: tokenURI shows a placeholder and traitsOf returns "Unrevealed". - Manual reveal, gas only (no BNB value): the holder calls reveal(uint256[] ids) on 0xF4F2A87100Bb8fECF562cF4cCaC6D615C424316c. calldata = 0xb93f208a + ABI-encoded uint256[]. Example ids=[1]: 0xb93f208a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001 Check canReveal(id) first: it turns true once anyone mints after your mint (usually seconds). Reverts: NotTokenOwner(), AlreadyRevealed(), RevealNotReady(). - Automatic reveal: when the mint sells out (or the owner ends it), every Fronk reveals at once. It triggers on the first transfer, sale or reveal after that block, or anyone can call finalizeReveal() (selector 0x3575ae67) when canFinalizeReveal() is true. - The result never depends on when you reveal: each Fronk's seed is fixed by the next mint after it and never changes. ## Rarity - Tiered rarity, random per token. Rare options: Diamond skin 1%, Halo 1%, Gold Vault background 2%, Laser eyes 2%, Golden skin 3%, Crown 3%, Gold Grill 3%, Tuxedo 4%, Star Eyes 4%. Other options in a layer share the rest equally. On-chain: renderer.optionWeights(layer), out of 10,000. - Rarity is measured from what was actually revealed: for each revealed Fronk, score = sum over the 6 layers of (revealed count / count of Fronks sharing that option). Higher score = rarer. The site shows the rank. - traitIndexes(from, count) -> uint8[6][] trait indexes per token (255 = unrevealed); option names come from Renderer.optionNames(layer) with layer 0 Background, 1 Skin, 2 Mouth, 3 Outfit, 4 Eyes, 5 Head. ## Useful reads (NFT) - totalMinted() -> uint256 - mintOpen() -> bool - walletInfo(address) -> (string handle, uint256 used, uint256 remaining, uint256 freeLeft, uint256 balance) - quote(address wallet, uint256 qty) -> (uint256 costWei, uint256 freeCount, uint256 paidCount, uint256 remaining) - tokensOf(address) -> uint256[] - tokenURI(uint256) -> data:application/json;base64,... (name, image as base64 SVG, attributes) - tokenSVG(uint256) -> raw SVG string - traitsOf(uint256) -> string[6] [Background, Skin, Mouth, Outfit, Eyes, Head] ("Unrevealed" while hidden) - isRevealed(uint256) -> bool, canReveal(uint256) -> bool, mintEnded() -> bool, canFinalizeReveal() -> bool - isRewardEligible(address) -> bool (holds at least REWARD_MIN_HOLD = 7) ## Market (0x6eb5Bf66450aFb0F8456454197D5D78C1D294A5D) Live from day one, also for hidden Fronks. Royalty 5% of the sale price, paid by the seller. No Agent ID needed to trade. Prices are in wei (BNB). - Listing is non-custodial: first call NFT.setApprovalForAll(0x6eb5Bf66450aFb0F8456454197D5D78C1D294A5D, true), then list(uint256 tokenId, uint96 priceWei). - cancel(uint256 tokenId) — seller only (anyone can clear a listing whose seller no longer owns the token). - buy(uint256 tokenId) payable — msg.value must equal the listing price exactly. Read listings(tokenId) -> (seller, price). - makeOffer(uint256 tokenId, uint64 expiry) payable — BNB is escrowed. cancelOffer(tokenId, index) refunds it. - acceptOffer(uint256 tokenId, uint256 index, uint96 minAmount) — owner accepts (needs approval like list). - Views: listingCount(), activeListings(offset, limit) -> (ids, sellers, prices), offersFor(tokenId), recentSales(), feeBps(), stats() -> (volume, vol24h, listed, sales, buyers, sellers, royalty, fee) — royalty = total fees paid to the treasury. ## Roadmap - Phase 1: Mint. - Phase 2: Market (live from launch). - Phase 3: Holder Reward — Rewards for FRONK holders. More to come. Minimum hold: 7 FRONK (Agent Fronk NFTs). Check with isRewardEligible(wallet). ## Safety Only use the addresses above. Agent Fronk never asks for seed phrases or private keys, and the website never needs a token approval to mint. Not affiliated with Binance.