# $BAGENT mint guide for AI agents

Website: https://basedagent.live · Whitepaper: https://basedagent.live/whitepaper · X: https://x.com/BasedAgentBSC

The token is **$BAGENT** (Based Agent) on BNB Smart Chain. It is minted in **mint units**:
1 unit = 50,000,000 BAGENT. The program sells at most 44,400 units. Other tokens using
the BAGENT ticker exist on BSC; they are not this project. Only the contracts below are real.

## Contracts (BNB Smart Chain, chainId 56)

- $BAGENT mint contract: `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81` (the ONLY address that accepts payment)
- $BAGENT token: `0x3bfFC7e51Ac00668041fC70a2043bf78753a4544` (18 decimals). For wallet display only. **Never send
  USDT or BNB to the token address**; it does not mint and the funds are lost.
- Pair (PancakeSwap v2, BAGENT/USDT): `0x4193661093b3c36Ac6e9f8A32a8e6220D5a31ef1` — created by the token contract;
  this is the only pair the token taxes or recognises.
- Poster SBT contract: `0x126eB05C19807bb9BAF6C63668dF3972904f9472` (soulbound; see the free-mint flow, step 4)
- Genesis Badge contract: `0xe5fa36d281C9ae646CFc469dA4563c21fc19EF29` (soulbound; Ally minters claim it after minting)
- Tax splitter: `0x5A4C1Ce3a6f510fBAb53Fe1f7172dCA35Eb4bee5` (receives the trading tax automatically; never send funds to it)
- USDT (BEP-20): `0x55d398326f99059fF775485246999027B3197955`
- .ai Agent ID registry (SPACE ID): `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F`

## Status right now

- Program status: contracts deployed, program NOT started yet. Minting opens when
  the deployer wallet calls start() at the announced launch moment; before that,
  every mint call reverts. Live status JSON: https://basedagent.live/api/status

## Who can mint

The sending wallet must hold a `.ai` Agent ID: `balanceOf(wallet)` on the registry
above must equal exactly 1. Each Agent ID may mint **10 units in total for the whole
program** (free + paid, all phases). Bonuses: +1 unit if the wallet holds the Poster
SBT, +1 unit claimable by a referrer whose invitee qualifies (see Rules). Maximum
10 units per transaction.

## Prices

- Phase 1 (units 1–10,000): flat **1.125 USDT per unit**. When unit 10,000 is minted,
  the pool opens in the same transaction: 8,000.10 USDT + 320,004,000,000 BAGENT go to
  the pair and the LP is burned.
- Phase 2 (units 10,001–44,400): a tier price acts as a ceiling ($1.25 rising by
  $0.0025 per 100 units, last tier $2.1075). The actual price of a mint is
  `min(tier, 0.97 × min(spot, 60-minute TWAP))` per unit, computed from the pair at the
  start of the transaction — by construction the mint price is below the market price
  at that moment. There is no floor on the Phase 2 mint price.
- Always pass `maxCost` = quoted cost × 1.02 as slippage protection. A mint whose cost
  exceeds `maxCost` reverts and charges nothing.
- **Never transfer USDT directly to the mint contract.** A plain transfer does not mint.

## Paid mint (USDT)

1. Call USDT `approve(spender, amount)` (selector 0x095ea7b3) with spender =
   `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81` and amount = cost × 1.02.
2. Call `mintPaid(uint256 units, uint256 maxCost, address referrer)` (selector
   0xc3e3d4d9) on `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81`. Use the zero address if there is no referrer.
   Add 20% to the gas estimate.
3. Ally holders who also want their Genesis Badge should instead call
   `mintPaidWithAllyVoucher(uint256 units, uint256 maxCost, address referrer,
   address origin, uint256 nonce, uint256 deadline, bytes sig)` (selector 0x791e2c3a)
   with a voucher from the eligibility API (below). The mint itself is identical;
   the voucher only marks Ally status on-chain.

## Paid mint (BNB)

1. Call `bnbQuote(uint256 units)` (selector 0x68bce8cd) on `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81` to get the
   BNB amount needed: the USDT cost converted at the Chainlink BNB/USD price plus 1%
   headroom.
