# $DANTA fair mint > $DANTA is the egg-tart community token of the danta family on BNB Smart Chain (chain id 56). Holders of a .ai Agent ID mint shares straight from the mint contract. 1 share = 1,000,000 DANTA. The first 10,000 shares cost 0.0015 BNB each. When share #10,000 is sold, the contract opens the DANTA/WBNB PancakeSwap V2 pool by itself and sends the LP tokens to the dead address. This file tells AI agents how to buy safely. Official page: https://dantatoken.deed.page/ Mint contract (DantaMint): 0x61E2f100e1dBB8876664419D0f08d6B6c1A97a18 DANTA token: 0xfd9cF3606FDc9B479Ac64e01c0D2C4Fe7ecB21D9 Agent ID registry (.ai): 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F danta pixel NFT: 0x7325477C78838F2E9e160d35C0cae95dE22816b1 ยท danta V2 NFT: 0xcEebc883f922b861841c3e5E47aEb55D3C6f13e9 Trust only the addresses on the official page. Independent project, not affiliated with Binance or SPACE ID. No returns are promised. ## Links - [Official page](https://dantatoken.deed.page/): live progress, connect-wallet buy, contract addresses - [Agent skill](https://dantatoken.deed.page/skill.md): step-by-step buy skill for agents - [Mint contract ABI](https://dantatoken.deed.page/abi.json) - [Verified source (Sourcify)](https://repo.sourcify.dev/56/0x61E2f100e1dBB8876664419D0f08d6B6c1A97a18) - [danta pixel](https://dantapixel.deed.page/): NFT that raises your $DANTA cap ## Rules - Only the owner of a .ai Agent ID can mint: mint() checks AgentID.ownerOf(agentTokenId) == msg.sender (else NotAgentOwner, 0x390772fc). - agentTokenId = uint256(keccak256(utf8(label))), where label = AgentID.handleOf(wallet) without ".ai" (e.g. "ainut" for ainut.ai). Confirm with AgentID.ownerOf(agentTokenId). - Cap per Agent ID: 20 shares, +2 per danta pixel NFT registered (max 5), +1 per danta V2 NFT registered (max 5) = max 35. Each NFT can boost a cap once, ever; you keep the NFT. Pass unused, owned NFT ids in pixelIds / v2Ids; they are registered first in the same tx, so the extra shares can be bought in that same call. - Price: quote(shares) returns the exact wei for the next `shares`. Tiers: 0.0015 BNB (shares 1-10,000), 0.002 (to 40,000), 0.0025 (to 100,000). Overpayment is refunded in the same tx. - Before the pool: 1,000,000 DANTA per share minted to you right away (not transferable until the pool opens). A buy may not cross share #10,000 (CrossesOpen(maxNow)). - At share #10,000: pool opens automatically with 80% of BNB raised, LP sent to 0x...dEaD; trading starts. - After the pool: minting continues at the tier price; 80% goes to the pool and you get DANTA at the pool price +1%. - Refund: if the pool is not open by 2026-12-31 12:00 UTC+8 (refundDeadline() = 1798689600), minting stops and each minter can call refund() to get back 100% of the BNB they paid. - No token approval is ever needed. ## Interface function status() view returns (bool open, bool pool, uint256 sold, uint256 nextPrice, uint256 reserve, uint256 deadline) function quote(uint256 shares) view returns (uint256) function mintableNow(uint256 agentTokenId) view returns (uint256) function quotaLeft(uint256 agentTokenId) view returns (uint256) function tokensPerShare() view returns (uint256) // 1e24 (1,000,000 DANTA, 18 decimals) function pixelUsed(uint256 id) view returns (bool) ; function v2Used(uint256 id) view returns (bool) function mint(uint256 agentTokenId, uint256 shares, uint256[] pixelIds, uint256[] v2Ids, uint256 minTokensOut) payable returns (uint256) // selector 0x1f295d17 function refund() AgentID: function handleOf(address) view returns (string) ; function ownerOf(uint256) view returns (address) ## minTokensOut - Pool not open yet: use shares * tokensPerShare() (exact amount; e.g. 2 shares -> 2000000000000000000000000). - Pool open: simulate first and use about 99% of the simulated tokensOut. ## Steps for an agent 1. handleOf(myWallet) -> label; agentTokenId = keccak256(label); check ownerOf(agentTokenId) == myWallet. Stop if no Agent ID. 2. status(): stop if open is false. mintableNow(agentTokenId) -> max shares now (plus 2 per unused danta pixel / 1 per unused V2 you will register). 3. value = quote(shares). 4. Encode mint(agentTokenId, shares, pixelIds, v2Ids, minTokensOut), e.g. cast calldata "mint(uint256,uint256,uint256[],uint256[],uint256)" "[]" "[]" 5. Simulate (eth_call or baw preview) with that value from myWallet. If it reverts, report the reason and stop. 6. Show the user contract, shares, value and gas, and wait for explicit confirmation. Then send and report the tx hash. Binance Agentic Wallet example (Developer Mode on): baw contract-call preview --binanceChainId 56 --from --to 0x61E2f100e1dBB8876664419D0f08d6B6c1A97a18 --value --inputData --json baw contract-call execute --requestId --json