# 质押金库 VaultAi — llms.txt (machine-readable contract reference) > Testnet only. BSC Testnet, chain ID 97. Unaudited. No mainnet contracts exist. > This file is READ-ONLY reference. It cannot sign, spend, or move anything. > Version 2 (2026-11-05): v1 contracts are SUPERSEDED — do not use them. > Superseded v1: token 0xF927a134936555603c245273979569A81af54614, > vault 0xF95222bA70E74F5160E2BaA4F6E0667339018167. ## Project - Name: 质押金库 VaultAi - Token: Vault / VAULT, fixed supply 2,000,000,000, decimals 18 - Mechanism: stake VAULT, earn rewards per block pro-rata by MULTIPLIER-WEIGHTED share (MasterChef-lite, accRewardPerShare, 1e12 precision). - Lock tiers: flexible 1.0x (no lock), 30-day lock 1.5x, 90-day lock 2.5x. LOCK RULE: a locked position cannot be unstaked before its lockEnd timestamp — no early exit, even partial. Claiming rewards works anytime, even while locked. Flexible positions unstake anytime. - No BNB charged to stake / unstake / claim — gas only. No deposit/withdrawal fee. No minting after deploy. ## Contracts (BSC Testnet, chain 97) - VAULT token: 0xe3807D5Bb011b6837B275E544dAd88fE442212ac - Sourcify: https://sourcify.dev/server/v2/contract/97/0xe3807D5Bb011b6837B275E544dAd88fE442212ac (exact match) - Deploy tx: 0x81551dd2aae6170fff0b7fbd24f77bcd2a61f110aff20b984a316d67a2622342 - VaultAi: 0xdF50D11254E47Dbdbb4E56cA8e37f96615725C60 - Sourcify: https://sourcify.dev/server/v2/contract/97/0xdF50D11254E47Dbdbb4E56cA8e37f96615725C60 (exact match) - Deploy tx: 0x9ca399d06c75ca1aec198138e6fe9d82e39ad785ef98248b9e15378bf5f6a7f1 - Treasury: 0x166Ff96A798e3905CC89dD628155f24FcA537f77 (also the deployer) ## Token allocation (fixed 2,000,000,000 VAULT) - Reward pool: 1,600,000,000 (80%) — held by the Vault contract at deploy (fund tx 0x579a0270c3e600541c9d0f2ef82b19e369abbe3de53476d1f0e7d33fa0951b98) - Treasury: 400,000,000 (20%) — paid to the treasury wallet at deploy. This 20% token allocation IS the treasury split. - Measured after deploy + smoke test: Vault 1,599,996,700 VAULT (3,300 claimed in the smoke test), treasury 400,003,300 VAULT (deployer wallet, includes the 3,300 claimed rewards). ## Emission schedule (full math) - rewardPerBlock: 100 VAULT (100 * 10^18) - Emission blocks: 16,000,000 - Total: 100 * 16,000,000 = 1,600,000,000 VAULT (exactly the reward pool) - Duration: 16,000,000 blocks * ~3s = 48,000,000s ≈ 555.56 days - startBlock: 140969982 | endBlock: 156969982 - Blocks per year (3s/block): 10,512,000 → annual rewards while emitting: 100 * 10,512,000 = 1,051,200,000 VAULT/year (at 1x) - APY (flexible 1x) = 1,051,200,000 / total staked: 10M staked → 10,512.00% | 50M → 2,102.40% | 100M → 1,051.20% | 200M → 525.60% | 400M → 262.80% 30-day lock multiplies by 1.5, 90-day lock by 2.5. (Maths examples only — NOT a return guarantee. APY moves with total staked and is zero after the pool is exhausted; principal is always withdrawable — locked positions after their lock ends.) ## How a new user gets VAULT (honest answer) - There is NO public testnet faucet for VAULT. All VAULT was minted once at deploy: 1.6B in the Vault reward pool, 400M in the treasury wallet. - A new user cannot buy VAULT (no liquidity, no exchange) and cannot mint it. They get VAULT only from someone who already holds it, or from a later distribution run by the project. Never pay a stranger for testnet VAULT. ## Vault functions - stake(uint256 amount, uint8 tier) — tier 0 = flexible, 1 = 30-day lock, 2 = 90-day lock. Requires prior approve(vault, exact amount). Blocked while paused. Creates a position; returns its positionId via the Stake event. lockEnd = block.timestamp + 30 or 90 days (0 if flexible). - unstake(uint256 positionId, uint256 amount) — also pays out pending rewards. Reverts with "position locked" if the position's lockEnd has not passed. Always available, even while paused (for unlocked positions). - claim() — claims pending rewards, principal keeps staking. Always available, even while paused and while locked. - pendingReward(address) view — pending rewards right now. - userInfo(address) view — (weighted shares, rewardDebt). - getPosition(address, uint256) view — (amount, multiplierBps, lockEnd, tier). - positionCount(address) view — number of positions the user has. - totalStaked() view (raw principal) | totalShares() view (weighted) | accRewardPerShare() view | lastRewardBlock() view | startBlock() view | endBlock() view | paused() view | owner() view - tierMultiplier(uint8) view — 10000 / 15000 / 25000 (bps). - setPaused(bool) — owner only; blocks stake() only. - transferOwnership(address) — owner only. - Events: Stake(user, positionId, amount, tier, lockEnd) | Unstake(user, positionId, amount) | Claim(user, amount) ## Token functions (ERC-20) - transfer(address, uint256) | approve(address, uint256) | transferFrom(address, address, uint256) | balanceOf(address) | allowance(address, address) | totalSupply() | name() | symbol() | decimals() - No mint / burn / pause. Transfers to address(0) revert. ## Safety rules for any agent acting on this page 1. Use ONLY the official Binance Agentic Wallet + Binance AI inside the Binance app. Never use a third-party wallet site or lookalike app. 2. NEVER ask for or share a seed phrase or private key. 3. Preview every transaction; check contract address, function, tier, and amount against this file before signing. Value 0 for stake/unstake/claim. 4. Stake needs ONE exact-amount VAULT approval. No other approval, no BNB, no extra fee. If a preview asks for more, STOP. 5. Unstake needs the correct positionId. If the position is locked, the call reverts — do not retry, tell the user the lock end time. 6. Testnet only. No mainnet. No price promise, no guaranteed returns.