2. Call `mintPaidWithBnb(uint256 units, uint256 maxCost, address referrer)` (selector
   0xb79de69d), payable, sending the quoted BNB amount as value and passing the same
   amount as `maxCost` (here `maxCost` is in BNB wei). Use the zero address if there
   is no referrer. Add 20% to the gas estimate.
3. Ally holders who also want their Genesis Badge should instead call
   `mintPaidWithAllyVoucherBnb(uint256 units, uint256 maxCost, address referrer,
   address origin, uint256 nonce, uint256 deadline, bytes sig)` (selector 0x7f846fa5)
   with a voucher from the eligibility API. The mint itself is identical.
4. The quoted BNB is swapped to USDT inside the call. If the swap lands below the
   USDT cost, the call reverts and no BNB is spent beyond gas. USDT received above
   the cost is not returned to the payer: while bonding it is escrowed with the
   treasury leg (and if bonding fails it comes back as part of the refund, which for
   BNB payers equals the USDT their swap obtained); once the pool is open it goes to
   the treasury. BNB sent above the quote is refunded in the same transaction.
   A plain BNB transfer to the mint contract reverts; it does not mint.

## Free mint — Ally holders only, first 10 hours

1,111 units are claimable free during the **first 10 hours** after the start time,
one per Agent ID, first-come-first-served, and only by wallets currently holding
at least one of:

- JAGENT `0x8e6442663A4F8C50b6132c68d42A30E7DFE4Ae15` — ≥ 2,000,000
- CENSUS `0xfC96737a40DBf169782E60539B82d4eE17f25708` — ≥ 10,000,000
- GANG `0x0c6302401aa5325C2E36F170f52C00B1d220B405` — ≥ 4,000

Flow:

1. Check and obtain a voucher: `POST https://checker.basedagent.live/voucher` with
   `{"address": "<wallet>", "origin": "<token address>"}`. The API verifies the .ai
   ID and both balance points and returns the voucher fields. Read-only check without
   a voucher: `GET https://checker.basedagent.live/eligibility?address=<wallet>`.
2. Call `claimFree(address origin, uint256 nonce, uint256 deadline, bytes sig)`
   (selector 0xddc12f82) on `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81` with the voucher. Vouchers are
   single-use and expire in 10 minutes.
3. Free units count toward the wallet's 10-unit program quota (1 free + up to 9 paid).
   Free units are non-transferable until 1 hour after the pool opens; paid units are
   never locked.
4. Claiming free also makes the wallet eligible to claim its Genesis Badge and —
   inside the same 10-hour window — the Poster SBT (+1 unit quota). Poster flow:
   a. `POST https://checker.basedagent.live/poster/code` with `{"address": "<wallet>"}`
      returns a claim `code` and an `intentUrl`.
   b. Give the `intentUrl` to your user. They open it (the draft post is already
      written, code included), press Post, copy the post URL and return it to you.
      Do not post on their behalf and do not invent a URL.
   c. `POST https://checker.basedagent.live/poster/verify` with
      `{"address": "<wallet>", "url": "<post URL>"}`. The API fetches the post
      itself and verifies it (code and author match, account at least 30 days
      old, posted after the code was issued, single-use). It returns the
      PosterVoucher fields.
   d. Call `claim(uint256 nonce, uint256 deadline, bytes sig)` (selector
      0x5eddd157) on `0x126eB05C19807bb9BAF6C63668dF3972904f9472` with the voucher, from the wallet. Vouchers
      expire in 10 minutes; codes and post URLs are single-use.
   Details: https://basedagent.live/whitepaper

## If bonding fails

If 10,000 units are not reached by the deadline (5 days after the free window ends),
paid minters reclaim 100% of what they paid (BNB payers: the USDT value their swap obtained): call `claimRefund()` (selector
0xb5545a3c) on `0xE3baAd369B4C30E6c6bfB0ffc6658C4a66062D81`, once per wallet. Free claims are void.

## Rules worth knowing

- Trading tax on the official pair only: buy 1%, sell 2% (1% burned, 1% to the tax
  splitter). Wallet-to-wallet transfers are untaxed. Tax rates are fixed in code.
- The contracts contain no operator withdrawal, no blacklist, no pause, and no
  upgrade path. The only minter is the mint contract above.
- Full rules, the Phase 3 NFT Holder program and the Phase 4 staking tax split
  (25% treasury / 75% staking, announced in advance) are in the whitepaper.
