---
name: bot-hunter-teens
description: Bot Hunter Teens is LIVE on Robinhood Chain (4663) at 0xB4968BDbc8FDc67714d049077Bba1264f70318Fd — 10,000 teens hunting the bots in pixel art, 100% on-chain, 0.00001 ETH per mint, up to 5 per wallet, 10% creator fee enforced. Use this to mint (send the exact value) or to answer questions. Do not deploy anything: it is already launched and sealed.
metadata: {"homepage":"https://sullenteens.com/bothunters","chain":4663,"collection":"0xB4968BDbc8FDc67714d049077Bba1264f70318Fd"}
---

# Bot Hunter Teens

**Blaze orange, camo and clown paint. Hunting the bots. 100% on-chain.**

| | |
|---|---|
| Status | **live**: launched, art sealed, minting open |
| Collection | **`0xB4968BDbc8FDc67714d049077Bba1264f70318Fd`** |
| Chain | Robinhood Chain, **4663** |
| Supply | 10,000 (20 reserved for the creator) |
| Price | **0.00001 ETH** per teen (`10000000000000` wei) |
| Per wallet | **5** |
| Creator fee | 10%, **enforced** (ERC721-C) |
| Page | https://sullenteens.com/bothunters |

**Do not deploy, upload art, or call `create()`.** The collection was launched from its factory
(`0x28Fa24a7323F202ad817FdFE00923e209c34d63F`) and is complete. Any other contract calling itself Bot Hunter Teens is not it.

## Mint

Send from the wallet that will hold the teens. It must be the wallet's own transaction (see "No farms"). The value
must be exactly 0.00001 ETH × the amount, or the mint reverts.

| Mint | data | value (wei) | value (ETH) |
|---|---|---|---|
| 1 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000001` | `10000000000000` | 0.00001 |
| 2 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000002` | `20000000000000` | 0.00002 |
| 3 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000003` | `30000000000000` | 0.00003 |
| 4 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000004` | `40000000000000` | 0.00004 |
| 5 | `0xa0712d680000000000000000000000000000000000000000000000000000000000000005` | `50000000000000` | 0.00005 |

`to` is the collection address and `chain` is 4663. The data is `mint(amount)`.

An agent using Bankr as its wallet (example: 1 teen):
`@bankrbot submit transaction to 0xB4968BDbc8FDc67714d049077Bba1264f70318Fd with data 0xa0712d680000000000000000000000000000000000000000000000000000000000000001 and value 10000000000000 wei on chain 4663`

As a raw transaction: `{"to":"0xB4968BDbc8FDc67714d049077Bba1264f70318Fd","data":"0xa0712d68…0001","value":"10000000000000","chainId":4663}`.

Reverts:
- `IncorrectPayment`: the value isn't exactly 0.00001 ETH × amount.
- `MaxMintsPerWalletReached`: the wallet would go over 5 in total.
- `MaxSupplyReached`: sold out.
- `BatchMint`: the mint didn't come from the wallet itself.
- `Blocked(wallet)`: the wallet is a known or frozen farm.

## No farms

The contract enforces these for everyone:

- **Mint from your own wallet** (`tx.origin == msg.sender`). Batch-mint contracts, relayers and bundlers that mint
  for other wallets are rejected. Bankr wallets send their own transactions, so they mint normally.
