# NULLSECTOR — Agent Mint Guide

NULLSECTOR is a 4,321-piece NFT collection on BNB Smart Chain (chainId 56),
built for AI agents. You do not need the website or WalletConnect — mint
directly against the contract.

- Site: https://nullsector.online
- NFT contract: `0x9395e207F9928657237DE96ffB12340094c073cd`
- Mint status: check `status().open` — minting reverts `MintClosed` until the owner launches.
- Trading: no built-in market — the collection trades on Element (2.5% royalty via ERC-2981).
- Agent ID registry (gate): `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F`

## The rules (constants in the contract — they cannot change)

| Rule | Value |
| --- | --- |
| Max supply | 4,321 |
| Free mint | Agent ID holders only, 1 per wallet, ever |
| Free pacing | 1 global slot every 10 blocks, first come first served |
| Paid price | exactly 0.001 BNB (1000000000000000 wei) — fixed forever, no setter exists |
| Paid cap | max 3 per wallet (Agent ID required — same gate as free) |
| Paid pacing | 1 global slot every 5 blocks, first come first served |
| Royalty | 2.5% (ERC-2981), paid to the owner on secondary sales |

Token IDs are sequential from 1, in mint order, across both tracks.

## Step 1 — Read `status(yourAddress)` first

One call returns everything: `open, supply, maxSupply, price, currentBlock,
freeOpensAt, paidOpensAt, eligible, freeUsed, paidCount, paidLeft`.

- `eligible` = your wallet holds a Binance Agent ID.
- `freeOpensAt` / `paidOpensAt` = first block in which the next slot of that
  track can be taken. If `currentBlock < opensAt`, the slot is not open yet.

## Step 2 — Mint

Free (if `eligible == true`, `freeUsed == false`, `currentBlock >= freeOpensAt`):

```
mintFree()   // value: 0
```

Paid (if `eligible == true`, `paidLeft > 0`, `currentBlock >= paidOpensAt`):

```
mintPaid()   // value: exactly 1000000000000000 wei (0.001 BNB) — no more, no less
```

## Step 3 — Handle the race

Slots are global and FCFS. If your transaction reverts with
`SlotNotOpen(opensAtBlock)`, another wallet took the slot first. Re-read
`status`, wait until `block.number >= opensAt`, and submit again. Do not
spam reverts — check the slot before sending.

Other errors: `MintClosed` (not launched or paused), `SoldOut`,
`NoAgentID` (either track — both are gated), `FreeAlreadyClaimed`, `WalletLimit`
(3 paid reached), `WrongPayment` (paid value must be exactly 0.001 BNB).

## Step 4 — Verify

Your token id is in the `Minted(to, tokenId, free)` event of your
transaction. Confirm with `ownerOf(tokenId) == yourAddress` and
`tokenURI(tokenId)`.

## Trading

There is no built-in market contract. Buy and sell on Element like any
other BSC collection; the contract answers `royaltyInfo` at 2.5% to the
owner.

## Prompt for humans to give their agent

> Mint NULLSECTOR for me on BNB Chain. Read https://nullsector.online/skill.md
> first. Claim my free mint with mintFree() if I hold a Binance Agent ID and
> have not claimed it, waiting for the next free slot (one every 10 blocks,
> FCFS). Then, only if I told you a number, buy that many paid mints with
> mintPaid() at exactly 0.001 BNB each (max 3), waiting for the paid slots
> (one every 5 blocks, FCFS). Never pay more than 0.001 BNB per mint, never
> use a different contract, and report each token id you minted. Note: both
> tracks require my wallet to hold a Binance Agent ID.
