{
  "schema": "primo-vault.agent.v1",
  "version": "1.2.1",
  "updatedAt": "2026-11-02",
  "name": "币安金库",
  "affiliation": "Independent project; not affiliated with Binance. Uses the official Binance Agentic Wallet only as documented publicly.",
  "site": "https://binancejinku.fun",
  "instructions": "https://binancejinku.fun/skill.md",
  "manifest": "https://binancejinku.fun/agent.json",
  "playerGuide": "https://binancejinku.fun/ai-mint.html",
  "notAuthorization": "Reading this manifest or a copied prompt is not permission to transact. Every state-changing step needs explicit user confirmation in the conversation.",
  "chain": { "chainId": 56, "hexChainId": "0x38", "name": "BNB Smart Chain", "nativeSymbol": "BNB", "nativeDecimals": 18 },
  "deploymentId": "zh-vault-runtime-repair-r1-20261101",
  "bundleHash": "e75ddadcc3ccfab0a214e46126619cf35139dbed86560316e069698da53c6a7c",
  "contracts": {
    "mint": "0x0d4C6158AC75D6ca0926E7ECc87C6810184cF2f9",
    "token": "0x69D853254795BAF12ED11661b4F22689b9132eE6",
    "vault": "0x562fB1bebadeC7D7FCf2fbc5E2185612Bcb9768e",
    "oracle": "0xAcb58425173dFd4C09b50b526228250B20529dCE",
    "processor": "0x3Ae43009375969D876A0E7B7999d9D977f382Ca1",
    "pair": "0x1F8e0bD67D03cE5a4699E0DD2AF8F77003E6fbfB",
    "wbnb": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
    "treasury": "0xF588d2efBCdc533C0f1834E43732d5dB3bF17EE1",
    "lpDestination": "0x000000000000000000000000000000000000dEaD",
    "agentIdRegistry": "0x60b9262456de011f7d15a54cdd8c48baaa8b022f"
  },
  "callTargets": ["mint"],
  "runtimeSha256": {
    "token": "de3fc18df2e0eada37e9fe6b2320f9e6f0e385ed734e4ed4eb5bce5992982760",
    "mint": "eff733540e2a171bb5f2ea34db7b3cc83f14ad34fcb990e49d0274c6dff41849",
    "vault": "2b55fbba8f646afd950b3758851ab033b83b725bce643c60d84b1edc5627e981",
    "oracle": "9007e0361d850cac3413abb716180b295995c858496d7bcacdff3463b98460cd",
    "processor": "9481aeef7310eb2ec0222af4e1df177270812cd2f34fced6a393ae2242a49523"
  },
  "runtimeSha256Algorithm": "eth_getCode(address, \"latest\") -> strip 0x and hex-decode to the original bytes -> SHA-256(bytes) as lowercase hex; compare with runtimeSha256[name]. Do not hash the ASCII hex string; not Keccak. Empty code (0x) or any mismatch: stop.",
  "api": {
    "method": "GET",
    "auth": "none",
    "base": "https://binancejinku.fun/api/firstmint/",
    "responseSchemaVersion": 5,
    "endpoints": {
      "config": "config",
      "state": "state",
      "wallet": "wallet?address={address}",
      "quote": "quote?address={address}&quantity={quantity}",
      "prepare": "prepare?action=mint&address={address}&quantity={quantity}&maxCost={actualQuoteCostWei}&slippageBps=100&expectedTokenId={tokenId}&expectedBundleHash=e75ddadcc3ccfab0a214e46126619cf35139dbed86560316e069698da53c6a7c",
      "transaction": "transaction?hash={hash}"
    },
    "doNotCall": ["/api/zh-vault-agentic/ (this website's per-browser wallet broker; not a public or external-AI API)"],
    "freshness": {
      "maxAgeSeconds": 30,
      "maxFutureSkewSeconds": 10,
      "appliesTo": ["state", "wallet", "quote", "prepare"],
      "notApplicable": ["config", "transaction"],
      "requires": ["schemaVersion=5", "fresh=true", "block.timestamp at most 30 s old and at most 10 s in the future versus your clock"],
      "pins": "Deployment pins are NOT a freshness rule. Each endpoint's own pins are listed in perEndpoint.<name>.ownPins and must be present in that response itself; never fill a missing pin from another response.",
      "missingFields": "Any field required for that endpoint in perEndpoint that is missing counts as failure, never as healthy."
    },
    "perEndpoint": {
      "config": {
        "ownPins": ["deploymentId", "bundleHash"],
        "chain": "chainHex = \"0x38\"",
        "topLevelBlock": false,
        "freshnessCheck": false,
        "verify": "deploymentId and bundleHash equal this manifest; deploymentState = \"verified\"; addresses equal contracts; identityGate.registry = contracts.agentIdRegistry. identityGate.checkedAtBlock is informational, not a freshness clock.",
        "role": "Confirms the deployment. Never a Mint permission and never a source for pins missing from another response."
      },
      "state": {
        "ownPins": ["chainId = 56", "deploymentId", "bundleHash"],
        "fresh": true,
        "block": ["number", "hash", "timestamp"],
        "freshnessCheck": true,
        "gate": "Mint stops unless ALL: mint.paused = false; mint.globallyEnabled = true; top-level gateVerified = true AND identityGate.contractVerified = true with identityGate.requiredForMint = true (an identityGate.error such as IdentityBudgetUnavailable means not verified); not market.scheduled while market.tradingOpen = false; after opening, chain time >= T0 and market.oracle.ready = true. Missing or false is never open.",
        "time": "\"0\" in market.openAt or rewards.firstEpochStart means not set, not 1970.",
        "doNotUse": "actionsEnabled.mintEnabled (anonymous; false without an address)",
        "role": "Global Mint status. Its pins must be in the state response itself; never fill them from GET config."
      },
      "wallet": {
        "ownPins": [],
        "fresh": true,
        "block": true,
        "freshnessCheck": true,
        "walletAccess": "walletAccess.walletAddress = own address",
        "role": "Supplementary identity / balance read. It has no deploymentId or bundleHash; do not demand them. Never replaces the pinned quote or prepare."
      },
      "quote": {
        "ownPins": ["chainId = 56", "deploymentId", "bundleHash"],
        "fresh": true,
        "block": true,
        "freshnessCheck": true,
        "walletAccess": "walletAccess.walletAddress = own address",
        "role": "Canonical snapshot (quote + walletAccess + block) for one wallet and quantity."
      },
      "prepare": {
        "ownPins": ["chainId = 56", "deploymentId", "bundleHash"],
        "fresh": true,
        "block": true,
        "freshnessCheck": true,
        "walletAccess": "walletAccess.walletAddress = own address, identityStatus = valid, canMint = true, same tokenId as the quote",
        "simulationPassed": true,
        "verify": "maxCost sent = EXACT quote.cost; transaction.value = EXACT cost in raw wei; deadline <= chain time + 300 s; decode calldata (see prepareFields, prepareRules, mint.minTokensOutCheck).",
        "role": "Final step before preview; must itself be fresh and pass simulation. Paused returns 409 with no transaction."
      },
      "transaction": {
        "topLevelBlock": false,
        "freshnessCheck": false,
        "verify": ["transaction.hash", "receipt.transactionHash", "receipt.blockNumber", "receipt.blockHash", "from", "to", "receipt.status", "confirmations"],
        "role": "Judge by the receipt, plus an independent BSC receipt read for the Minted and AgentMinted events (receiptPolicy). Not a freshness clock."
      }
    },
    "snapshot": "Do not require config/state/wallet/quote to share one block. Use the quote response (quote + walletAccess + block) as the canonical snapshot for one wallet and quantity; the final prepare must pass fresh simulation.",
    "errors": { "shape": "non-2xx with error{code,message,contractError,retryable}", "409": "business refusal (e.g. Mint paused); no transaction", "400": "bad parameters", "429": "rate limited" },
    "quoteFields": [
      "address", "block.number", "block.timestamp", "chainId", "deploymentId", "bundleHash",
      "quote.quantity", "quote.freeQuantity", "quote.paidQuantity", "quote.firstPaidShare", "quote.lastPaidShare",
      "quote.cost", "quote.liquidityBnb", "quote.rewardsBnb", "quote.treasuryBnb",
      "quote.freeTokens", "quote.paidUserTokens", "quote.lpTokens", "quote.createsPool", "quote.reachesThreshold",
      "userTokensRaw", "mintEnabled", "blockedReasons[].code", "blockedReasons[].message", "walletAccess"
    ],
    "walletAccessFields": [
      "walletAddress", "identityStatus (valid|none|unavailable)", "handle", "tokenId", "walletMinted", "agentMinted",
      "walletRemaining", "agentRemaining", "remaining", "walletFreeClaimed", "agentFreeClaimed", "canMint", "mintReason"
    ],
    "prepareFields": [
      "action", "simulationPassed", "address", "chainId", "deploymentId", "bundleHash", "block", "walletAccess",
      "transaction.chainId", "transaction.from", "transaction.to", "transaction.value (0x hex wei)", "transaction.data",
      "quote.quantity", "quote.cost", "userTokensRaw", "minTokensOutRaw", "deadline"
    ],
    "transactionFields": ["status (success|failed when final)", "transaction.hash", "transaction.from", "transaction.to", "receipt.transactionHash", "receipt.blockNumber", "receipt.blockHash", "receipt.status", "confirmations"],
    "prepareRules": {
      "maxCost": "EXACT quote.cost raw decimal integer; not +1%. QuoteTermsChanged means stop, re-quote and re-confirm.",
      "deadline": "default chain timestamp + 300 s; never longer",
      "slippageBps": "default 100 (1%), API maximum 500; only a user-approved value, never widened automatically",
      "userBudget": "a separate local ceiling compared against quote.cost; never sent as msg.value or maxCost"
    }
  },
  "mint": {
    "signature": "mint(uint8,uint256,uint256,uint256)",
    "selector": "0x848374ec",
    "args": ["quantity (1..10)", "maxCost = exact quote.cost wei", "minTokensOut = minTokensOutRaw", "deadline (seconds) <= chain now + 300"],
    "stateMutability": "payable",
    "transactionValue": "EXACT quote.cost in wei (prepared transaction.value). Zero only when every requested share is genuinely free per the fresh quote. Never the user budget or a padded ceiling.",
    "minTokensOutCheck": "floor(userTokensRaw * (10000 - slippageBps) / 10000) <= minTokensOut <= userTokensRaw",
    "approvalNeeded": false,
    "swapRequired": false,
    "permitUsed": false,
    "gasSeparate": true,
    "abi": [
      "function mint(uint8 quantity,uint256 maxCost,uint256 minTokensOut,uint256 deadline) payable returns (uint256 userTokens)",
      "function quote(address wallet,uint8 quantity) view returns (tuple(uint8 quantity,uint8 freeQuantity,uint8 paidQuantity,uint32 firstPaidShare,uint32 lastPaidShare,uint256 cost,uint256 liquidityBnb,uint256 rewardsBnb,uint256 treasuryBnb,uint256 freeTokens,uint256 paidUserTokens,uint256 lpTokens,bool createsPool,bool reachesThreshold))",
      "function agentOf(address wallet) view returns (uint256 agentId,string handle,bool valid)",
      "function mintPaused() view returns (bool)",
      "function walletMinted(address) view returns (uint8)",
      "function agentMinted(uint256) view returns (uint8)",
      "function walletFreeClaimed(address) view returns (bool)",
      "function agentFreeClaimed(uint256) view returns (bool)",
      "function firstEpochStart() view returns (uint64)",
      "event Minted(address indexed wallet,uint8 freeQuantity,uint8 paidQuantity,uint32 paidAfter,uint256 cost,uint256 userTokens,uint256 lpTokens,uint256 liquidityBnb,uint256 rewardsBnb,uint256 treasuryBnb,uint256 lpMinted)",
      "event AgentMinted(address indexed wallet,uint256 indexed agentId,uint8 quantity,uint8 freeQuantity)"
    ],
    "registryAbi": [
      "function handleOf(address) view returns (string)",
      "function ownerOf(uint256) view returns (address)"
    ],
    "identity": "tokenId = uint256(keccak256(raw UTF-8 bytes of handle)); no trim, no lowercase, no '.ai' appended. Registry ownerOf(tokenId) must equal the signing wallet.",
    "errors": {
      "0x856cd735": "AgentLimit",
      "0xc49f5afe": "AgentRegistryUnavailable",
      "0x69bb9dc4": "BadConfiguration",
      "0x888e58a8": "BadQuantity",
      "0x11c56c89": "BadShare",
      "0x323513bd": "CannotOpen",
      "0x3c5d8167": "DirtyReserves",
      "0x203d82d8": "Expired",
      "0xd2f28957": "FreeAllocationExhausted",
      "0x569e8c11": "IncorrectPayment",
      "0x1fff9681": "InvalidLiquidity",
      "0x2083cd40": "InvalidPool",
      "0x04ed729c": "IssuanceBudget",
      "0xd7d248ba": "MintPaused",
      "0xf4b3b1bc": "NativeTransferFailed",
      "0x2611416a": "NoAgent",
      "0x8cf65e50": "NotDev",
      "0x8ac92366": "PaidSharesExhausted",
      "0x3ee5aeb5": "ReentrancyGuardReentrantCall",
      "0x18ac5aec": "RewardsSyncRequired(uint256)",
      "0x5274afe7": "SafeERC20FailedOperation(address)",
      "0x7dd37f70": "Slippage",
      "0x0d62ac51": "ThresholdCrossing",
      "0xd865c638": "TimeOverflow",
      "0xf15f4a1e": "WaitForFirstEpoch",
      "0x884ee2f7": "WaitForOpening",
      "0x5426a580": "WalletLimit"
    }
  },
  "wallet": {
    "provider": "official Binance Agentic Wallet CLI (baw)",
    "package": "@binance/agentic-wallet",
    "observedOfficialSkillVersion": "1.15.0",
    "observedRequiredCliVersion": "1.12.0",
    "session": "The user's own local CLI session; independent of this website's cookies, broker or any operator wallet.",
    "developerModeRequired": "for contract-call preview/execute only; enabled by the user in the Binance App; check devMode.enabled and devMode.expiresAt before building calldata",
    "commands": {
      "status": "baw wallet status --json",
      "address": "baw wallet address --json",
      "agentId": "baw wallet agent-id --json",
      "settings": "baw wallet settings --json",
      "lock": "baw wallet tx-lock --binanceChainId 56 --json",
      "pending": "baw wallet tx-history --binanceChainId 56 --type pending --json",
      "preview": "baw contract-call preview --binanceChainId 56 --from <ownAddress> --to 0x0d4C6158AC75D6ca0926E7ECc87C6810184cF2f9 --value <actualQuoteCostWei> --inputData <exactDecodedMintCalldata> --json",
      "execute": "baw contract-call execute --requestId <successfulPreviewRequestId> --json"
    },
    "valueUnit": "--value is raw wei (decimal or 0x hex), never human-readable BNB",
    "gas": "No gas-price flags. --gasLimit only if the user explicitly asks.",
    "confirmation": "Show parsedTx, simulation, risks, address risks and authorityChanges; execute once only after explicit user confirmation of that preview, even if requireConfirmation=false. PENDING_CONFIRMATION needs App approval by the user."
  },
  "flow": [
    "Official wallet preflight: version, connected, unlocked, no unresolved request; developer mode before any contract-call.",
    "Own BSC address and Agent ID; GET quote for the requested quantity; verify freshness, deployment, identity (valid, canMint), quota and mintEnabled with no blockedReasons.",
    "Show quantity, free/paid, exact BNB cost, tokens, gas extra; ask the user for a total BNB ceiling.",
    "GET prepare with maxCost = exact quote.cost and expectedTokenId; verify every field and decode calldata.",
    "contract-call preview; show it; get explicit confirmation of this preview.",
    "Record intent, execute once; never resend while unresolved.",
    "Verify receipt status 1, 12 confirmations, exact tx fields and the Minted + AgentMinted events."
  ],
  "rules": {
    "quantityPerCall": "1..10",
    "walletLifetimeLimit": 10,
    "agentIdLifetimeLimit": 10,
    "freeGlobalMax": 2000,
    "freeTokensPerShare": "100000",
    "freeEligibility": "First-ever mint only: address and Agent ID have no previous mint and no free claim, global free < 2000, opening not scheduled. Never assume; use the fresh quote.",
    "opening": "free + paid total 10,000 schedules trading at the strictly next UTC hour; all Mint paused between scheduling and opening; developer may open early with real liquidity.",
    "postOpenMint": "Mint waits until T0 = ceilHour(openAt + 1h) (about 1-2 h after opening) and a valid 30-minute TWAP with newest observation <= 5 min and spot deviation <= 10%.",
    "paidCurve": "353 tiers, 0.002 BNB initial, 0.01614 BNB max, 4,440,000 lifetime paid shares; only paid shares advance the tier",
    "paidSplitBps": { "liquidity": 7000, "rewards": 2000, "treasury": 1000 },
    "lp": "LP tokens to 0x000000000000000000000000000000000000dEaD",
    "tax": "official pool buy 2% and sell 2% in tokens; converted BNB split half rewards, half treasury",
    "rewards": "10% of undistributed pool released per full hour to effective stakers; first distribution T0 + 1h; manual claim"
  },
  "stopConditions": [
    "Mint paused (MintPaused, state mint.paused, prepare 409)",
    "Mint globally closed (state mint.globallyEnabled=false)",
    "opening scheduled and waiting (WaitForOpening: openAt set and chain time < openAt)",
    "IncorrectPayment (quote cost > maxCost or msg.value != quote cost): payment parameters do not match the quote; fresh quote, prepare and confirmation",
    "post-opening wait before T0 or invalid price observation (WaitForFirstEpoch)",
    "NoAgent / AgentIdRequired / Agent ID owner mismatch / registry unavailable / identity inconsistent",
    "wallet or Agent ID limit, quantity above remaining, or pre-opening batch crossing 10,000 (ThresholdCrossing)",
    "stale quote, wrong chain, deployment, bundleHash or runtime",
    "insufficient BNB for exact cost plus gas",
    "developer mode off or expired, wallet locked, official risk block, preview failed or expired",
    "previous order or hash pending or unknown: inspect the original only, no resend",
    "QuoteTermsChanged / Slippage / free share lost / cost above approved ceiling: new quote and new user confirmation; never raise a budget automatically"
  ],
  "receiptPolicy": {
    "confirmations": 12,
    "kind": "client completion rule of this guide; not a protocol minimum",
    "checks": [
      "receipt status 1 on the canonical block",
      "same chain, from, to, exact value and exact calldata as confirmed",
      "exactly one Minted and one AgentMinted from the Mint contract matching wallet, Agent ID, quantity, free/paid, cost and userTokens >= minTokensOut",
      "free-only mint need not create LP or rewards income",
      "orderId, PENDING_CONFIRMATION, BROADCASTED or a hash alone is never success"
    ]
  },
  "promptTemplates": {
    "quoteFirst": {
      "zh": "读取 https://binancejinku.fun/skill.md 和 https://binancejinku.fun/agent.json，按其中步骤，用我本人的官方 Binance Agentic Wallet 在 BNB 智能链（56）为「币安金库」铸造 {quantity} 份。铸造合约 0x0d4C6158AC75D6ca0926E7ECc87C6810184cF2f9，用原生 BNB 支付，不需要兑换、授权或 Permit。先做官方钱包预检（CLI 已连接、钱包未锁定、开发者模式有效），再读取我的 BSC 地址和 .ai Agent ID，用 GET quote 实时询价，告诉我：免费/付费份数（第 1 份是否免费只以报价为准）、确切 BNB 花费、最少到手、Gas 另计，等我确认总预算。我确认后再 GET prepare 取新交易，逐项解码核对链、发送方、合约、value 等于报价 cost（wei 整数）和全部参数，再 contract-call preview，把解析结果和风险给我看，我确认这一笔后只执行一次。铸造暂停、等待开盘或首个分红周期、Agent ID 不属于我、额度不足、报价过期、预览失败或前一笔结果未明时，停下告诉我原因，不重发。按成功回执、Minted 与 AgentMinted 事件和 12 个确认验收。不要向我要私钥、助记词或网站登录。",
      "en": "Read https://binancejinku.fun/skill.md and https://binancejinku.fun/agent.json and follow them. Use my own official Binance Agentic Wallet on BNB Smart Chain (56) to mint {quantity} share(s) of 币安金库. Mint contract 0x0d4C6158AC75D6ca0926E7ECc87C6810184cF2f9, paid in native BNB; no swap, approval or Permit. Run the official wallet preflight (CLI connected, wallet unlocked, Developer Mode valid), read my BSC address and .ai Agent ID, then GET a live quote and tell me the free/paid split (whether the first share is free comes only from the quote), the exact BNB cost, minimum tokens and that gas is extra; wait for me to confirm a total budget. After I confirm, GET prepare for a fresh transaction, decode and check chain, sender, contract, value = quote cost (integer wei) and every argument, run contract-call preview, show me the parsed result and risks, and execute once only after I confirm that transaction. Stop and tell me why if Mint is paused, waiting for opening or the first rewards epoch, the Agent ID is not mine, quota is insufficient, the quote is stale, preview fails or an earlier request is unresolved; never resend. Verify by a successful receipt, the Minted and AgentMinted events and 12 confirmations. Never ask me for private keys, seed phrases or website logins."
    },
    "copyBehavior": "The website copy button writes only this text to the clipboard. It never connects a wallet, shows a QR code, previews, executes, approves or calls the website broker. An invalid quantity disables copying; it is never silently replaced."
  },
  "references": {
    "officialWalletSkill": "https://github.com/binance/binance-skills-hub/blob/main/skills/binance-web3/binance-agentic-wallet/SKILL.md",
    "externalSign": "https://github.com/binance/binance-skills-hub/blob/main/skills/binance-web3/binance-agentic-wallet/references/external-sign.md",
    "mintOnBscScan": "https://bscscan.com/address/0x0d4C6158AC75D6ca0926E7ECc87C6810184cF2f9"
  }
}
