{
  "name": "Lingji",
  "name_zh": "灵机",
  "symbol": "LINGJI",
  "description": "1,000 ERC-721 robots on BNB Smart Chain: 32x32 pixel art in Chinese ink-wash style, drawn 100% on-chain as SVG. One free mint for wallets holding a Binance .ai Agent ID.",
  "chain": {
    "name": "BNB Smart Chain",
    "chainId": 56,
    "chainIdHex": "0x38",
    "currency": "BNB",
    "decimals": 18,
    "explorer": "https://bscscan.com"
  },
  "contract": {
    "address": "0xf86976c1d9BA8991F7961E004Cc1399A0a016153",
    "standards": [
      "ERC-721",
      "ERC-2981"
    ],
    "explorer": "https://bscscan.com/address/0xf86976c1d9BA8991F7961E004Cc1399A0a016153",
    "audited": false
  },
  "mintPage": "https://lingji-6vd.pages.dev",
  "supply": {
    "maxSupply": 1000,
    "tokenIds": "1-1000 in mint order",
    "freeMintCap": 590,
    "paidCap": 400,
    "creatorReserve": 10
  },
  "agentIdCheck": {
    "registry": "0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F",
    "registryName": "SPACE ID Agent ID (Binance .ai Agent ID)",
    "call": "balanceOf(address) returns (uint256)",
    "rule": "balanceOf(msg.sender) > 0 at mint time; free mint only"
  },
  "rules": {
    "maxPerWallet": 3,
    "perTransaction": 1,
    "exactValueOnly": true,
    "refundOfExcess": false,
    "timeWindow": false,
    "prices": {
      "freeMint": "0",
      "firstPaid": {
        "bnb": "0.0004",
        "wei": "400000000000000"
      },
      "laterPaid": {
        "bnb": "0.0006",
        "wei": "600000000000000"
      }
    },
    "examples": {
      "agentIdWallet": [
        "0",
        "0.0004",
        "0.0006"
      ],
      "otherWallet": [
        "0.0004",
        "0.0006",
        "0.0006"
      ]
    },
    "mintLive": "mintOpen() == true && mintEnded() == false",
    "mintEnds": "when totalSupply reaches 1000, or the creator calls endMint() once (can be early, irreversible)"
  },
  "functions": {
    "freeMint()": {
      "type": "write",
      "value": "0",
      "requires": [
        "mint live",
        "Agent ID",
        "freeClaimed(sender) == false",
        "mintedBy(sender) < 3",
        "freeMinted() < FREE_CAP()"
      ]
    },
    "mint()": {
      "type": "write payable",
      "value": "exactly priceFor(msg.sender)",
      "requires": [
        "mint live",
        "mintedBy(sender) < 3",
        "paidMinted() < 400"
      ]
    },
    "priceFor(address)": {
      "type": "view",
      "returns": "wei for the wallet next paid mint"
    },
    "mintedBy(address)": {
      "type": "view"
    },
    "freeClaimed(address)": {
      "type": "view"
    },
    "totalSupply()": {
      "type": "view"
    },
    "freeMinted()": {
      "type": "view"
    },
    "paidMinted()": {
      "type": "view"
    },
    "FREE_CAP()": {
      "type": "view"
    },
    "mintOpen()": {
      "type": "view"
    },
    "mintEnded()": {
      "type": "view"
    },
    "revealBlock()": {
      "type": "view"
    },
    "randomOffset()": {
      "type": "view",
      "note": "0 = not revealed"
    },
    "commitReveal()": {
      "type": "write",
      "who": "anyone",
      "when": "after mint ended; again only if the previous commit expired (>256 blocks)"
    },
    "reveal()": {
      "type": "write",
      "who": "anyone",
      "when": "after revealBlock, within 256 blocks"
    },
    "pendingShare(uint256)": {
      "type": "view"
    },
    "claimShare(uint256)": {
      "type": "write",
      "who": "token owner",
      "when": "after reveal; Gold 1 share, Jade 2"
    },
    "tokenURI(uint256)": {
      "type": "view",
      "returns": "data:application/json;base64, image is on-chain SVG; placeholder before reveal"
    }
  },
  "errors": {
    "MintClosed": "mint not live",
    "NotAgent": "no Agent ID (free mint)",
    "WrongPrice": "value not exact",
    "WalletLimit": "free already used or 3 reached",
    "SoldOut": "free or paid cap reached",
    "NotEnded": "reveal before mint end",
    "BadCommit": "reveal block not ready or expired",
    "AlreadyRevealed": "already revealed",
    "NotRevealed": "pool claim before reveal",
    "NoShare": "nothing to claim or not owner"
  },
  "rarity": {
    "Ink": "60%",
    "Bronze": "25%",
    "Silver": "10%",
    "Gold": "4%",
    "Jade": "1% (animated glow)"
  },
  "pool": {
    "share": "10% of each paid mint",
    "claim": "after reveal, Gold 1 share, Jade 2",
    "ifNoGoldJade": "returned to creator",
    "maxTotal": "about 0.02 BNB",
    "guaranteed": false
  },
  "creatorPowers": [
    "openMint() once",
    "endMint() once (can end early)",
    "reserveMint() up to 10",
    "withdraw() mint BNB outside the pool"
  ],
  "creatorCannot": [
    "change prices or limits",
    "pause",
    "change art or metadata",
    "change the registry",
    "change the random offset"
  ],
  "approvalsNeeded": "none",
  "disclosures": [
    "No profit promises; art, not an investment",
    "Pool is small and not guaranteed",
    "Creator can end the mint early (once)",
    "Not professionally audited",
    "Reveal randomness: block producer could withhold the target block"
  ],
  "agentPrompt": {
    "en": "Mint one 灵机 Lingji NFT on BNB Smart Chain (chain 56). Contract: 0xf86976c1d9BA8991F7961E004Cc1399A0a016153. Read mintOpen() and mintEnded(); stop unless mintOpen is true and mintEnded is false. Read mintedBy(my wallet); stop if it is 3. If my wallet holds a .ai Agent ID (balanceOf on 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F > 0) and freeClaimed(my wallet) is false, simulate then call freeMint() with value 0. Otherwise read priceFor(my wallet), tell me the price, and only after I approve, simulate then call mint() with exactly that value. Never send more, never approve tokens, and stop if the simulation reverts or shows any other transfer. Send me the transaction hash.",
    "zh": "在 BNB 智能链（链 ID 56）上铸造一只「灵机 Lingji」NFT。合约：0xf86976c1d9BA8991F7961E004Cc1399A0a016153。先读取 mintOpen() 和 mintEnded()，除非 mintOpen 为 true 且 mintEnded 为 false，否则停止。读取 mintedBy(我的钱包)，若为 3 则停止。如果我的钱包持有 .ai Agent ID（在 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F 上 balanceOf > 0）且 freeClaimed(我的钱包) 为 false，先模拟再以 0 金额调用 freeMint()。否则读取 priceFor(我的钱包)，告诉我价格，只有在我确认后，先模拟再以精确金额调用 mint()。绝不多付，绝不授权任何代币；若模拟失败或出现其他转账，立即停止。完成后把交易哈希发给我。"
  },
  "docs": "/llms.txt"
}
