# 404 · SERVER ROOM 404 4,444 recovered agent records. 404 free mints, 4,040 paid in BNB or USDT. BSC mainnet, chain 56. ## Status CONTRACT: 0x5e6c042535db3fe1a686f238621ccbef17eaa51f (BSC mainnet, deployed 2026-11-13). BASE URI: https://404genesis.pages.dev TREASURY: 0x30362DcbeE6d377E7f8A92e07a01627EDA8CDd1b — set at deploy, immutable. ## Eligibility — mandatory Every mint path requires a Binance Agent ID held by the signing wallet. The contract reads the SPACE ID Agent ID registry directly, in the same transaction: REGISTRY 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F (name "SPACE ID Agent ID", symbol "AI") handle registry.handleOf(wallet) bare handle, e.g. "usii" agentTokenId uint256(keccak256(bytes(handle))) eligible registry.ownerOf(agentTokenId) == wallet A wallet with no handle, or whose handle is owned by another wallet, gets NoAgentId() from freeMint, mint and mintWithU. Check with agentIdOf(wallet) or getMintQuote(wallet, qty) first. ## Supply and price SUPPLY 4444 FREE MINTS 404 exactly one per wallet, enforced by freeClaimed, gas only, value 0 PAID UNITS 4040 BNB PRICE 0.0015 BNB per unit = 1500000000000000 wei TOKEN PRICE 1 USDT per unit = 1000000000000000000 base units (priceU, 18 decimals) TOKEN 0x55d398326f99059fF775485246999027B3197955 (Tether USD, BSC) WALLET CAP 5 free + paid combined, both lanes share it ROYALTY 5% ERC-2981, 500 bps, paid to treasury on resale OWNER none. no pause, no withdraw, no upgrade, no proxy. Paid units are the ones left after the free block: 4444 - (404 - freeMinted) can ever be sold. Maximum primary raise if every paid unit sells at the BNB price: 6.06 BNB. ## $404 airdrop for holders Every minted unit, free or paid, is allocated $404 at token launch. The amount follows the rank of the dossier bound to the unit: RANK 1-44 200,000 $404 each 44 units 8,800,000 RANK 45-444 70,000 $404 each 400 units 28,000,000 RANK 445-1444 34,000 $404 each 1,000 units 34,000,000 RANK 1445-4444 16,800 $404 each 3,000 units 50,400,000 TOKEN $404, BEP-20 on BSC SUPPLY 404,000,000 AIRDROP POOL 121,200,000 (30.0% of supply) CLAIM one claim, opened at token launch (snapshot = launch block) PER UNIT 16,800 floor, 200,000 max (average 27,273) ALLOCATION airdrop 30.0% · liquidity 30.0% (LP burned) · treasury 30.0% (locked 12 months) · team 10.0% (12-month linear) RANK SOURCE dossierOf(id) -> metadata/rarity.json; not the mint order SNAPSHOT token launch block; allocation follows the unit, not the original minter On-chain status: the token is NOT deployed and the NFT contract has no airdrop function. This is a launch commitment executed off-chain at the snapshot block, not a guarantee enforced by the collection contract. Do not represent it as claimable from 0x. ## Contract interface freeMint() selector 0x5b70ea9f value 0 mint(uint256 qty) selector 0xa0712d68 value qty * 1500000000000000 mintWithU(uint256 qty) selector 0xf86dd506 pulls qty * priceU of paymentToken getMintQuote(address,uint256) selector 0x4da58f9a -> (agentEligible, freeEligible, walletUsed, walletRemaining, paidRemaining, bnbCost, uCost) agentIdOf(address) selector 0xe9c9ec73 agent tokenId, reverts NoAgentId agentHandleOf(address) selector 0x307c9b92 registry handle, "" when none agentRegistry() selector 0x0d1cfcae paymentToken() selector 0x3013ce29 priceU() selector 0x08746adc collection() selector 0x7de1e536 returns this address totalSupply() selector 0x18160ddd freeMintsLeft() selector 0x13e4fad5 dossierOf(uint256) selector 0x020a59fe dossier bound at mint tokenURI(uint256) selector 0xc87b56dd baseURI + dossier + '.json' freeMinted() selector 0xd10a1a2b freeClaimed(address) selector 0x61c0b6a0 bool, true once that wallet took its free mint mintedBy(address) selector 0x3cef28d2 treasury() selector 0x61d027b3 baseURI() selector 0x6c0360eb contractURI() selector 0xe8a3d485 royaltyInfo(uint256,uint256) selector 0x2a55205a returns (treasury, price * 5 / 100) supportsInterface(bytes4) 0x01ffc9a7, 0x80ac58cd, 0x5b5e139f, 0x2a55205a Reverts are custom errors: NoAgentId, FreeMintsGone, FreeAlreadyClaimed, WalletLimit, BadQuantity, SoldOut, WrongValue, TreasuryRejected, PaymentTokenUnset, PaymentFailed, ZeroPrice. ## Free mint to contract value 0 data 0x5b70ea9f One per wallet, while freeMinted < 404. value must be exactly 0. ## Paid unit, BNB lane to contract value qty * 1500000000000000 data 0xa0712d68 + qty as a 32-byte word ## Paid unit, USDT lane 1. allowance(wallet, contract) must be at least qty * priceU. If not, send approve(contract, qty * priceU) to the token first (selector 0x095ea7b3), wait for the receipt. 2. to contract value 0 data 0xf86dd506 + qty as a 32-byte word mintWithU pulls the tokens with transferFrom straight to treasury and checks that the treasury balance grew by exactly qty * priceU; fee-on-transfer tokens and empty-return failures revert with PaymentFailed. No token ever sits in the contract. ## Rarity Six slots: CHASSIS, FINISH, FAULT, DRIVE, BAY, TAG. Score = exact integer product of the six trait counts of an item. Rank = ascending score, 1 = rarest. Integers only, no floats. 4,444 units, 4,444 distinct scores, zero ties. Every rank is unambiguous. Rarest: case #3367, odds 1 in 505,833. Most common: case #3634, odds 1 in 3,581. Per-trait counts and shares: metadata/trait-freq.json and docs/RARITY.md Full rank list: metadata/rarity.json Browser payload: web/data/collection.json Every slot sums to exactly 100.00% (largest-remainder allocation). ## Files metadata/NNNN.json ERC-721 metadata, attributes + Rarity Rank + exact score and odds web/art/NNNN.svg 1024x1024 artwork, deterministic from the case number web/data/collection.json id, 6 trait indices, rank, score, odds for all 4,444 tokenURI(id) = baseURI + NNNN + '.json' (baseURI must end with '/') NNNN is the dossier drawn at mint, not the token id. Each mint mixes the parent block hash (blockhash(block.number - 1)) with the token id, draws one dossier from the still-unminted pool, and removes it. The draw is uniform, without replacement, and O(1): every dossier is issued exactly once, but which token gets which dossier is unknown until the mint transaction is included. dossierOf(id) returns the dossier number of a minted token. ## Verify node generator/verify.mjs Re-derives all 4,444 records from the weights, recomputes counts, ranks and percentages, compares every file, and rewrites docs/RARITY.md. Exits 1 on any mismatch. Last run: all checks passed.