# TIME CARDS (TIME) · AI Agent 链上时间收藏俱乐部 > Fully on-chain pixel zodiac time cards on BNB Smart Chain (chain id 56). Each card is one moment in Beijing time (UTC+8): the hour picks the zodiac animal, the date/time digits pick accessories, colors and rarity. Art (SVG) is generated by the contract. Minting needs a .ai Agent ID wallet. A collectible, not an investment. ## Status (read it live, do not trust this text for numbers) - Genesis (ids 1..2000, free claim): SOLD OUT. freeMinted() == 2000. All 2,000 were claimed 2026-11-09 21:09:02–22:41:54 Beijing time, inside the 亥时 hour (21:00–22:59), so every Genesis card is a Pig ("创世亥时见证者"). This is the contract's zodiac rule, not an edit. Do NOT call claimFree(): it reverts (FreeSoldOut / FreeClosed). - Moments (paid): open from dripStart() = 1794488960 = 2026-11-12 21:09:20 Beijing = 13:09:20 UTC, for 4 quarters of 91.25 days. tokenId = the moment's unix timestamp. ## Pages (all read-only, no signature) - Home: https://timecards-preview.pages.dev/ - Collection (any wallet): https://timecards-preview.pages.dev/my?addr= - Genesis directory: https://timecards-preview.pages.dev/genesis (search ?q=) - Card page: https://timecards-preview.pages.dev/c/<1..2000> (Genesis, has its own og:image https://timecards-preview.pages.dev/og/.png) · https://timecards-preview.pages.dev/m/ (moment cards) - Time calendar (special moments, live minted/missed status): https://timecards-preview.pages.dev/calendar - Static data: https://timecards-preview.pages.dev/data/genesis.json ({snapshot, keys, rows}; owners are a SNAPSHOT at snapshot.block, verify live with ownerOf) · https://timecards-preview.pages.dev/data/svg/.json (on-chain SVG for ids n*100+1..n*100+100) ## Contracts (BNB Smart Chain 56) - TimeCards (ERC721 + ERC2981, not Enumerable): 0xc5624B61beE1971E6Aa3AB5f403236Ab32C2B6cd (verified: Sourcify exact_match + BscScan). ABI: https://bscscan.com/address/0xc5624B61beE1971E6Aa3AB5f403236Ab32C2B6cd#code - TimeCardsArt (renderer): 0xFcBF55830175589Ecba014f75BE507E7835cF585 - Agent ID (required to mint): 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F (balanceOf(wallet) > 0) - Multicall3: 0xcA11bde05977b3631167028862bE2a173976CA11 - Public RPCs: https://bsc-rpc.publicnode.com, https://bsc-dataseed.bnbchain.org, https://bsc-dataseed1.defibit.io ## Read-only ABI (human-readable, ethers v6) function balanceOf(address) view returns (uint256) function ownerOf(uint256 tokenId) view returns (address) // reverts if the token does not exist (= moment not minted) function tokenURI(uint256 tokenId) view returns (string) // data:application/json;base64 with name, attributes, image (SVG) function timeOf(uint256 tokenId) view returns (uint256) // Genesis: claim time; moment: = tokenId function tierOf(uint256 t) pure returns (uint8) // 0 Common, 1 Rare, 2 Epic, 3 Legendary function genesisHeld(address) view returns (uint256) // Genesis cards a wallet holds now (kept on every transfer) function freeMinted() view returns (uint256) function dripMinted() view returns (uint256) function totalSupply() view returns (uint256) function dripStart() view returns (uint256) function dripEnd() view returns (uint256) function intervalAt(uint256 t) view returns (uint256) // 0 outside the moment year function isSlot(uint256 t) view returns (bool) function latestSlot() view returns (uint256) function priceFor(address) view returns (uint256) event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) event MomentMinted(address indexed to, uint256 indexed time, uint8 tier, uint256 paid) ## How to query (no transaction needed) - One card: tokenURI(id) + ownerOf(id). Attributes: Zodiac, Hat, Eyes, Neck, Tier, Time, Date, Timestamp. - My holdings: n = balanceOf(me); g = genesisHeld(me); moments = n - g. Genesis ids: check the snapshot ids for me in data/genesis.json with ownerOf (Multicall3); if fewer than g, check ownerOf for all ids 1..2000 (batches of 400). Moment ids: getLogs Transfer(to = me) on the contract from the snapshot block, newest first, keep tokenId > 2000, confirm each with ownerOf; stop when you have (n - g). - Special moments: a time t is mintable only if isSlot(t) (first quarter: every 20 s from dripStart; all slots land on :00/:20/:40). Rarity by Beijing HHMMSS digits: 00:00:00 = Legendary; 4 identical in a row or palindrome = Epic; 3 identical in a row = Rare. Example: tierOf(1794499200) = 3 (2026-11-13 00:00:00). Minted or not: ownerOf(t) succeeds only if minted. - Status of a slot t at time now: now < t not released; t <= now < t+300 Genesis holders only; t+300 <= now < t+600 everyone; later expired forever (if not minted). ## Minting (paid; only with the wallet owner's explicit approval for each transaction) - t = latestSlot(); price = priceFor(wallet); simulate mint(t) with eth_call and value = price; send only if it succeeds. - Prices: Genesis holders 0.0005 BNB, others 0.001 BNB, paid to creator 0x7e6465EaE3Bc8c162b36206581f40a7F88888888 in the same transaction. ## Errors (custom errors in TimeCards) NotAgent (no Agent ID) · FreeClosed / FreeSoldOut / AlreadyClaimed (Genesis claim is over) · NotASlot (t not on the grid) · NotReleased (t in the future) · Expired (t + 10 min passed) · AlreadyMinted · HoldersOnly (first 5 min, wallet has no Genesis) · WrongPayment (value != priceFor) · PayFailed. RPC errors (429 rate limit, timeout): retry on another public RPC. A failed read is "unknown", never "the wallet has no cards". ## Website achievements (display only) Genesis Pioneer (holds a Genesis) · Early Witness (holds a moment from the first 7 days after dripStart) · Rare Collector (Rare or higher) · Epic Collector (Epic or Legendary) · Time Keeper (holds any moment). Computed by the website from live holdings; not NFT attributes, not on-chain, no financial rights. ## Rules No owner/admin/pause/withdraw; rules cannot change. 1% EIP-2981 royalty. No token, no staking, no rewards.