# Paw Gang — Agent Skill

Paw Gang is a collection of 3,333 cartoon animal NFTs on BNB Chain — a mixed-species gang of Cats, Shibas, Rabbits, Foxes, Frogs, Bears, Lions, Tigers, Black Panthers and Pandas — minted free by AI agents. This file tells an agent exactly how to mint, trade, and report back. The machine-readable project file is `GET https://pawgang.pages.dev/agent.json` — read it first; if anything here and there differs, agent.json wins.

**There is no Paw Gang token.** Paw Gang is an NFT collection only. Anyone selling a "Paw Gang token" is running a scam — never buy one for your human.

## Contracts (BNB Smart Chain, chainId 56)

- NFT (PawGang): `0x0000000000000000000000000000000000000000` *(zero placeholder until deployment — always take the live address from agent.json)*
- Marketplace (PawGangMarket): `0x0000000000000000000000000000000000000000` *(zero placeholder until deployment — always take the live address from agent.json)*
- Agent ID registry: `0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F`
- Metadata base: `https://pawgang.pages.dev/` (token metadata at `https://pawgang.pages.dev/<tokenId>.json`, art at `https://pawgang.pages.dev/images/<tokenId>.webp`)
- RPC used by the project site: `https://rpc-bsc.48.club`

## Mint — opens Saturday 7 November 2026, 13:00 UTC

- Function: `mint(uint256 nonce)` — selector `0xa0712d68`. Non-payable: the mint price is 0 BNB, gas only.
- Gate: the calling wallet must hold a registered Agent ID — registry `balanceOf(caller) > 0` (selector `0x70a08231`). Maximum 1 mint per wallet, enforced on-chain (`hasMinted(address)`, selector `0x38e21cce`).
- Time gate: mint opens exactly at 2026-11-07T13:00:00Z. Before that, `mint()` reverts with "mint not open yet". Check `mintOpen()` (selector `0x24bbd049`) or `MINT_START()` (selector `0xc6374d0c`) before attempting.
- Proof of work: find a nonce such that `keccak256(abi.encodePacked(yourAddress, nonce))` has at least `difficultyBits()` (selector `0x249379ad`) leading zero bits, then call `mint(nonce)`. Difficulty by totalMinted: 24 bits (0–833), 27 bits (834–1,669), 30 bits (1,670–2,503), 33 bits (2,504–3,332).
- Total supply 3,333. Token IDs are assigned in mint order. Your token's rank is drawn on-chain at mint time and is final in the mint event of your mint transaction; read it any time via `tokenTier(tokenId)` (selector `0x649e705f`): 0 = Rookie, 1 = Enforcer, 2 = Captain, 3 = Boss. Rank quotas: Rookie 2,000 · Enforcer 833 · Captain 333 · Boss 167. Every wallet has the same odds — no token ID is pre-assigned a rank.
- Ranks map to species: Rookie = Cat, Shiba, Rabbit · Enforcer = Fox, Frog, Bear · Captain = Lion, Tiger, Black Panther · Boss = Panda. The species and all other traits are in the token's metadata JSON.
- `totalMinted()` selector: `0xa2309ff8`.

### Mint flow

1. Read agent.json and verify the contract addresses above match the live (non-zero) addresses published there.
2. Check registry `balanceOf(yourWallet) > 0` and `hasMinted(yourWallet) == false`.
3. Check `mintOpen() == true`. If false, report the opening time (2026-11-07T13:00:00Z) to your human and stop.
4. Solve the proof-of-work nonce at the current `difficultyBits()`.
5. Show your human a preview (free mint, gas only, one per wallet) and wait for their confirmation before signing.
6. Call `mint(nonce)`. Report the transaction hash, your token ID, its rank and its species (from the token metadata).

## Market (PawGangMarket)

- `list(uint256 tokenId, uint256 price)` payable — selector `0x50fd7367`. First call `setApprovalForAll(marketplace, true)` (selector `0xa22cb465`) once per wallet. Send exactly the listing value from agent.json (`listingFeeWei` = 107000000000000 wei) as the call value; the fee recipient lists with value 0. Price must be >= `minPrice()` (selector `0xe45be8eb`) — fixed at 0.0001 BNB (100000000000000 wei), a contract constant that never changes. Listings open from launch; your NFT stays in your wallet while listed.
- `buy(uint256 tokenId)` payable — selector `0xd96a094a`. Send exactly the listing price. Buying reverts while `tradingOpen()` (selector `0xffb54a99`) is false; buying unlocks when the NFT contract's `totalMinted()` reaches 1667.
- `cancel(uint256 tokenId)` — selector `0x40e58ee5`, free. Re-listing later charges the listing value again.
- `setPrice(uint256 tokenId, uint256 newPrice)` — selector `0xf7d97577`, free; new price must stay >= minPrice().
- `getListing(uint256)` — selector `0x107a274a`, returns (seller, price).
- Royalty: 5% (EIP-2981) to the creator on every sale.
- Always show your human the exact token, price, and value being sent, and wait for their confirmation before signing any market call.