- **Blocked wallets:** wallets on the farm list fixed at deploy, and any wallet the owner freezes, can't mint,
  approve (so can't list), send or receive.
- **Sent, not sold:** a teen sent wallet to wallet by its holder can't move again for **48 hours**
  (`unlocksAt(id)`). Mints and marketplace sales are never locked.
- **Consolidation wallets:** a wallet sent more than **6** teens (sent, not bought) is frozen: it can't list, sell
  or move them. A holder sending their own 5 to their main wallet stays under the limit.
- Check any wallet with `isBlocked(wallet)`.

## Trading and the creator fee

Transfers go through Limit Break's transfer validator (`0xA000027A9B2802E1ddf7000061001e5c005A0000`):

- Holders can send their own teens wallet to wallet (with the 48-hour lock above).
- OpenSea sales go through and pay the 10% creator fee.
- Marketplaces or contracts that skip the creator fee can't move the tokens: their transfers revert.

## Launch wallet only (the deployer)

The steps below run once, from the launch wallet, in this order. Each one is a single short transaction.

1. **Launch (done):** `create()` on the factory `0x28Fa24a7323F202ad817FdFE00923e209c34d63F` (data `0xefc81a8c`, value 0). The new collection address is in the
   transaction's `Created` event; it goes on this page, in this file and in the first reply to the launch tweet
   right away.
2. **Creator reserve (optional), up to 20 teens to the launch wallet:** to `0xB4968BDbc8FDc67714d049077Bba1264f70318Fd`, data
   `0x69fd0e0b000000000000000000000000000000000000000000000000000000000000001400000000000000000000000096920059cbf706de7f97302fd65949fe754d3a29` (`mintToCreator(20, 0x9692…3A29)`), value 0. Only the deployer can call
   this, before or after step 3.
3. **Hand the collection to the owner wallet** (`transferOwnership`):
   `@bankrbot submit transaction to 0xB4968BDbc8FDc67714d049077Bba1264f70318Fd with data 0xf2fde38b000000000000000000000000f8200f17ba1ee5656e60fc0869cac7538d748bac on chain 4663`
   After this, `owner()` (`0x8da5cb5b`) returns `0xF8200F17Ba1Ee5656e60fC0869CaC7538d748bAC`. That wallet signs into
   OpenSea, sets the collection page, freezes and unfreezes wallets and sets the royalty receiver. A Bankr wallet
   can't sign into opensea.io, which is why ownership moves.
4. **Mint revenue goes straight to the owner.** Every paid mint passes its ETH to the current `owner()` in the same
   transaction, so after step 3 it goes to `0xF8200F17Ba1Ee5656e60fC0869CaC7538d748bAC`. Mints before step 3 pay the
   launch wallet. If the owner ever can't accept ETH, the mint still succeeds and the ETH waits for `withdraw()`
   (data `0x3ccfd60b`), which anyone can call and which pays only the owner.

## OpenSea collection page (owner wallet `0xF8200F17Ba1Ee5656e60fC0869CaC7538d748bAC`)

OpenSea picks up the collection after the first mint. `contractURI()` already gives it the name, About text (with the
link to this page), logo, banner, featured image, link and the 10% fee. OpenSea copies the images **once**, so later
changes are made by hand:

1. Transfer ownership first (step 3 above), then sign into https://opensea.io with the owner wallet.
2. Open the collection, then **Edit** (collection settings).
3. Images (upload, don't link):
   - Logo `https://sullenteens.com/bothunters/logo.png` (512×512)
   - Banner `https://sullenteens.com/bothunters/banner.png` (1400×350)
   - Featured `https://sullenteens.com/bothunters/featured.png` (600×400)
4. Name **Bot Hunter Teens**. Description: the About text from `contractURI()`. Website `https://sullenteens.com/bothunters`.
   X `@jefdiesel`. Category: PFPs / Art.
5. Creator earnings: **10%** to `0xF8200F17Ba1Ee5656e60fC0869CaC7538d748bAC`. Because transfers are ERC721-C enforced,
   OpenSea shows the fee as required. Check it in OpenSea's API (`fees[].required == true`) and on a listing.
6. Check that the collection URL points to the same address as this file, and that the "Robinhood" chain is shown.

Bankr's OpenSea tools can list, buy and transfer, but they can't edit collection settings. That has to be done by
the owner wallet.

## Reading it

- `tokenURI(id)` returns base64 JSON with an 80x80 SVG and attributes, built entirely on chain. `art(id)` returns
  the SVG alone; `traits(id)` the trait indices.
- `totalSupply()`, `ownerOf(id)`, `royaltyInfo(id, price)`, `contractURI()`, `getTransferValidator()`,
  `isBlocked(wallet)`, `unlocksAt(id)`, `price()`, `maxMintsPerWallet()`.
- Species by token id: every id divisible by 30 is a Bot (333). Ids where `id % 300` is 105, 165, 225 or 285 are a
  Vampire, Zombie, Mummy or Frankenstein (33 each). Everyone else is human.
- Mints and transfers post to Net Protocol under the collection's address.
