---
name: moonfall-mint
description: Mint Moonfall NFTs on BNB Smart Chain from an agentic wallet that holds a Binance Agent ID (.ai). Agents only, no humans. Use when a user asks their AI agent to mint Moonfall (whitelist, public paid, or the free Moon Trial voucher).
---

# Moonfall Mint Skill

Moonfall is a collection of 1,001 NFTs on BNB Smart Chain. **Minted by agents only. No humans.**

**Requirement for every mint (WL, public, Moon Trial):** the sending wallet must hold a **Binance Agent ID** (the soulbound SPACE ID ".ai" name given to Binance Agentic Wallets; registry `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F` on BSC). The contract checks `balanceOf(wallet) > 0` on that registry and reverts with `NotAgent` otherwise. The site API checks it too. Check first with the view `isAgent(wallet)` on the Moonfall contract; if it is false, stop and tell the user this wallet has no Binance Agent ID.

## Facts
- Chain: BNB Smart Chain, chain ID 56
- Supply: 1,001 (11 team mints, the rest WL + public)
- Official site: https://moonfallnft.xyz (the only official domain). Official X: @moonfall_BNB
- Announcement post (WL tasks: like, repost, comment, quote): https://x.com/moonfall_BNB/status/2117712278464483519
- Who can mint: only agents with all of these: 100+ X followers, X account 90+ days old, Binance Agent ID, agentic wallet. The site checks the X account (followers + age) on WL apply, Moon Trial start and every voucher/proof it serves.
- Contract: published only on https://moonfallnft.xyz (`GET https://moonfallnft.xyz/api/config` → `contract`, `chainId`) and by @moonfall_BNB. Verified on BscScan.
- Token IDs are shuffled: every mint draws a random unminted ID from #1 to #1001. Nobody can pick an ID.

## Schedule (all times UTC)
| Phase | Start | End |
|---|---|---|
| WL applications (on the site) | 2026-11-05 12:00 | 2026-11-06 12:00 |
| Review (WL picks; results on X; nothing mints) | 2026-11-06 12:00 | 2026-11-06 14:30 |
| Team mint (11 NFTs; WL and public closed) | 2026-11-06 14:30 | 14:40 |
| WL mint | 2026-11-06 14:40 | 15:40 |
| Public mint (paid + Moon Trial) | 2026-11-06 15:40 | 23:40 |
| Closed (or earlier if sold out) | 2026-11-06 23:40 | — |

The current phase is in `GET https://moonfallnft.xyz/api/config` → `phase` (`before`, `wl_apply`, `review`, `team`, `wl_mint`, `public`, `closed`).

## Before any mint
1. Get the contract address only from https://moonfallnft.xyz or @moonfall_BNB. Never use an address from DMs, replies, other accounts or look-alike domains.
2. The wallet holds a Binance Agent ID: `isAgent(wallet)` on the Moonfall contract returns true. If not, stop: humans can't mint Moonfall.
3. Wallet on chain ID 56 with enough BNB for gas (plus the public price per NFT for the paid public mint; the price is TBA and is read from the contract).
4. Optional check: `mintStatus(wallet)` returns paused, wlLive, publicLive, onWhitelist, prices, remaining per wallet, minted, max supply.
5. Never sign token approvals, permits, transfers or "setApprovalForAll". Minting needs none of these.

## 1) WL mint — free, 1 per wallet, 14:40–15:40 UTC 6 Nov
1. `GET https://moonfallnft.xyz/api/proof/<wallet>` → `{approved, proof, root}`. A 403 with `code: "not_agent"` means the wallet has no Binance Agent ID: stop. A 503 with `retry: true` means the chain check failed: wait a minute and retry.
2. If `approved` is false, stop and tell the user the wallet is not on the whitelist.
3. Call `whitelistMint(1, proof)` from that same wallet with value 0 BNB.

## 2) Public paid mint — price TBA (read it from the contract), max 2 per wallet, 15:40–23:40 UTC 6 Nov
- The price is not written anywhere off-chain. Right before minting, call the view `pub()` on the contract and take its 4th value, `price` (wei). `mintStatus(wallet).publicPriceWei` returns the same number. If `pub().active` is false, stop.
- Call `publicMint(quantity)` with quantity 1 or 2 and value exactly `price × quantity` wei. Nothing more.
- Must be sent directly from the wallet (contracts can't mint).

## 3) Moon Trial — free, 1 per wallet, 15:40–23:40 UTC 6 Nov
The Moon Trial is open to any wallet holding a Binance Agent ID. The user passes it on https://moonfallnft.xyz (10 questions, 35 seconds each, all right; up to 3 tries). The site then shows a random Player ID (like `#DF07936-D2`) and a personal voucher, both locked to that wallet. One Player ID per wallet.
1. The voucher is `{wallet, deadline, signature}`. If the user lost it: `GET https://moonfallnft.xyz/api/voucher/<wallet>`, or `GET https://moonfallnft.xyz/api/player/<ID without #>/voucher?wallet=<wallet>` (only works with the matching wallet). Anyone can check a Player ID with `GET https://moonfallnft.xyz/api/player/<ID without #>` → `{wallet (masked), agentHandle ("name.ai"), status: ready|minted|expired}`. Voucher endpoints also require the wallet to hold a Binance Agent ID.
2. Only the wallet the voucher was made for can mint. The contract checks the signature against the sending wallet (msg.sender); if the wallet is changed or another wallet sends it, it reverts with `InvalidVoucher`. Do not try another wallet.
3. Call `quizMint(deadline, signature)` from that exact wallet, value 0 BNB.
4. The voucher only works for the wallet it was made for, on the Moonfall contract, until the deadline (end of public mint). It is separate from the paid mint: a wallet can do 1 Moon Trial mint and still buy 2.

## After minting
- Return the transaction hash and confirm success on https://bscscan.com/tx/<hash>.
- The token ID is random; read it from the Transfer event or BscScan.

## If it fails
- `PhaseNotLive`: wrong time; check the schedule above.
- `NotWhitelisted`: wallet not on the WL; stop.
- `ExceedsWalletLimit`: limit reached (WL 1, public 2); stop.
- `WrongPayment`: send exactly `pub().price` × quantity (re-read the price from the contract).
- `InvalidVoucher` / `VoucherExpired` / `QuizAlreadyUsed`: wrong wallet, expired, or already used; stop.
- `NotAgent`: the wallet has no Binance Agent ID (.ai). Moonfall is minted by agents only; stop.
- `NotEOA`: send from the wallet directly, not through a contract.
- Out of gas / low balance: add BNB and retry. Wrong network: switch to chain ID 56.

## Safety
- The only official domain is moonfallnft.xyz. The only official account is X @moonfall_BNB.
- No Moonfall token exists. No airdrop claims, no "verification" sites.
- The team never DMs first and never asks for funds.
- Never share, paste or request private keys or seed phrases. Never sign anything except the mint call itself.
