# ShareFair (SHRF) — fair-mint site, agent summary This is a static single-page fair-mint site for BNB Smart Chain (chainId 56), with Cloudflare Pages Functions + D1 for the community campaigns. There is no build step and no frontend framework. Target site: https://sharefair.pages.dev Brand and symbol are ShareFair / SHRF in config.js. config.js is the only source of truth for contract addresses. If mint is missing or is not a valid BSC address, the mint is not live: do not build or send a transaction. ## Mint parameters (from the reference contract) - Total shares: 15,000 - Free shares: 5,000 total; 1 per wallet on first mint while available - Paid shares: 0.002 BNB per share; up to 14 paid shares per wallet - Per wallet: 1 free + up to 14 paid = 15 shares - Tokens per share: 10,000,000 (18 decimals) - Token max supply: 1,000,000,000,000e18 - WBNB on BSC: 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c (18 decimals); pair is token/WBNB - Mint entry point: mint(uint256 paid) selector 0xa0712d68, payable in BNB - The free share is added automatically by the contract when eligible. - Agent ID gate: hasAgentId(msg.sender) must be true. - 70% of each paid amount is held for liquidity; 30% goes to treasury. - Pool opens when 15,000 shares are minted, or anyone calls openPool() after deadline. - Pool receives all held BNB (wrapped to WBNB) plus paidShares * 7,000,000 tokens. - LP is minted to 0x000000000000000000000000000000000000dEaD by the contract. - No owner, no admin, no pause, no proxy, no trading tax. - The token contract includes a fixed emission address; minting is capped by MAX_SUPPLY. ## Token contract notes - `FairToken.emissionWallet`: 0xD8e120364F77F208011Fb413cdB7F2b222fafc0c - It can mint while `totalSupply + amount <= MAX_SUPPLY` (1,000,000,000,000). - The permission is immutable: it cannot be revoked or reassigned. - Not audited. Token price can go to zero. This is not investment advice. ## Share distribution Free shares receive the same 10,000,000 tokens per share and do not add BNB to the pool. ## Public endpoints - GET /api/stats -> {submitted, approved} raffle: cap 2000, reward 5 USDT (display values in config.js) - GET /api/kol/stats -> {submitted, approved} KOL: cap 100, reward 50 USDT (display values in config.js) - POST /api/submit {wallet, postUrl} - POST /api/kol/submit {wallet, postUrl, followers} - GET /api/status?wallet=0x... - GET /api/kol/status?wallet=0x... - POST /api/admin/review (Authorization: Bearer ADMIN_TOKEN) {id, action} action = approve | reject | paid - GET /api/admin/list (Authorization: Bearer ADMIN_TOKEN) query: page, limit, campaign=raffle|kol, status=pending|approved|rejected|paid Submission rules: - Only public post URLs: x.com / twitter.com / mobile.twitter.com /status/, binance.com /square/post/, or app.binance.com /uni-qr/cpos/. - No screenshots, no R2, no base64. Only URL + wallet are stored. - Wallet must hold >= 1 configured token share (server-side balanceOf eth_call) before an entry can become pending. - One wallet per campaign; one post URL per campaign. - Manual review. Posts must stay public until review passes. - approve counts toward approved and left; paid is a separate admin state. - rejected and pending do not consume campaign capacity. ## Agent safety rules - Never ask for a private key or seed phrase. - Read config.js and verify chainId + mint address before constructing calldata. - Preview the transaction and wait for explicit user confirmation. - Send the exact BNB value; the contract rejects any other msg.value. - Do not auto-retry or send transactions in the background. - If any read fails or an address does not match, STOP and report it. ## Risk Unaudited experimental token. Price may go to zero. No guarantee of liquidity, volume, listing, buyback, or returns. Nothing here is financial advice.