# Agent Oscar (OSK) — guide for AI agents You are acting for the owner of a wallet on **BNB Smart Chain (chainId 56)**. Follow these rules on every step: 1. **Never** ask for, accept, print or store a private key or seed phrase. 2. Before every transaction, show the owner the exact contract address, function, arguments, value (BNB) and estimated gas, and **wait for an explicit yes**. 3. Read the addresses and call signatures from the official site's `config.js` (`OSK_CONFIG.address`, `OSK_CONFIG.calls`). If `address.sale` is empty, the contracts are not published yet: **stop** and tell the owner. 4. Times are on-chain block times. Sale opens **2026-11-12 18:00 UTC+8** (unix 1794477600). Guaranteed opening from **2026-11-15 18:00 UTC+8** (unix 1794736800). 5. If any check below fails, stop and explain why instead of sending. > Function names below follow the contracts as published in `config.js`. If a name there differs from this guide, `config.js` wins. ## Before the pool opens — one seat per .ai Agent ID, one counter Seats are numbered on **one counter** `seatsTaken()` from 0 to 3,888: seats **#1–888 are free**, seats **#889–3,888 are paid**. The next seat is #`seatsTaken()+1`; `nextSeatPaid()` (or `progress()`) tells you which kind it is. A paid call while the next seat is still free reverts (`FreeSeatsFirst`); a free claim once the next seat is paid reverts (`FreeGone`). Seat #3,888 opens the pool in the same transaction. Checks for both seat types: - `openedAt()` must be `0` (pool not open) and the block time must be ≥ 1794477600. - `agentIdOf(wallet)` → `(id, ok)`; `ok` must be `true` (the wallet itself owns a BSC .ai Agent ID). - `idUsed(id)` must be `false` (one seat per Agent ID in total, free or paid). ### Free seat (#1–888) - Check `canBook(wallet)` → `(ok, paid)` gives `ok = true` and `paid = false` (the next seat is a free one). - Call `claimFree()` with value **0 BNB**. A free seat books 10% of a paid seat's OSK; it is collected after the opening. ### Paid seat (#889–3,888, 0.008 BNB) - Check `canBook(wallet)` → `(ok, paid)` gives `ok = true` and `paid = true` (all 888 free seats are taken). - **BNB**: `buyWithBnb(shares = 1, inviter, minTokens = 0)` with value **0.008 BNB**. - **USDT**: approve USDT to the sale contract, then `buyWithUsdt(shares = 1, inviter, maxUsdt, minTokens = 0)`. The contract swaps USDT on PancakeSwap for exactly 0.008 BNB; set `maxUsdt` = router `getAmountsIn(0.008 BNB, [USDT, WBNB])[0]` × 1.02. - `inviter` = the wallet from the owner's invite link (`?invite=0x…`), otherwise `0x0000000000000000000000000000000000000000`. The inviter wallet must own a .ai Agent ID and cannot be the buyer. ### Opening after 72 hours - From unix 1794736800, if `openedAt()` is still `0` and at least one paid seat exists, anyone may call `openPool()` (value 0). - If at that moment no paid seat exists yet (free seats not all claimed), `nextSeatPaid()` becomes `true` and the first paid seat is allowed at the next number; that purchase opens the pool. ## Progress (one call) `progress()` → `(phase, seats, fullHouse, nextPaid, paid, opened, stage, inStage, price, toStatuette, afterMinted)`: phase 0 = before the sale, 1 = seats on sale, 2 = pool open. After the opening: current 100-share stage, shares sold in it (0–99), price per share now (wei), shares until the next statuette, encore shares minted so far. ## After the pool opens — encore mint (no Agent ID needed) 1. Read `quote(N)` → `(n, cost, oskOut, golds, ref)` **right before** the preview; `n` may be lower than N if the remaining allocation is short. 2. Show the owner `cost` (BNB) and `oskOut`; `golds` = statuette shares inside the order (each gives double OSK). 3. Call `buyWithBnb(shares = n, inviter = 0x0, minTokens = oskOut × 97 / 100)` with value = `cost` × 1.01 (excess refunded). For USDT use `buyWithUsdt(n, 0x0, maxUsdt, minTokens)` as above with `cost` instead of 0.008 BNB. - Price ladder: share k after the opening costs 0.01 BNB × ceil(k / 100), up to 300,000,000 shares. - In a falling market the reference price can sit above spot; always quote first. ## Collect pre-opening OSK - After the opening, read `bookedOf(wallet)`; if > 0, call `collect(wallet)` (value 0). ## Invite link and reward - Invite link: `/?invite=` — no transaction needed. - After the opening: `inviteRewardOf(agentId)`; if > 0, the wallet that last invited for that Agent ID may call `claimInviteReward(agentId, ownerWallet)` (value 0). Only the top 100 inviters by invite count share the 5%. ## Fine print - Before the opening: 95% of the BNB raised → liquidity (LP tokens to 0x000…dEaD), 5% → top 100 inviters; the treasury receives nothing; no refunds. - Multiple dividends after the opening: ≥10× 30% → top 1,000 · ≥50× 50% → top 2,000 · ≥100× 100% → top 5,000 holders by balance, only on payments after the tier is reached; wallets that never sold weigh ×1.5. Below 10×, mint payments go to the treasury (0x68377e18b14faaaa6e11248786f88daa7cdd4ca1). - Trading tax: buy 2% (to BNB, shared among the top 1,000 holders), sell 3% (to BNB, treasury), transfers 0%.