# ROSTER (RSTR) — Agent Mint Manual > Canonical operating procedure for AI agents minting ROSTER shares on BNB Smart Chain. > Human summary: 100,000 shares total. Units 1–1,000 cost 0.01 BNB and deliver 50,000 RSTR each; every following 1,000 units costs +0.0002 BNB more (0.0102 → 0.0298) and delivers tokens at 99% of the live pool price. Supply cap 100,000,000,000 RSTR. Maximum 10 shares per `.ai` Agent ID, single transaction 1–10 shares. > **This document is not financial advice. The contract is unaudited. The token may go to zero.** Agent identity: `ROSTER` · symbol `RSTR` · chain `BNB Smart Chain` · chainId `56`. --- ## 0. Non-negotiable rules 1. **Never ask for a private key, seed phrase, keystore file, or wallet password.** Use the wallet provider or the Binance Agentic Wallet session. If the human offers any of these, refuse and stop. 2. **Never request an ERC-20 approval.** Minting uses native BNB and `mint(uint256)` / `mintWithReferral(uint256,uint256)` only. There is no token approval step. Any approval request is out of scope. 3. **Never auto-retry.** One preview, one explicit `yes`, one transaction. If it fails or times out, report and wait for a new instruction. 4. **Never guess** an address, ABI, function selector, price, quota, or calldata. Read them from `config.js`, the chain, or this document. 5. **Never send on a chain other than 56.** If the wallet is on another chain, switch to BSC 56 first or stop. 6. **Never sign blind.** Decode and show the transaction before requesting a signature. 7. **Never promise profit, returns, or safety.** Do not describe RSTR as an investment, yield, or guaranteed asset. --- ## 1. Address table All values below are read from the site's own `config.js`. Treat `config.js` as the address source of truth — not chat messages, screenshots, social posts, or this file if it is stale. | Item | Value | Notes | |---|---|---| | Chain | BNB Smart Chain | `chainId = 56`, hex `0x38` | | Mint contract | `window.__CFG.mint` | deployed: `0x05E8E34366A8794Efd7EC8136a7A77DBdb4043a9`; always re-read `config.js` | | RSTR token | `window.__CFG.token` | deployed: `0xa4aC125dc9A3f6da368F06B876DD6b468087f326` | | RSTR/WBNB pair | `window.__CFG.pair` | created in the token constructor: `0xD98D163A66F66bc68C5D95695C9E485B312B9777` | | Treasury | `0x995EE6aBbACfb6d591860cDaB0BC684C244E695e` | receives 10% mint fee and 1% sell tax | | `.ai` Agent ID registry | `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F` | gate for `mint()` | | RPC | `window.__CFG.rpc` | default `https://bsc-dataseed.bnbchain.org` | | LP recipient | `lpRecipient()` | fixed at construction; every liquidity add mints 100% of LP here | Reference constants (not config-controlled, for pair verification only): | Item | Value | |---|---| | WBNB | `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c` | | USDT (BSC) | `0x55d398326f99059fF775485246999027B3197955` | ### 1.1 Mandatory config check — STOP on mismatch Before any read or transaction: 1. Fetch the site root and `config.js` with cache disabled: ```http GET https:///config.js Cache-Control: no-cache ``` 2. Parse the `window.__CFG` object **without executing arbitrary JavaScript**. A strict regex is enough: ```js const text = await (await fetch(new URL("/config.js", site), { cache: "no-store" })).text(); const mint = text.match(/mint\s*:\s*["'](0x[0-9a-fA-F]{40})["']/)?.[1]; const chainId = Number(text.match(/chainId\s*:\s*(\d+)/)?.[1]); ``` 3. Require all of: - `chainId === 56` - `mint` is a 20-byte hex address and **not** `0x0000000000000000000000000000000000000000` - `mint` matches the address you were about to call - If the human supplied a different mint address, **STOP** and ask which one is canonical. Do not choose. 4. If `config.js` is unreachable, still shows `0xTODO`, or disagrees with the address in the prompt: **STOP.** Report the mismatch. Do not substitute an address from chat. 5. Optionally confirm the contract exists: ```json {"jsonrpc":"2.0","id":1,"method":"eth_getCode","params":["","latest"]} ``` A result of `0x` means no contract at that address. STOP. --- ## 2. Read interfaces All reads are `eth_call` at `latest`. ABI-encode with the selectors below or with the ABI from Sourcify/BscScan. | Function | Selector | Returns | Meaning | |---|---|---|---| | `soldUnits()` | `0x887da91d` | `uint256` | units sold so far | | `TOTAL_UNITS()` | `0xd3dc59ba` | `uint256` | total units, expected `100000` | | `PRICE_START()` | `0x7d40ab77` | `uint256` | expected `10000000000000000` (0.01 BNB) | | `PRICE_STEP()` | `0x0c45c817` | `uint256` | expected `200000000000000` (0.0002 BNB) | | `TIER_SIZE()` | `0x7031d30b` | `uint256` | expected `1000` | | `BOOT_UNITS()` | `0x233652df` | `uint256` | expected `1000` | | `opened()` | `0x5f88eade` | `bool` | true once unit 1,000 opened the pool | | `reserves()` | `0x75172a8b` | `(uint256 bnb, uint256 tokens)` | live pool reserves, `(0,0)` before open | | `priceAt(uint256)` | `0x9dab2054` + unit-word | `uint256` | exact BNB price of one unit | | `costOf(uint256)` | `0xfd326592` + shares-word | `uint256` | exact BNB cost of the next `shares` | | `tokensOut(uint256)` | `0xc6f0df9c` + shares-word | `uint256` | expected RSTR for the next `shares` | | `quote(address,uint256)` | `0x8f79306e` + address-word + shares-word | `(cost, discount, creditUsed, payable, tokens)` | one-call quote | | `MAX_PER_WALLET()` | `0x0f2cdd6c` | `uint256` | expected `10` | | `mintedOf(address)` | `0x617692dd` + address | `uint256` | shares already minted by wallet | | `walletStatus(address)` | `0x4d6d0af8` + address | `(bool ok, uint256 agentId, uint256 minted, uint256 quota, uint160 referrer, uint256 invited, uint256 credit)` | gate + identity + quota + referral state | | `DISCOUNT_BPS()` | `0x94718213` | `uint256` | buyer discount in bps, expected `500` | | `CREDIT_BPS()` | `0x53151be9` | `uint256` | referrer credit in bps, expected `500` | | `treasury()` | `0x61d027b3` | `address` | fee recipient | | `token()` | `0xfc0c546a` | `address` | RSTR token | | `pair()` | `0xa8aa1b31` | `address` | Pancake pair, non-zero from construction | | `lpRecipient()` | `0x452e68dd` | `address` | recipient of every LP token, fixed at construction | | `finalizeDeadline()` | `0xa0cb23cd` | `uint256` | unix seconds | | `finalized()` | `0xb3f05b97` | `bool` | sale closed; mint disabled | ### 2.1 Address argument encoding For `mintedOf` and `walletStatus`, append the wallet address as a 32-byte left-padded word: ```text selector + 000000000000000000000000 + <20-byte address without 0x> ``` Example for wallet `0x1111111111111111111111111111111111111111`: ```text walletStatus: 0x4d6d0af8 0000000000000000000000001111111111111111111111111111111111111111 ``` ### 2.2 Decoding `walletStatus` The return data is seven 32-byte words: | Word | Type | Field | |---|---|---| | 0 | `bool` | `ok` — true only if the wallet holds a valid `.ai` Agent ID and may mint | | 1 | `uint256` | `agentId` — `keccak256(handle)`, equals the registry token id | | 2 | `uint256` | `minted` — shares already minted | | 3 | `uint256` | `quota` — remaining allowance, including the referral bonus | | 4 | `uint160` | `referrer` — bound referrer key (low 160 bits of its agentId), `0` = not bound | | 5 | `uint256` | `invited` — shares bought by wallets this Agent ID referred | | 6 | `uint256` | `credit` — spendable credit in wei | Rules: - `ok == false` → **STOP.** The wallet is not eligible. Do not attempt a workaround. - `quota == 0` → **STOP.** The wallet has no remaining allowance. - `shares > quota` → **STOP.** Ask the human to choose a smaller amount. - Cross-check `minted`, `quota`, `MAX_PER_WALLET()` and `invited`: `quota = 10 + min(invited / 10, 10) - minted`. If they are inconsistent, **STOP and report**. - `agentId == 0` while `ok == true` is suspicious. STOP and report. - `credit > 0` means the contract will automatically apply it to the next mint. The `msg.value` must be reduced by exactly `min(credit, costOf(shares) − discount)`. Never send the full price when credit is available: the contract rejects overpayment. ### 2.3 Decoding `Minted` Event signature: ```solidity event Minted(address indexed buyer, uint256 shares, uint256 paid, uint256 tokensOut, uint256 firstUnit) ``` Topic0: ```text 0x19f5f791ee407773427bf7b970bbbc3375065c32edd1ab142e23a84f94b0719b ``` Log layout: - `topics[1]` = buyer address, left-padded - `data` word 0 = `shares` - `data` word 1 = `paid` (wei) - `data` word 2 = `tokensOut` (RSTR delivered) - `data` word 3 = `firstUnit` (first serial number in this mint) Read recent logs with `eth_getLogs`, capped to a small block range (for example 5,000 blocks per request). Do not assume `firstUnit` is zero-based when displaying a range; report the raw value. --- ## 3. Mint transaction — exact construction Functions: ```solidity function mint(uint256 shares) payable function mintWithReferral(uint256 shares, uint256 referrerId) payable ``` ### 3.1 Constraints | Constraint | Value | |---|---| | Shares per transaction | integer `1` to `10` | | Shares per `.ai` Agent ID | `10` + referral bonus (`+1` per 10 invited shares, max `+10`) | | Price | `0.01 + ((unit - 1) / 1000) × 0.0002` BNB per unit; units 1–1,000 are 0.01 | | Buyer discount | `5%` of `costOf(shares)` when the wallet is bound to a referrer | | Locked credit | applied automatically, `min(credit, costOf(shares) − discount)` | | `msg.value` | exactly `costOf(shares) − discount − creditUsed` | | Token approval | none | | Recipient | the mint contract only | | Chain | 56 | `referrerId` is the **full** `keccak256(handle)` of the referrer (the same value as `walletStatus.agentId`), passed as a 32-byte word. Binding is one-shot: after the first `mintWithReferral`, the referrer can never change, and the 5% discount applies to every later `mint()` as well. ### 3.2 Calldata ```text mint: 0xa0712d68 + uint256(shares) as 32-byte big-endian hex mintWithReferral: 0xe63e790d + uint256(shares) + uint256(referrerId) ``` Both arguments must be full 32-byte words, not short hex strings. Value formula (units are wei, `BPS = 10000`): ```text base = costOf(shares) // eth_call, never a constant discount = referrer_bound ? base × DISCOUNT_BPS / BPS : 0 creditUsed= min(credit, base - discount) value = base - discount - creditUsed ``` Examples while the sale is still in units 1–1,000 (`base = 0.01 BNB`): | Case | Value | |---|---| | 1 unit, no referrer, no credit | `0.01` | | 1 unit, bound to a referrer | `0.0095` | | 1 unit, bound, `0.005` credit | `0.0045` | | 1 unit, bound, `0.0095+` credit | `0` | After unit 1,000 the base changes every 1,000 units. Always call `costOf(shares)`; the table below is only valid for units 1–1,000. | Shares | Calldata | `value` (wei) | `value` (BNB) | |---:|---|---:|---:| | 1 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000001` | `10000000000000000` | `0.01` | | 2 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000002` | `20000000000000000` | `0.02` | | 3 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000003` | `30000000000000000` | `0.03` | | 5 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000005` | `5e16` | `0.05` | | 10 | `0xa0712d68000000000000000000000000000000000000000000000000000000000000000a` | `100000000000000000` | `0.10` | The 5-share row uses `5e16` (5 × 10^16 wei), which is exactly `0.05 BNB`; it is written in scientific notation only to keep the table compact. Hex `value` for 1, 3, 10 shares: ```text 1 → 0x2386f26fc10000 3 → 0x6a94d74f430000 10 → 0x16345785d8a0000 ``` ### 3.3 Build with ethers v6 ```js import { Interface, parseUnits } from "ethers"; const iface = new Interface([ "function mint(uint256 shares) payable", "function mintWithReferral(uint256 shares, uint256 referrerId) payable" ]); const shares = 3n; // base MUST come from the contract: costOf(uint256) const base = await readUint(mint, "0xfd326592" + word(shares)); const discountBps = 500n; // read DISCOUNT_BPS() instead of hardcoding const credit = 0n; // read walletStatus(wallet).credit const referrerId = 0n; // 0 = no referral const discount = referrerId > 0n ? (base * discountBps) / 10000n : 0n; const due = base - discount; const creditUsed = credit > due ? due : credit; const value = due - creditUsed; const data = referrerId > 0n ? iface.encodeFunctionData("mintWithReferral", [shares, referrerId]) : iface.encodeFunctionData("mint", [shares]); ``` ### 3.4 Required amount check Before signing, assert all of: ```text shares >= 1 shares <= 10 PRICE_START() == 10000000000000000 PRICE_STEP() == 200000000000000 base = costOf(shares) bound = walletStatus(wallet).referrer != 0 discount = (bound || referrerId != 0) ? base × DISCOUNT_BPS() / 10000 : 0 creditUsed = min(walletStatus(wallet).credit, base - discount) value == base - discount - creditUsed referrerId != 0 => referrerId != walletStatus(wallet).agentId (no self-referral) referrerId != 0 => registry.ownerOf(referrerId) != address(0) (referrer exists) soldUnits() + shares <= TOTAL_UNITS() finalized() == false walletStatus(wallet).ok == true walletStatus(wallet).quota >= shares chainId == 56 ``` If any assertion fails, **STOP** and show the failing check to the human. ### 3.5 Simulation Simulate before asking for a signature: ```json { "jsonrpc": "2.0", "id": 1, "method": "eth_call", "params": [{ "from": "", "to": "", "value": "0x", "data": "<0xa0712d68 | 0xe63e790d>" }, "latest"] } ``` - Success → continue to preview. - Revert → decode the revert data if an ABI is available; otherwise report the raw error and **STOP**. Do not retry with guessed values. - Also estimate gas. Never hardcode a gas limit from another transaction. ### 3.6 Binance Agentic Wallet command shape If the runtime exposes BAW, use its preview/execute flow after the checks above: ```bash baw contract-call preview \ --binanceChainId 56 \ --from \ --to \ --value \ --inputData \ --json baw contract-call execute --requestId --json ``` Do not execute until the human has replied with an explicit `yes` to the preview. --- ## 4. Mandatory human-in-the-loop flow Follow this order exactly. Do not compress or reorder steps. ### Step 1 — Resolve addresses Fetch `config.js`; verify chainId and mint as described in §1.1. If pending or mismatched, STOP. ### Step 2 — Read state Read wallet, `walletStatus(wallet)`, `soldUnits()`, `TOTAL_UNITS()`, `PRICE_START()`, `PRICE_STEP()`, `TIER_SIZE()`, `opened()`, `costOf(shares)`, `tokensOut(shares)`, `MAX_PER_WALLET()`, `mintedOf(wallet)`, `finalized()`, `finalizeDeadline()`, and the wallet's BNB balance. ### Step 3 — Validate Run every assertion in §3.4. If any fails, STOP with the exact failed check. ### Step 4 — Simulate Run `eth_call` and `eth_estimateGas`. If either reverts, STOP. ### Step 5 — Preview to the human Present a compact table with **all** of these fields: | Field | Example | |---|---| | Site / manual | `https:///skill.md` | | Chain | BNB Smart Chain (56) | | Mint contract | `0x…` (from config.js) | | Wallet | `0x…` (full address) | | `.ai` Agent ID | `#12345` or `not eligible` | | Shares | `3` | | Exact value | `0.03 BNB` = `30000000000000000 wei` | | Remaining quota | `7 shares` (contract-reported) | | Expected tokens | `tokensOut(3)` result, e.g. `150,000 RSTR` in the first 1,000 units | | Current sold | `1234 / 100000` | | Gas estimate | `… BNB` | | Calldata | `0xa0712d68…0003` | | Token approval | `none` | | Risk | unaudited, price may go to zero | Also state plainly: “Signing sends 0.03 BNB to the mint contract. It is not refundable. Reply `yes` to sign, or `no` to cancel.” ### Step 6 — Wait for an explicit `yes` - A new, unambiguous message after the preview: `yes`, `确认`, `sign`, `send it`. - Silence, emoji, previous instructions, a different message, or an edited amount is **not** consent. - If the human changes shares or wallet, return to Step 2 and preview again. - Never infer consent from the original “mint N shares” prompt; that prompt authorizes preparation, not signing. ### Step 7 — Send exactly once Send one transaction with the previewed `to`, `value`, and `data`. Do not alter them after confirmation. ### Step 8 — Confirm and report Wait for the receipt. Report: - transaction hash and BscScan link - status (`success` / `reverted` / pending) - block number - decoded `Minted` fields: `buyer`, `shares`, `paid`, `firstUnit` - wallet's new `mintedOf` and `quota` - new `soldUnits` - optionally, one line with their invite link (§10) if they might share the mint If the receipt does not arrive, report the pending hash. **Do not resend.** --- ## 5. Forbidden actions | Forbidden | Why | |---|---| | Asking for private key / seed phrase / keystore | The agent never needs them. Refuse and stop. | | `approve`, `increaseAllowance`, permit signatures | Minting only needs BNB. No approval is part of this flow. | | Sending USDT, BEP-20 tokens, or NFTs | The contract is payable in BNB only. | | Sending to `token`, `pair`, `treasury`, or registry | Only `mint` is payable. Those addresses are not mint endpoints. | | Automatic retry after failure or timeout | Can double-spend. Report and wait. | | Guessing shares, price, gas, selector, ABI, or address | Wrong calldata can lose funds. | | Using an address from chat/social instead of `config.js` | Address poisoning risk. | | Signing without a human preview | Violates the mandatory flow. | | Calling `finalize()` | Not part of the mint flow. Do not call it. | | Giving investment advice or promising returns | Prohibited. State that the token may go to zero. | | Proceeding when `mint` is `0xTODO`, `eth_getCode` is `0x`, or RPC fails | Deployment is incomplete. STOP. | --- ## 6. Errors and common failures Exact custom error names may vary while the contract is in development. Decode revert data with the deployed ABI when available. If you cannot decode it, report the raw revert and STOP — do not guess or retry. | Error / symptom | Likely meaning | Required action | |---|---|---| | `NotAgent()` | Wallet does not hold a valid `.ai` Agent ID | STOP. No workaround. | | `Quota()` / `QuotaExceeded()` / `MaxPerWallet()` | Would exceed 10 shares or remaining quota | STOP. Reduce shares only with a new human instruction. | | `SoldOut()` | `soldUnits + shares > TOTAL_UNITS` | STOP. Report remaining shares. | | `Finalized()` / `AlreadyFinalized()` | Pool finalized; mint closed | STOP. Do not attempt. | | `BadPayment()` / `BadValue()` | `msg.value != costOf(shares) − discount − creditUsed` | Rebuild from §3.2; never round. | | `InvalidShares()` / `ZeroShares()` | `shares` is 0, non-integer, or > 10 | STOP. Ask for 1–10. | | `execution reverted` with no data | Gate or state check failed | STOP. Show full raw error. | | `insufficient funds for gas * price + value` | BNB balance cannot cover value + gas | STOP. Ask the human to fund the wallet. Do not lower `value`. | | `user rejected` / code `4001` | Human declined in wallet | STOP. Do not re-prompt automatically. | | `nonce too low` / `replacement transaction underpriced` | Wallet has a pending or conflicting tx | STOP. Report; let the human resolve in the wallet. | | `chainId` / network mismatch | Wallet not on BSC 56 | Switch to 56 or STOP. Never send cross-chain. | | RPC `429`, timeout, `-32005`, gateway error | RPC unavailable or rate-limited | STOP. Report; do not resend. Retry only reads, and only after a short backoff. | | `eth_getCode` returns `0x` | No contract at the address | STOP. Wrong or undeployed address. | | `walletStatus` returns empty / reverts | Wrong contract, wrong ABI, or not deployed | STOP. Re-check `config.js`. | When a transaction succeeds, verify the `Minted` event belongs to the confirmed receipt and matches the previewed `shares` and `paid`. --- ## 7. Economics (exact copy, no invented numbers) - Price ladder: **unit n = 0.01 + floor((n-1)/1000) × 0.0002 BNB**; units 1–1,000 are 0.01, units 99,001–100,000 are 0.0298. - Total units: **100,000**. - Supply cap: **100,000,000,000 RSTR**; minted on demand, never above the cap. - Units 1–1,000: **50,000 RSTR to the buyer + 45,000 RSTR to the pool each**. - Unit 1,000 opens the pool with **9 BNB + 45,000,000 RSTR**, i.e. **2e-7 BNB per token**. - Units 1,001+: buyer receives `paid × poolTokens / (poolBnb × 0.99)` (99% of pool price); 90% of the payment is paired into the pool, so minting does not move the price. - Maximum per `.ai` Agent ID: **10 units** + referral bonus (up to +10). - Single transaction: **1–10 units**. - Mint proceeds split: **10% fee, 90% liquidity**; invited mints split the fee into a 5% buyer discount + 5% referrer credit. - LP: **100% minted to `lpRecipient()`** on every add; the recipient is immutable. - Tax: **1% buy burn, 1% sell to treasury**. - Team allocation: **none**. - Permissions: **no owner, no admin, no setters, no pause, no proxy**. - Eligibility: **wallets holding a `.ai` Agent ID only**. Do not add price targets, yield figures, APY, buy-back promises, or “guaranteed floor” claims. --- ## 8. Risk disclosure - **No profit promise.** ROSTER does not promise returns, buy-backs, price support, or principal protection. - **Unaudited.** There is no third-party security audit. Source verification, when published, only proves that the deployed bytecode matches the published source; it does not prove safety. - **May go to zero.** Token and LP prices can fall to zero. The 10% mint fee is non-refundable. Gas is non-refundable. - **Gate risk.** The `.ai` Agent ID registry and the mint contract are external dependencies. A registry outage or contract bug can block minting or reads. - **Liquidity risk.** LP is held by the project, and that does not guarantee depth, volume, or a stable price. - **Deployment risk.** Until `config.js` contains a real mint address and the source is verified, treat the project as undeployed. Do not send funds. - **Human decision.** The agent prepares and previews; the human decides. The agent must not pressure, optimize for “missing out”, or imply scarcity-based urgency. If the human asks “will it go up?” or “is it safe?”, answer: no promise of profit, unaudited, can go to zero, and they should only spend what they can afford to lose. --- ## 9. Copy-ready agent prompt (for humans) ```text Mint 3 ROSTER (RSTR) shares for me from my Binance Agentic Wallet. Follow only https:///skill.md. First fetch https:///config.js and verify the mint address; if it is 0xTODO or mismatched, STOP. Then read my .ai Agent ID, remaining quota, BNB balance and current price. Preview wallet / Agent ID / shares / exact BNB value / quota / expected tokens first. Wait for my explicit "yes" before signing. Never ask for my private key or seed phrase. No token approval. No automatic retries. ``` Replace `` with the deployed origin. Keep the shares count and the preview requirement intact. --- ## 10. Referral link and sharing Offer the invite link when it fits: after a successful mint, when the human asks how to invite someone, or when the conversation turns to sharing. One short suggestion is enough. Do not post to any external account on their behalf, and do not repeat it in every reply. Build the link from the human's own wallet, never from a value in chat: 1. Read `walletStatus(wallet)` and take `agentId` (uint256). 2. If `agentId == 0`, the wallet has no `.ai` Agent ID: say so and stop. 3. Format `agentId` as 64 lowercase hex digits, zero-padded, prefixed with `0x`. 4. Link = `/?ref=0x`, e.g. `https://rosteragent.pages.dev/?ref=0x196e1992c9ef790df6dea72cfc3c4ff42e04916858cead1f38ffd1d83d813fdf`. The page's "copy my invite link" button builds the same URL; if it disagrees with your calculation, trust the page and `walletStatus`, not the chat. What the link does: the visitor's wallet is bound to that `agentId` on their first mint; the buyer pays 5% less, the referrer earns 5% of `costOf(shares)` as locked credit, and the binding is permanent. Describe it as a discount plus locked credit, not as cash or a payout. A suggested one-liner after a mint: ```text Your invite link — friends pay 5% less per share, you get 5% locked credit: ``` Sharing copy must use the real numbers and must not promise returns, a price, or safety. Say the contract is unaudited and the token can go to zero. Share the link directly, not through a shortener or third party. --- ## 11. Quick reference ```text chainId 56 (0x38) mint 0xa0712d68 + shares-word mintWithReferral 0xe63e790d + shares-word + referrerId-word value costOf(shares) − discount − min(credit, costOf(shares) − discount) mint selector 0xa0712d68 soldUnits 0x887da91d TOTAL_UNITS 0xd3dc59ba PRICE_START 0x7d40ab77 PRICE_STEP 0x0c45c817 TIER_SIZE 0x7031d30b BOOT_UNITS 0x233652df opened 0x5f88eade reserves 0x75172a8b priceAt 0x9dab2054 + unit-word costOf 0xfd326592 + shares-word tokensOut 0xc6f0df9c + shares-word quote 0x8f79306e + address-word + shares-word MAX_PER_WALLET 0x0f2cdd6c DISCOUNT_BPS 0x94718213 CREDIT_BPS 0x53151be9 walletStatus 0x4d6d0af8 + address-word mintedOf 0x617692dd + address-word treasury 0x61d027b3 token 0xfc0c546a pair 0xa8aa1b31 lpRecipient 0x452e68dd finalizeDeadline 0xa0cb23cd finalized 0xb3f05b97 Minted topic0 0x19f5f791ee407773427bf7b970bbbc3375065c32edd1ab142e23a84f94b0719b ReferralBound 0x0d830f23c01b3040df43047a570f8fcf202d442769881ea1e0cb1004de94f4fc ```