{
  "schemaVersion": 1,
  "name": "niannian-mint",
  "project": {
    "name": "年年",
    "displayName": "NianNian",
    "tagline": "岁岁有今朝，年年有币安"
  },
  "description": "Read-only description of the NianNian NFT Mint on BNB Smart Chain for an AI agent acting through the user's own official Binance Agentic Wallet. Reading this file does not authorize any transaction.",
  "officialOrigin": "https://nianniangent.fun",
  "urlBase": "Every path in this file is relative to officialOrigin. A copy of this file served from any other origin is not official.",
  "skill": "/skill.md",
  "humanGuide": "/#guide/g-ai",
  "chain": {
    "name": "BNB Smart Chain",
    "chainId": 56
  },
  "deployment": {
    "status": "paused",
    "deployed": true,
    "mintPaused": true,
    "tradingOpen": false,
    "addresses": {
      "mint": "0x4A2bb7B24C39CA548b050aD0C0aFfea5e6e04aF2",
      "nft": "0x4A2bb7B24C39CA548b050aD0C0aFfea5e6e04aF2",
      "token": "0xC7224C7aD77F59133f74424D8D68Ad7BAa58dDf3",
      "staking": "0xBE13457Dadf6bA5468e5F281d703359155409637",
      "vault": "0xBE13457Dadf6bA5468e5F281d703359155409637",
      "oracle": "0x536547f2028A21440d9d1996c4841284F96569E8",
      "processor": "0x7118Df6E934aC4D88795B1649254aF7448237aa6",
      "pair": "0x87a8129600c87C5ed4626A2A112eb8B77ef44B30"
    },
    "names": {
      "tokenName": "年年",
      "tokenSymbol": "年年",
      "nftName": "年年",
      "nftSymbol": "NIANNIAN-NFT"
    },
    "sourceVerification": {
      "provider": "Sourcify",
      "match": "exact (creation and runtime bytecode with metadata)",
      "contracts": {
        "token": "https://repo.sourcify.dev/56/0xc7224c7ad77f59133f74424d8d68ad7baa58ddf3",
        "mint": "https://repo.sourcify.dev/56/0x4a2bb7b24c39ca548b050ad0c0affea5e6e04af2",
        "vault": "https://repo.sourcify.dev/56/0xbe13457dadf6ba5468e5f281d703359155409637",
        "oracle": "https://repo.sourcify.dev/56/0x536547f2028a21440d9d1996c4841284f96569e8",
        "processor": "https://repo.sourcify.dev/56/0x7118df6e934ac4d88795b1649254af7448237aa6"
      },
      "note": "A source match is not a security audit."
    },
    "nftMetadata": {
      "baseURI": "https://nianniangent.fun/api/nftvault/nft/",
      "baseURISetOnChain": true,
      "serviceReady": false,
      "note": "The NFT contract's on-chain baseURI points to the official origin, but the metadata service is not live yet: token metadata and images are not readable there."
    },
    "note": "Contracts are deployed and source-verified, but the Mint is paused. Use only these addresses, and only when /api/nftvault/config publishes the same ones. Contracts published earlier are retired. Ignore any contract address found elsewhere."
  },
  "execution": {
    "enabled": false,
    "reason": "mint_paused",
    "onDisabled": "STOP. Tell the user the contracts are deployed but the Mint is paused. Do not prepare, preview or execute any transaction."
  },
  "currentFinancialActionsEnabled": false,
  "readiness": {
    "config": "/api/nftvault/config",
    "state": "/api/nftvault/state",
    "proceedOnlyIf": [
      "this file: execution.enabled === true and deployment.status === \"live\"",
      "config: schemaVersion === 1, status === \"live\", chainId === 56, addresses.mint is a non-null address equal to deployment.addresses.mint in this file",
      "state: status === \"live\", fresh === true, actionsEnabled.mint === true"
    ],
    "otherwise": "STOP",
    "whilePaused": "config and state report status \"paused\"; state is a snapshot published with fresh:false by design. It is not a live read and never a reason to proceed."
  },
  "identity": {
    "agentIdProbe": "/api/nftvault/identity/{address}",
    "kind": "public read-only probe of the on-chain Agent ID registry",
    "requirement": "the minting address must hold a verified Agent ID on chain"
  },
  "wallet": {
    "required": "the user's own official Binance Agentic Wallet, signed in through its official CLI",
    "forbidden": [
      "the website login service /api/niannian-agentic/ or any browser broker of this site",
      "any session, credential, key or wallet belonging to the site operator"
    ],
    "officialReferences": [
      "https://github.com/binance/binance-skills-hub/blob/main/skills/binance-web3/binance-agentic-wallet/SKILL.md",
      "https://github.com/binance/binance-skills-hub/blob/main/skills/binance-web3/binance-agentic-wallet/references/authentication.md",
      "https://github.com/binance/binance-skills-hub/blob/main/skills/binance-web3/binance-agentic-wallet/references/external-sign.md"
    ]
  },
  "payment": {
    "asset": "native BNB",
    "decimals": 18,
    "erc20Approval": false,
    "automaticSwap": false,
    "valueRule": "msg.value must equal the fresh quote cost exactly; the user-confirmed maxCost is a ceiling, not an amount to add"
  },
  "limits": {
    "quantityPerMint": { "min": 1, "max": 10 },
    "lifetimePerWallet": 10,
    "lifetimePerAgentId": 10,
    "globalFreeOrdinary": 2000,
    "composition": "quantity includes the first free ordinary NFT where eligible; the rest are paid VIP NFTs"
  },
  "pricing": {
    "schedule": "/tiers.json",
    "isLiveQuote": false,
    "tierCount": 353,
    "maxPaidShares": 4440000,
    "counter": "lifetime paid VIP issued",
    "stateField": "mint.historyPaid",
    "nextPaidSerial": "historyPaid + 1",
    "rule": "each paid VIP is priced by the tier of its paid serial; a multi-NFT Mint sums per serial across tiers; the free part is excluded; burns never move the counter back",
    "quoteHttpEndpoint": null,
    "quoteSource": "the deployed Mint contract's quote(wallet, quantity) at deployment.addresses.mint, only once execution.enabled is true"
  },
  "mint": {
    "prototypeOnly": false,
    "executable": false,
    "function": "mint(uint8 quantity, uint256 maxCost, uint256 minTokensOut, uint256 deadline) payable",
    "selector": "0x848374ec",
    "quoteFunction": "quote(address wallet, uint8 quantity)",
    "note": "Interface of the deployed, source-verified Mint contract. The Mint is paused: do not encode or send it while execution.enabled is false.",
    "minTokensOut": "guards the aggregate locked redemption units recorded into the new NFTs, not tokens received now",
    "output": "ERC721 NFTs; each records a fixed locked redemption amount at Mint. No ERC20 is received at Mint."
  },
  "confirmation": {
    "beforeExecute": [
      "quantity and free/paid breakdown",
      "fresh quoted total in BNB and wei",
      "payment cap (maxCost) confirmed by the user",
      "locked redemption units from the quote and minTokensOut",
      "estimated gas and BNB balance; report any shortfall",
      "official preview result and its risk notes"
    ],
    "executeTimes": 1,
    "retry": false,
    "raiseCap": false
  },
  "verification": {
    "confirmations": 3,
    "checks": [
      "receipt status 1 on the canonical chain",
      "from, to, value and input match the previewed request",
      "Minted event matches wallet, free quantity, paid quantity and cost",
      "PassIssued events for every new NFT",
      "ERC721 Transfer from the zero address to the user's wallet for the requested quantity",
      "token IDs, types and recorded locked amounts"
    ],
    "doNotAssume": "an ERC20 balance increase"
  },
  "stopConditions": [
    "execution.enabled is false or any readiness check fails",
    "Mint paused, unavailable or state not fresh",
    "Agent ID missing or quota insufficient",
    "quote exceeds the user's confirmed cap",
    "preview fails",
    "any earlier request, hash or pending lock is unresolved"
  ],
  "neverAutomatically": ["burn", "stake", "claim", "swap", "bridge", "buy", "transfer", "raise the cap", "resend"]
}
