# MIA 1.1.0 — Agent execution guide This guide describes MIA's deployed custom subscription contract. It does not authorize a transaction by itself. Use the user's connected wallet and current approval, and follow the installed official Binance Agentic Wallet skill. Never request a private key or seed phrase. ## Exact deployment Chain: BNB Smart Chain, chainId 56. Launch (mint / claim / refund): 0x72B4f4BDC42357C685E1C7F61a2bFA80FC59D8AC MIA token: 0x7Af46bf1fCa7d06903362057Af479ffee5772F49 USDT (18 decimals): 0x55d398326f99059fF775485246999027B3197955 Agent registry: 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F Pancake V2 pair: 0x0146F1B17f925a774Ad038180304476b6af658f0 Pancake V2 factory: 0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73 Fixed marketing wallet / pause guardian: 0x0e139A154f781ca96E57Bef8aCaa907c2962545C Deployment transaction: 0xdedc2200f41b03a1853945f760c53a2e50d8b5e8b1e5b0c4507e2c8f8090037a Deployment block: 130692216. Start: 2026-10-30T16:51:47Z (1793379107). End: 2026-11-06T16:51:47Z (1793983907). Source SHA256: 6bb1bf10c961ae77ecbf11d3ad4d175b8d5cffed7417c327472b883151413534 Resolve these files relative to this guide's own URL: - contracts/MIALaunch.abi.json (complete Launch ABI) - contracts/MIAToken.abi.json (complete token ABI) - contracts/MIA.sol (source) - contracts.json (deployment configuration) Read-only RPC options: https://bsc-dataseed.bnbchain.org or https://bsc-rpc.publicnode.com . Verify eth_chainId=0x38. Do not search for same-name tokens or substitute addresses. ## Wallet prerequisites Use a wallet-enabled Agent with the official Binance Agentic Wallet skill. This website does not connect, custody or sign for a wallet. Before constructing an external contract transaction, use the official wallet settings check: baw wallet settings --json. The official external-sign flow requires active Developer Mode; if disabled/expired, explain the Binance App setting and stop until the user enables it. Do not enable it silently or bypass a wallet risk block. Determine the connected BSC wallet address using the installed skill, then use that same address for identity checks, quotes, approvals and minting. BNB is needed for gas, USDT for subscription. A registry handle check is this contract's own eligibility gate; it is not a Four.meme Agent ID Exclusive launch or proof of one human per identity. ## Read before payment 1. Read latest block timestamp, Launch startsAt(), endsAt(), mintPaused(), finalized(), totalSharesMinted(), poolOpened(), token(), usdt(), pair() and agentRegistry(). Confirm the addresses above. Do not mint before startsAt or at/after endsAt, while paused/finalized, or after all 27,500 shares are sold. 2. Read identityOf(wallet). It validates the registry's handleOf(wallet) and ownerOfHandle(handle). A missing/mismatched identity or registry failure is a stop condition. Do not change identities or wallets to bypass the quota. 3. Read mintedByIdentity(identity). Total quota is 10 shares per identity; each transaction accepts an integer 1–10. Check requested quantity against both remaining quota and remaining overall shares. Do not reduce/increase the requested quantity without the user's agreement. 4. Obtain quoteMint(wallet, shares): returns cost, tokensOut, remainingQuota. Amounts are 18-decimal atomic units. The displayed website estimate is not a transaction quote. Never use floating point for calldata amounts. 5. If the pool is open and price checks fail, apply the observation procedure below. Do not guess a quote or retry transactions blindly. ## Price observation procedure The pool starts in the transaction that reaches 5,000 USDT. Ordinary later mints need a valid observation; the triggering order's crossing portion is handled by the contract itself. Read observationTime(), twapUpdatedAt(), ORACLE_WINDOW()=600 and ORACLE_MAX_AGE()=3600 against the latest block timestamp. - Less than 600 seconds since observationTime: wait; tell the user the earliest possible update time. Do not send an update that will revert. - 600–3600 seconds: updateObservation() can record a fresh TWAP. - More than 3600 seconds: updateObservation() resets the observation and invalidates the old TWAP. A full additional 600 seconds and a second update transaction are needed. Anyone can call updateObservation(), but it costs gas and needs user authorization. Preview it, show gas and ask for confirmation before execution. After its successful receipt, re-read state and obtain a new quote. A fresh TWAP does not guarantee acceptance: price deviation greater than 1%, stable reserves below 1,000 USDT, an order over 1% of stable reserves or insufficient inventory will still reject minting. Explain the failure and stop. Never trade against the pool or donate funds to force a price check to pass. There is no project-run automatic keeper included in this static website. ## Approve and mint Only approve USDT to the Launch address, never the token, pair or marketing wallet. USDT ABI: function balanceOf(address) view returns(uint256) function allowance(address,address) view returns(uint256) function approve(address,uint256) returns(bool) Check balance and allowance. If approval is required, approve only the quoted cost. If an existing nonzero allowance must be reset for token compatibility, preview and confirm approve(Launch,0), wait for success, then preview and confirm the exact new allowance. Do not grant unlimited approvals. After approval confirms, re-read quoteMint and remaining quota. If cost changed, obtain fresh approval/confirmation as needed; never silently increase spending. Mint ABI: function mint(uint256 shares,uint256 maxCost,uint256 minTokensOut,uint256 deadline) Set maxCost to the freshly confirmed quoted cost, with no extra spending buffer. Set minTokensOut to quoted tokensOut by default. This may revert if the pool price changes. Only use a lower minimum if the user explicitly agrees to that slippage and sees the exact minimum received; never silently set it to zero. Set deadline to min(latestBlock.timestamp + 300, endsAt - 1). Refresh the quote if the deadline or preview expires. All calls use native transaction value 0. Subscription is USDT transferFrom inside mint, not a direct USDT/BNB payment to an address. Simulate the exact mint from the same paying wallet. Insufficient USDT allowance must be resolved before simulating the mint successfully. If the simulation fails, stop and explain; do not execute it. Show the user shares, exact USDT spend, MIA output/minimum, whether MIA is immediately delivered or claimable later, destination contract, gas and wallet warnings. Execute only after approval. ## Official external-sign flow Read the installed skill's current references/external-sign.md before use. Syntax verified against the official Binance repository when this site was prepared: baw contract-call preview --binanceChainId 56 --from --to --value 0 --inputData --json Then, only for a successful unexpired preview and after user confirmation: baw contract-call execute --requestId --json Use the target contract and calldata for the specific action; do not copy placeholders literally. Never bypass preview failures or security warnings. A pending App confirmation is not a successful blockchain transaction. Confirm receipt status=1 and decode events/state before reporting success. If the response is uncertain, check the original transaction hash before sending anything again. ## Claim Early subscriptions record claimable MIA. They do not immediately transfer MIA. Once poolOpened() is true, the same paying wallet can call claim() if claimable(wallet)>0. No USDT approval or payment is needed, only gas. Read the amount; preview claim(); show it and gas; ask for confirmation; execute; verify receipt and Claimed event. Later subscriptions transfer MIA during mint and may have nothing to claim. ## Failed-launch refund Only when latest timestamp >= endsAt AND poolOpened()==false AND refundable(wallet)>0: The original paying wallet calls refund(). It receives the full refundable USDT amount at that same address. The method accepts no replacement recipient and no shares argument. No USDT approval or transfer is needed. Pause/finalization do not block an otherwise valid refund; the registry need not be consulted to refund an existing payment. Preview refund(), show the amount and gas, request confirmation, execute, then verify Refunded and receipt status. A repeated refund reverts. Never attempt a failed-launch refund after the pool opened. ## Economic and permission facts First 5,000 shares: 1 USDT each and 1,000 MIA per share. Then share price rises 0.20 USDT per 2,500-share tier to 2.80 USDT; 27,500 total shares collect at most 50,000 USDT. A crossing order pays each applicable tier separately. After pool opening, MIA allocation uses 97% of the guarded spot price. Protocol liquidity uses 80% of paid USDT and MIA at the pool ratio; remaining 20% is claimable only by the fixed marketing wallet. Project LP is minted directly to 0x000000000000000000000000000000000000dEaD. Third-party LP and Pancake protocol-fee LP are separate. Official-pair buys pay 1%, sells 2%, directly in MIA to the marketing wallet. Ordinary wallet transfers and other pairs are not automatically taxed. Discounted minting can still produce a positive pre-gas resale spread. The fixed guardian can pause/resume new mints; there is no renounce method. It cannot withdraw project LP or block normal trading, claims or eligible refunds. There are no upgrade, extra mint, arbitrary withdrawal, marketing-address replacement or tax-change setters. At expiry or sold-out, anyone may call finalize() to burn unused inventory; it does not burn outstanding user claims. This requires a gas-paying transaction and is not a scheduled automatic action. It is outside an ordinary user's mint request unless specifically requested. claimMarketing() is also outside an ordinary mint request; it only pays the already fixed marketing wallet. Do not call it as a prerequisite to mint, claim or refund. MIA is independent and has not received an independent security audit. Read the actual chain state, do not rely on branding or this guide as a safety guarantee.