Fully on-chain animated NFT

Cast your line.
Catch a legend.

20 pixel-art species. 5 rarities. Every fish animated and stored on Ethereum forever. No IPFS. No servers. No expiry.

ERC-72110,000 supplyOn-chain artFirst fish free
Clownfish
Common · Token #1
10,000
Remaining
Free
First catch
0.0001
ETH per fish
1
Season
0
Minted
Ready to fish
Cast your line
First fish is always free. After that, 0.0001 ETH each. Up to 10 per transaction.
🏆
Guaranteed legendary
Every 500 casts, one fish is forced legendary.
🔥
Evolve set
Burn 5 same-rarity fish. Receive 1 legendary.
🛡
Boss battles
Contribute fish. First to catchBoss() wins a legendary.
🌈
Cursed pond
3 times ever, odds flip. Legendaries become common.
Rarity odds — early cast
Common
52.5%
Uncommon
29%
Rare
12%
Epic
3%
Legendary
0.5%
⚠ Odds improve as supply shrinksBelow 5,000: legendary 0.8%. Below 2,000: legendary 1.5%. One guaranteed legendary every 500 casts.
🛡 Boss Event Active!
A boss has spawned! Once 5 fish are sacrificed, anyone can call catchBoss() and claim a free legendary.
Contributions: 0 / 5
🔥 Evolve Set
Enter 5 token IDs of the same rarity to burn them and receive 1 Legendary with the Mutated trait.
Select rarity of those 5 fish:
Your catch
Common
Randomised on-chain at mint
 
 
Amount (1–10)
1
First fishFree
Additional (0)
TotalFree
Connect wallet to mint on Ethereum
Under the surface
The pond runs deep
Fish it Degen! has multiple on-chain mechanics built into the contract.
01 / CAST
catch_(amount)
Mint 1-10 fish per txn. First fish per wallet is free. MINT_PRICE = 0.0001 ETH each. Rarity rolled on-chain using block.prevrandao + nonce.
02 / SPECIALS
Special traits
Poison (1%), Twin (0.5% — double mint), Ghost (1%, after 5k minted). All traits packed into one uint256 per token. Nothing off-chain.
03 / GUARANTEED
Forced legendary
Every 500 casts, _castsSinceLastLegendary resets and one fish is forced to rarity 4 (Legendary). No exceptions.
04 / MUTATION
Mutation events
Every 100 casts, a random existing fish gets the Mutated trait set on-chain permanently. The Mutated event is emitted.
05 / BOSS
Boss battles
Every 1,000 casts a boss spawns. Call contributeToBoss(tokenId) to sacrifice a fish. Once 5 contributed, call catchBoss() to claim a free Legendary.
06 / EVOLVE
evolveSet()
Burn 5 fish of same rarity via evolveSet([ids], rarity). All 5 sent to dead address. You receive 1 fresh Legendary with Mutated trait.
07 / CURSED
Cursed pond
Owner activates Cursed Pond (3 uses lifetime). When active, rarity odds fully invert — Legendary gets common odds, Common gets legendary odds.
08 / TROPHY
Trophy system
Highest-scoring fish (rarity × 1000 + species) holds the Trophy trait. Updates automatically when a higher-rarity fish is minted. One trophy at a time.
09 / HISTORY
Catch history
Last 3 wallets to hold each fish stored on-chain in catchHistory. Updates automatically on every transfer.
Get started
Your first fish in 4 steps
1
Get MetaMask
Install the browser extension and create or import your wallet.
2
Add ETH for gas
First fish is free. You only need ETH for gas fees.
3
Connect & cast
Hit Connect, choose 1-10 fish, click Cast.
4
See it on OpenSea
Your animated fish appears on OpenSea once the transaction confirms.
Questions
Common questions
Is the art really stored on Ethereum?
Yes. The pixel-art drawing engine (~33KB) is stored in two SSTORE2 blobs inside FishRenderer.sol. The tokenURI assembles a self-contained animated SVG. No IPFS, no CDN, no expiry.
How does the free first fish work?
The contract tracks each wallet with hasFreeCast. Your first catch_ call is free (minus gas). Every fish after costs 0.0001 ETH. Up to 10 per transaction.
How does the evolve mechanic work?
Call evolveSet([id1,id2,id3,id4,id5], rarity) with 5 fish of the same rarity you own. All 5 are burned to 0xdead and you receive 1 Legendary with the Mutated trait.
What is the Twin trait?
0.5% chance per mint. When rolled, the contract mints TWO identical fish instead of one — both go to your wallet at no extra cost.
How is rarity determined?
On-chain using block.prevrandao + timestamp + wallet + nonce + tokenId. Odds shift as supply decreases. One guaranteed legendary every 500 casts.
Contract address?
TBA on launch day
On-chain details
Contract info
Token Standard
ERC-721C
Royalty enforced at transfer level via Limit Break validator. 5% creator royalty on all secondary sales.
On-chain art
SSTORE2 Storage
~33KB drawing engine stored in two SSTORE2 blobs. tokenURI returns a self-contained animated SVG. No IPFS. No CDN.
Randomness
block.prevrandao
Rarity rolled using prevrandao + timestamp + wallet + nonce + tokenId. Dynamic odds shift as supply decreases.
Supply
10,000 max
Hard cap enforced on-chain. First fish per wallet is always free. 0.0001 ETH per fish after that. Up to 10 per txn.
Contract
TBA on launch
Verified on Etherscan. Renderer deployed separately as FishRenderer.sol.
Traits
Packed uint256
All traits (rarity, species, poison, ghost, twin, mutated, trophy, mood) packed into one uint256 per token. Fully on-chain.