Skip to content

Instantly share code, notes, and snippets.

@rfikki
Last active May 19, 2026 23:14
Show Gist options
  • Select an option

  • Save rfikki/c2c369dd018d495a522a3e2b5b1f597d to your computer and use it in GitHub Desktop.

Select an option

Save rfikki/c2c369dd018d495a522a3e2b5b1f597d to your computer and use it in GitHub Desktop.

DINO Vault β€” Complete Collector's Guide

CollectibleTrust Β· DAO LLC Β· Dinosaur Vault Protocol
The definitive reference for minting, evolving, battling, and thriving in the DINO ecosystem.


Table of Contents

  1. What Is DINO Vault?
  2. Getting Started
  3. Minting Your Dinosaur β€” The Commit-Reveal Process
  4. The Five Biomes β€” Lore, History and Bonuses
  5. All 28 Traits Explained
  6. Rarity System β€” Genus Groups and Scarcity Scores
  7. The Aging System β€” Your Dinosaur Evolves Over Time
  8. Trait Mutation β€” Changing Your Dinosaur's Anatomy
  9. Cybernetic Grafting β€” Alloy Finishes via Uniswap V4
  10. The 2015 Collectible Coin Badges
  11. TWAP Aura β€” The Living Market Indicator
  12. PvP Battle Arena
  13. Inter-Biome Battle Advantage
  14. Biome Migration
  15. Leaderboard and Volume Tracking
  16. Achievement Badges β€” Soulbound Proof of Legend
  17. Biome Loyalty Streaks
  18. Liquidity Provider Features
  19. Extinction Events β€” Survive or Be Fossilized
  20. Conservation Pledge β€” The Aye-Aye Fund
  21. Adaptive Contrast System β€” How the Art Stays Readable
  22. Wrapped DINO ERC-20 β€” The Protocol Token
  23. On-Chain Art β€” What You Are Actually Seeing
  24. Marketplace and Rarity Tools
  25. Frequently Asked Questions
  26. Quick Reference β€” All Trait Values

1. What Is DINO Vault?

DINO Vault is a fully on-chain, upgradeable NFT collection of 24 dinosaur genera living across 5 distinct biomes, each tied to a specific Uniswap V4 liquidity pool with real historical lore. Every DINO is:

  • Born with fair randomness β€” a two-step commit-reveal scheme prevents any miner, validator, or front-runner from predicting or manipulating traits before you reveal.
  • Rendered entirely on-chain β€” the SVG art and JSON metadata live inside the blockchain itself. No IPFS, no server, no single point of failure. Your DINO looks exactly as designed forever.
  • Genuinely evolving β€” traits change visually based on how long you hold, what you do on-chain, and what happens in the wider DINO economy.
  • Grounded in real 2015 history β€” each biome corresponds to a specific 2015 Ethereum token with documented historical significance. The lore is real.

Contract system

Contract Role
DinosaurVault ERC-721 NFT vault β€” minting, mutation, aging, biome logic
DinosaurArtEngine On-chain SVG + JSON metadata renderer
DinoStructures Shared type library β€” all enums, structs, traits
DinoSwapHook V4 hook β€” graft, battle, leaderboard, TWAP
DinoLiquidityManagerHook V4 hook β€” LP gating, loyalty, conservation
DinoPoolRegistryHook V4 hook β€” biome assignment on pool creation
DinoBattleArena PvP battles settled by Chainlink VRF v2.5
DinoAchievements Soulbound ERC-1155 milestone badges
DinoExtinctionTracker Epoch survival tracking, Merkle-proof extinction
DinoLeaderboard Swap volume accumulator
WrappedDinero ERC-20 DINO token (symbol: DINO) wrapping legacy Dinero 2015

2. Getting Started

What you need

  • An Ethereum wallet (MetaMask, Rabby, Coinbase Wallet, or any EIP-1193 compatible wallet)
  • ETH for gas fees
  • 0.005 ETH incubation fee (mint fee)
  • 0.002 ETH per trait mutation (optional, post-mint)

The five pools

To mint a DINO you must specify which Uniswap V4 pool you are minting into. This permanently assigns your biome. The five launch pools are:

Pool Biome Symbol
DINO/ETH The Primordial Forge πŸŒ‹
DINO/USDC The Crystal Vault πŸ’Ž
DINO/CC The Frontier Ruins πŸ›
DINO/WMC The Standard Origin βš—οΈ
DINO/WAAC The Nocturnal Wilds 🦎

3. Minting Your Dinosaur

DINO Vault uses a two-step commit-reveal minting process. This is not a single transaction β€” it is a deliberate two-block design that guarantees manipulation-resistant randomness.

Why two steps?

If minting used a single transaction, a validator could see your transaction in the mempool and delay it until a block where the randomness gives them a desirable NFT. The commit-reveal scheme prevents this entirely.

Step 1 β€” Commit

  1. Choose a secret random number as your seed. Keep it private.
  2. Compute the commit hash off-chain:
    commitHash = keccak256(abi.encodePacked(yourSeed, yourWalletAddress))
    
    Most front-ends do this automatically and store the seed in your browser.
  3. Call commitSeed(commitHash) on DinosaurVault. Gas cost only β€” no ETH fee.
  4. Note the block number. You have at most 256 blocks (~51 minutes at 12s/block) to reveal before your commit expires.

Step 2 β€” Reveal and Incubate

  1. In a different block than your commit (at least 1 block later, at most 256 blocks later), call:
    revealAndIncubate(yourSeed, poolId)
    
    • yourSeed β€” the exact number from Step 1
    • poolId β€” the bytes32 ID of the V4 pool whose biome you want
  2. Attach exactly 0.005 ETH.
  3. Your DINO is minted with traits derived from keccak256(seed, block.prevrandao, tokenId).

Biome bonuses applied at mint

Biome Automatic bonus
Primordial Forge (DINO/ETH) +5% on top-tier rarity roll
Crystal Vault (DINO/USDC) 2Γ— chance of TRANSPARENT finish
Frontier Ruins (DINO/CC) CC badge guaranteed
Standard Origin (DINO/WMC) WMC badge guaranteed
Nocturnal Wilds (DINO/WAAC) WAAC badge guaranteed; COMPOUND eyes minimum

hasDino badge at mint

If your wallet holds at least 1 legacy Dinero 2015 token at the moment of revealAndIncubate, your DINO automatically receives the DINO badge β€” no extra action required.

What if my commit expires?

Call commitSeed again with a fresh hash. The old commit is worthless once 256 blocks have passed.


4. The Five Biomes

Each biome is permanently assigned at mint based on your chosen pool. The biome determines your SVG background, certain trait probabilities, guaranteed badges, and battle advantages. It is the single most consequential permanent choice in the protocol.


πŸŒ‹ The Primordial Forge β€” DINO/ETH

Lore: The genesis pool. ETH is not merely a token β€” it is the lifeblood of Ethereum itself, born when the genesis block was mined on July 30, 2015, the day the EVM first breathed. This is the origin of all blockchain. DINOs born here carry the mark of the first flame. The lava beneath them is the very code that created everything.

SVG: Near-black red background with a radial ember glow at the centre. Animated lava sparks drift upward from the base β€” always present, always moving.

Bonuses:

  • Genesis rarity uplift β€” the top-tier rarity roll threshold is reduced by 5 points. A Theropod normally needs roll β‰₯ 980 for PLASMA_GLOW; Forge DINOs need only β‰₯ 975. This is the best pool for chasing legendary finishes.
  • Epoch grace β€” Forge holders receive one free epoch survival per calendar year. The DAO excludes Forge wallets from the extinction Merkle root for one epoch per year automatically.
  • Lava spark animation β€” unique animated SVG layer not present in any other biome.

Adaptive rim light: Amber #ffdd88 β€” warm volcanic glow applied to dark body finishes.

LP gate: Must hold β‰₯ 0.1 ETH at time of LP deposit.


πŸ’Ž The Crystal Vault β€” DINO/USDC

Lore: Stable, precise, unwavering. USDC represents Ethereum's maturation from an experimental network into genuine financial infrastructure. DINOs born here are carved from crystal: cold, geometric, perfectly preserved. The Vault aesthetic reflects USDC's role as Ethereum's bedrock of stability β€” the pool that never crashes, never moons.

SVG: Deep blue-black background with geometric crystal formations rising from the bottom and cold white light shafts descending from above. No animation β€” deliberate stillness.

Bonuses:

  • Transparent finish bonus β€” DINOs in the Crystal Vault have a 2Γ— increased probability of rolling TRANSPARENT finish (the rarest ghost-like aesthetic). TRANSPARENT normally occupies approximately 5% of outcomes; Crystal Vault pushes it to ~10%.
  • No extinction grace β€” Stability demands consistent engagement. Crystal Vault holders receive no epoch grace at all.

Adaptive rim light: Ice blue #aaddff.

LP gate: Must deposit β‰₯ $100 USDC-equivalent.


πŸ› The Frontier Ruins β€” DINO/CC

Lore: CurrencyCoin was deployed just 40 days after Ethereum's launch, making it a verifiable relic from the earliest "Frontier" era. The EIP-20 proposal officially cites its source repository as a direct building block to the ERC-20 standard. DINOs born here are archaeologists. They walk among ruins of the first smart contracts, where Vitalik's original currency.sol commits still echo in the bytecode.

SVG: Dark purple-black background with broken stone arches on either side. Ancient Ethereum bytecode etched into the walls in faint purple monospace text: 60806040526004361061003f..., function transfer(address to, uint256 value). A floor-level ground layer separates the ruins from the sky.

Bonuses:

  • CC badge guaranteed β€” every DINO born in the Frontier Ruins receives the CC (CurrencyCoin) badge regardless of their rarity roll. You cannot mint here without earning this badge.
  • Fossil acceleration β€” when a Frontier Ruins DINO is marked extinct, it is eligible for the Fossilized state in 90 days rather than 180. The ruins accelerate decay into permanence.

Adaptive rim light: Violet #cc88ff.

LP gate: Must hold β‰₯ 1 CC token at time of LP deposit.


βš—οΈ The Standard Origin β€” DINO/WMC

Lore: MistCoin was deployed on November 3, 2015 by Fabian Vogelsteller and Alex Van de Sande as a prototype to test the concept of standardised token creation. Sixteen days later, Vitalik Buterin and Fabian proposed the ERC-20 standard. Every standard token on Ethereum β€” USDC, UNI, LINK, and billions more β€” traces back to this code. WMC liquidity is locked until November 3, 2115. DINOs born here inherit the standard.

SVG: Dark blueprint-blue background covered with a precise orthogonal grid of thin lines. Schematic annotation lines point to body parts with labels: "ERC-20 origin", "balanceOf()". The aesthetic is an architectural blueprint β€” the schematic that built everything.

Bonuses:

  • WMC badge guaranteed β€” every DINO born here receives the WMC (Wrapped MistCoin) badge automatically.
  • 25% mutation discount β€” tail and mouth mutations cost 25% less for Standard Origin DINOs. The fee is calculated as mutationFee Γ— 75 / 100. Fabian's standard was about reducing barriers to participation.
  • Centennial LP prestige β€” LP badges in this pool display a "Centennial LP" variant in the achievement system, honouring the 100-year liquidity lock.

Adaptive rim light: Teal #44ffee.

LP gate: Must hold β‰₯ 1 WMC token at time of LP deposit.


🦎 The Nocturnal Wilds β€” DINO/WAAC

Lore: AyeAyeCoin was the first memecoin on Ethereum, deployed on August 20, 2015 β€” just three weeks after Ethereum's launch. Named for the aye-aye, a rare nocturnal lemur from Madagascar with enormous eyes and a long middle finger, its entire supply of 6 million coins sat dormant in a faucet for nearly nine years. On May 26, 2024, a rediscovery post ignited a rush that over three days made the faucet contract one of the biggest gas consumers on Ethereum. DINOs born here are survivors. They waited in the dark for nine years before the jungle found them.

SVG: Near-black green background with a dark canopy silhouette along the top edge. Two pairs of amber aye-aye eyes watch from the far-left and far-right shadows at low opacity β€” always present, always watching. Five animated bioluminescent firefly particles pulse in and out across the scene at randomised intervals.

Bonuses:

  • WAAC badge guaranteed β€” every DINO born here receives the WAAC (Wrapped AyeAyeCoin) badge automatically.
  • COMPOUND eyes minimum β€” the aye-aye is famous for its enormous eyes. All Nocturnal Wilds DINOs are born with at least COMPOUND eyes (rolls of ROUND or SLIT_PUPIL are automatically upgraded). GLOWING_RED eyes are 3Γ— more likely.
  • 9-Year Sleeper β€” Nocturnal Wilds DINOs reach CHRONO_TITAN age bracket after 9 continuous years of holding in the same wallet, not the standard 1 year. This is the only CHRONO_TITAN path that honours the aye-aye's legendary 9-year dormancy. At 9 years, the SVG gains additional visual markers matching the discovery moment.
  • Animated fireflies β€” five unique bioluminescent particle animations not present in any other biome.

Adaptive rim light: Lime #ccff88.

LP gate: Must hold β‰₯ 1 WAAC token at time of LP deposit.


5. All 28 Traits Explained

Every DINO has exactly 28 traits stored in a single 32-byte EVM storage slot. All 28 are exposed in the OpenSea/marketplace attributes panel and indexed for rarity filtering.

Core anatomy (assigned at mint by randomness)

Trait Values Mutable?
Genus 24 dinosaur species No
Biome 5 (pool-assigned) Via migration only
Tail Shape 5 values Yes (traitId=0)
Mouth Type 6 values Yes (traitId=1)
Limb State 6 values No
Alloy Finish 12 values Via cybernetic graft
Primary Hide Color HSL hue 0–359 No
Underbelly Color HSL hue 0–359 No
Rarity Score 0–100 No

Cosmetic traits (assigned at mint)

Trait Values Notes
Eye Type 6 values Biome-influenced in NOCTURNAL_WILDS
Skin Texture 6 values Visible as SVG texture overlay
Headgear 7 values Rendered above skull in z-order
Eyewear 6 values Rendered over eye layer
Mouth Accessory 6 values Cigarette/pipe have animated smoke
Body Gear 6 values Chain, armour, hoodie, etc.
Footwear 5 values Sneakers, boots, rocket boosters
Wrist Accessory 5 values Watch, bracelet, hologram band

Status booleans (set by protocol events)

Trait Set by
Age Bracket Computed dynamically from hold time β€” never stored
Cybernetic Unlocked Cybernetic graft (swap hookData)
TWAP Aura Chainlink oracle via DinoSwapHook.afterSwap
Extinct DinoExtinctionTracker.claimExtinction
Fossilized Reserved (future)

Coin badge booleans (set at mint or by holding legacy tokens)

Badge Set by
hasWaac Mint in Nocturnal Wilds, OR Theropod roll β‰₯ 940
hasWmc Mint in Standard Origin, OR Sauropod roll β‰₯ 960
hasCc Mint in Frontier Ruins, OR any genus roll β‰₯ 995
hasDino Holding β‰₯ 1 legacy Dinero 2015 token at time of mint

6. Rarity System

Genus groups and rarity tables

Your genus index (0–23) determines which rarity table applies at mint:

Theropod Group (genus 0–5: T-Rex through Dilophosaurus)

Roll range Finish Score Notes
975–999 (2.5% with Forge bonus) PLASMA_GLOW 99 Forge pool lowers threshold by 5
900–974 (7.5%) CARBON 75
0–899 (90%) NONE 10

Sauropod Group (genus 6–11: Brachiosaurus through Camarasaurus)

Roll range Finish Score
995–999 (0.5%) GOLD 100
950–994 (4.5%) CHROME 80
0–949 (95%) WOOD 25

Armoured/Horned Group (genus 12–23: Ankylosaurus through Protoceratops)

Roll range Finish Score
990–999 (1%) MULTICOLORED 95
920–989 (7%) BRICK 60
0–919 (92%) NONE 15

Crystal Vault TRANSPARENT bonus

Crystal Vault DINOs whose roll falls between 600–699 (inclusive) and is an even number have TRANSPARENT finish applied instead of the table result, with a score of 88. This gives approximately a 5% additional probability of TRANSPARENT on top of natural outcomes.

Rarity post-mint

All 12 AlloyFinish values can be applied post-mint via Cybernetic Grafting, including GOLD, MULTICOLORED, and TRANSPARENT. Post-mint finishes also set cyberneticUnlocked = true, adding the cyan ring SVG overlay permanently.

The rarest natural mint

A GOLD Sauropod (0.5% roll Γ— Sauropod genus probability) with a Rarity Score of 100 is the rarest single natural mint outcome.

The rarest achievable combination

A DINO with all four coin badges (WAAC + WMC + CC + DINO) β€” the "Full Set" β€” is statistically rarer than any single legendary finish, as it requires simultaneous roll conditions AND legacy Dinero 2015 holding at mint time. The badge panel displays a dashed gold outer ring when all four are present.


7. The Aging System

Your NFT's appearance changes automatically over time without you spending any gas. Every time tokenURI is called (which any marketplace, wallet, or block explorer does when displaying your DINO), the contract computes your current Age Bracket live from block.timestamp - lastTransferTimestamp.

Standard age thresholds

Bracket Hold time Visual markers
HATCHLING 0–29 days Default appearance
JUVENILE 30–89 days Slight maturity indicators
PREDATOR 90–179 days Stronger colouring, battle-ready stance
ELDER 180–364 days Weathered texture markers
CHRONO_TITAN 365+ days (standard) Full legendary appearance

The 9-Year Sleeper (Nocturnal Wilds only)

Nocturnal Wilds DINOs require 9 continuous years in the same wallet to achieve CHRONO_TITAN β€” honouring the aye-aye faucet's own 9-year dormancy. At 9 years, additional SVG visual markers appear matching the discovery moment lore. Standard pools reach CHRONO_TITAN in 1 year.

Aging clock reset

lastTransferTimestamp resets whenever your DINO is transferred to a new address. This includes:

  • Selling on a marketplace
  • Transferring to any other wallet (including your own hardware wallet)

It does not reset when you:

  • List for sale without completing a transfer
  • Approve a marketplace contract
  • Call tokenURI or view the NFT

8. Trait Mutation

After minting, you can change your tail shape or mouth type by paying the mutation fee.

Call mutateAnatomy(tokenId, traitId, newValue):

traitId Trait Valid newValue
0 Tail Shape 0–4
1 Mouth Type 0–5

Standard Origin discount

If your DINO's biome is STANDARD_ORIGIN, the mutation fee is 25% less β€” automatically applied by the vault. The effective fee is mutationFee Γ— 75 / 100.

Tail Shape values

Value Name Rarity indication
0 STRAIGHT Common
1 CURVED Common
2 BOBBED Uncommon
3 SCARRED_WHIP Rare
4 THAGOMIZER Rare

Mouth Type values

Value Name
0 CLOSED
1 SMILEY
2 MISSING_TOOTH
3 GOLD_GRILLS
4 LIQUIDITY_JAWS
5 CRUSHING_BEAK

9. Cybernetic Grafting

Cybernetic Grafting lets you change your DINO's Alloy Finish to any of the 12 possible values β€” including GOLD, MULTICOLORED, and TRANSPARENT β€” by including special data in a Uniswap V4 swap. It also permanently sets cyberneticUnlocked = true, adding a cyan ring overlay to the SVG.

hookData format

hookData must be exactly 128 bytes, ABI-encoded:

abi.encode(
    uint8  action,    // 0 = graft
    uint256 tokenId,  // your DINO's token ID
    uint256 alloy,    // AlloyFinish index (0–11)
    uint256 epochId   // current extinction epoch ID, or 0
)

Example (ethers.js)

const hookData = ethers.AbiCoder.defaultAbiCoder().encode(
    ['uint8', 'uint256', 'uint256', 'uint256'],
    [0, myTokenId, 11, currentEpochId]  // action=graft, alloy=MULTICOLORED
);

AlloyFinish index reference

Index Finish Rarity
0 NONE Common
1 CHROME Uncommon
2 ANODIZED Uncommon
3 CARBON Rare
4 PLASMA_GLOW Very Rare
5 GOLD Legendary
6 BRICK Rare
7 WOOD Uncommon
8 FLUORESCENT Rare
9 BLUESCREEN Rare
10 TRANSPARENT Very Rare
11 MULTICOLORED Legendary

10. The 2015 Collectible Coin Badges

The four coin badges are a unique collectible-within-a-collectible mechanic honouring the specific 2015 Ethereum tokens whose pools form the DINO ecosystem. Each badge is a bool stored in the NFT's anatomy and rendered in a dedicated panel below the dinosaur body on the SVG canvas β€” never overlapping the body art.

Badge panel layout

The badge panel occupies y=760 to y=900 on the 1050-height canvas, separated from the body by a thin biome-accent coloured dividing line. Badge positions adapt automatically to how many badges a token holds:

Count Badge positions (cx values)
0 Dashed empty placeholder: "No badges earned"
1 Centred at cx=400
2 cx=320, cx=480
3 cx=240, cx=400, cx=560
4 cx=176, cx=336, cx=464, cx=624 with outer dashed gold ring

The four badges

WAAC β€” Wrapped AyeAyeCoin (gold, #bf953f)

  • First memecoin on Ethereum, August 20, 2015
  • Awarded: mint in Nocturnal Wilds (DINO/WAAC pool), OR Theropod genus with roll β‰₯ 940
  • Visual: gold foil radial gradient, "WAAC" text, sub-label "AyeAye"

WMC β€” Wrapped MistCoin (steel blue, #1a4a80)

  • Prototype for ERC-20, November 3, 2015
  • Awarded: mint in Standard Origin (DINO/WMC pool), OR Sauropod genus with roll β‰₯ 960
  • Visual: steel blue fill, "WMC" text, sub-label "MistCoin"

CC β€” CurrencyCoin (plasma purple, #2a0060 + neon glow)

  • Deployed 40 days after genesis, direct ERC-20 building block
  • Awarded: mint in Frontier Ruins (DINO/CC pool), OR any genus with roll β‰₯ 995
  • Visual: purple plasma fill with neon glow filter, "CC" text, sub-label "CurrencyCoin"

DINO β€” Wrapped Dinero 2015 (neon green, #002200 + #39ff14 stroke)

  • The protocol's own 2015 legacy token
  • Awarded: hold β‰₯ 1 legacy Dinero 2015 token at the moment of revealAndIncubate
  • Visual: dark green fill with neon green border and text, "DINO" text, sub-label "Dinero 2015"
  • This is the only badge that proves protocol participation β€” not pool selection or lucky randomness

Four-badge full set

When all four badges are present, a dashed gold outer ring encloses all four badges. Off-chain rarity tools flag this combination as the rarest achievable configuration in the entire collection.


11. TWAP Aura

The TWAP Aura is a collective, oracle-driven visual feature. After every swap in a DINO V4 pool, DinoSwapHook.afterSwap reads the Chainlink DINO/ETH price aggregator. If the price meets or exceeds the DAO-configured threshold and your hookData includes a tokenId, your DINO's twapAuraActive is set true β€” triggering a pulsing purple double-ring aura in the SVG art.

Visual effect

Two concentric purple circles with animated opacity (0.55 β†’ 0.9 β†’ 0.55, 2.5 second cycle) surround the body. The aura ring pulses continuously when active.

How to activate it

Include your tokenId in the second slot of swap hookData:

abi.encode(
    uint8(0),        // action = graft (or any action)
    myTokenId,       // id1 = tokenId for TWAP update
    0,               // id2 = not used for TWAP
    epochId          // epochId for extinction survival
)

When afterSwap fires, if tokenId != 0, the oracle is read and the flag is updated accordingly.

Clearing the aura

If the DINO/ETH price drops below the threshold, the next swap with your tokenId in hookData will set twapAuraActive = false and the aura disappears. This is a live market signal β€” not a permanent cosmetic.


12. PvP Battle Arena

The Battle Arena lets two DINO holders challenge each other to a fight settled by Chainlink VRF v2.5 randomness. Neither side can predict or manipulate the outcome.

Initiating a battle

Include battle hookData in a V4 swap:

const hookData = ethers.AbiCoder.defaultAbiCoder().encode(
    ['uint8', 'uint256', 'uint256', 'uint256'],
    [1, challengerTokenId, defenderTokenId, currentEpochId]
    // action=1 (battle), id1=your token, id2=opponent's token
);

Settlement

Settlement happens asynchronously β€” 3–5 blocks after challenge when Chainlink delivers the random word. Watch for the BattleSettled(vrfRequestId, winnerId, loserId, biomeAdvantageApplied) event.

Consequences

  • Winner: battleWins[tokenId]++ β€” permanent on-chain record
  • Loser: battleLosses[tokenId]++ β€” loss record. Your NFT is never taken or burned
  • Battle records are permanent and indexed by rarity tools

13. Inter-Biome Battle Advantage

When two DINOs from different biomes battle, the biome advantage cycle gives the winning biome +5 percentage points of VRF weight. This shifts the effective 50/50 roll toward 55/45.

The cycle

PRIMORDIAL_FORGE  β†’ beats β†’ CRYSTAL_VAULT    (fire melts crystal)
CRYSTAL_VAULT     β†’ beats β†’ FRONTIER_RUINS   (preservation defeats decay)
FRONTIER_RUINS    β†’ beats β†’ STANDARD_ORIGIN  (older code beats prototype)
STANDARD_ORIGIN   β†’ beats β†’ NOCTURNAL_WILDS  (code beats nature)
NOCTURNAL_WILDS   β†’ beats β†’ PRIMORDIAL_FORGE (the wild predates the forge)

Same-biome battles are pure 50/50. The advantage applies automatically in DinoBattleArena.rawFulfillRandomWords using the biomes stored in both NFTs' anatomies.

Strategic implications

  • If you want to challenge someone in STANDARD_ORIGIN, bring a FRONTIER_RUINS DINO for the edge
  • Maintain a NOCTURNAL_WILDS DINO specifically for challenging Forge holders
  • The cycle is symmetric β€” every biome has one it beats and one it loses to

14. Biome Migration

You can migrate your DINO to a new biome by paying the incubation fee (0.005 ETH) while your wallet is participating in the target pool. Migration is limited to once per epoch.

Call migratePool(tokenId, newPoolId) with 0.005 ETH attached.

What changes on migration

  • SVG background switches to the new biome immediately
  • Badge guarantees from the new biome do not retroactively apply β€” the badge booleans are set at mint and are permanent
  • Biome loyalty streak resets β€” migration is the antithesis of loyalty
  • The 9-Year Sleeper bonus (Nocturnal Wilds) applies to current hold time, not past

What does not change

All other traits β€” genus, finish, cosmetics, existing badges β€” are unchanged.


15. Leaderboard and Volume Tracking

DinoLeaderboard tracks cumulative swap volume (in absolute token units) for every address that swaps in any DINO V4 pool. Volume is recorded automatically by DinoSwapHook.afterSwap on every swap β€” no extra action required.

Reading your volume

Query userVolumeAccumulated(address) on DinoLeaderboard.

Epoch Alpha badges

Top-10 volume wallets per pool per epoch are eligible for pool-specific "Alpha" badge variants (e.g. "Forge Alpha", "Wilds Alpha") β€” awarded as soulbound ERC-1155 tokens by the DAO after each epoch closes. Alpha badges appear alongside coin badges in the 2015 COLLECTIBLES panel.


16. Achievement Badges

Badges are soulbound ERC-1155 tokens β€” permanently linked to the earning wallet, never transferable or sellable. All badge art is fully on-chain SVG.

Swap milestone badges (minted automatically)

Badge ID Name How to earn
1 First Swap First swap in any DINO V4 pool
2 Veteran Swapper 10 swaps
3 Apex Trader 100 swaps

LP badge (minted automatically)

Badge ID Name How to earn
4 Liquidity Provider First successful LP deposit in any DINO pool

Biome loyalty badges (DAO-awarded, off-chain verified)

Badge ID Name How to earn
6 Biome Loyal 3 epochs of continuous loyalty to one biome
7 Biome Devoted 7 epochs of continuous loyalty
8 Born of the Biome 10 epochs β€” the rarest badge in the collection

Loyalty streaks are computed off-chain from BiomeLoyaltyStamped events emitted by DinoLiquidityManagerHook. The DAO calls mintLoyaltyBadge(user, badgeId) when thresholds are confirmed.

Badge 5 (Battle Victor)

Reserved for a future release. Will be awarded by the battle system to holders with exceptional win records.


17. Biome Loyalty Streaks

Biome loyalty is measured in epochs. An epoch is a DAO-defined time period (typically 6 months). To maintain your loyalty streak, you must:

  1. Hold a DINO NFT from the same biome for the entire epoch
  2. Provide liquidity in that biome's pool at least once during the epoch
  3. NOT migrate to a different biome during the epoch

Streak benefits

Epochs Badge SVG effect
3 Biome Loyal Biome-accent glow border around the classification label
7 Biome Devoted Biome-accent crown ornament variant in classification area
10 Born of the Biome Permanent distinctive SVG frame unique to that biome

Migrating your DINO resets your loyalty streak to zero for the new biome.


18. Liquidity Provider Features

Access gate

You must hold at least one DINO NFT to add liquidity to any DINO V4 pool. The hook verifies your NFT balance in beforeAddLiquidity. If your balance is zero, the transaction reverts with HookEcosystemStakingGated.

Per-pool loyalty lock

After adding liquidity, you cannot remove it from that specific pool for 3 days. Each pool has its own independent lock β€” adding to Pool A does not affect Pool B's lock.

Re-adding liquidity to a pool resets only that pool's 3-day lock.

If you attempt early withdrawal, the transaction reverts with HookLoyaltyLockActive.

LP badge

Badge 4 (Liquidity Provider) is minted automatically on your first successful afterAddLiquidity in any DINO pool.


19. Extinction Events

Extinction Events are seasonal community challenges run by the DAO. During an active epoch, you must perform at least one swap with the active epochId in your hookData. Wallets that do not swap during the epoch may be permanently marked extinct.

How epochs work

  1. DAO opens epoch via DinoExtinctionTracker.openEpoch(epochId)
  2. During epoch: every swap with epochId in hookData slot 4 records your survival automatically
  3. DAO closes epoch: sets a Merkle root of all non-surviving tokenIds via setExtinctionRoot
  4. Claiming extinction: anyone can call claimExtinction(epochId, tokenId, proof) to mark a specific token

How to survive with one swap

const hookData = ethers.AbiCoder.defaultAbiCoder().encode(
    ['uint8', 'uint256', 'uint256', 'uint256'],
    [0, 0, 0, activeEpochId]  // epochId in slot 4 β€” graft/battle slots can be zero
);

A single swap with the correct epochId is sufficient to survive for all DINOs owned by that wallet.

Survival is wallet-wide

Survival is tracked per wallet, not per token. One swap covers all DINOs owned by that address.

Primordial Forge grace

Forge holders receive one free epoch survival per calendar year β€” the DAO excludes them from the extinction Merkle root for one epoch automatically.

Consequences of extinction

isExtinct = true is set permanently. A large red "EXTINCT" stamp with diagonal crossed lines overlays the SVG. Your DINO is NOT burned or removed from your wallet. Extinct DINOs become historically significant collectibles β€” each one is a timestamped record of a specific epoch.

Fossilized state

isFossilized is reserved for a future upgrade that will activate some time after extinction. Frontier Ruins DINOs fossilize at 90 days post-extinction; all others at 180 days (these timelines are DAO-governed).


20. Conservation Pledge β€” The Aye-Aye Fund

Honouring the AyeAyeCoin community's real-world aye-aye conservation efforts, DINO/WAAC pool participants can opt in to direct a share of LP fees to aye-aye conservation organisations.

How to pledge

Call DinoPoolRegistryHook.pledge() from any wallet.

What happens

  • conservationPledge[yourAddress] is set to true
  • On every subsequent LP deposit, the hook emits a ConservationLpStamped event
  • Future art engine upgrades will read this flag and render a 🌿 leaf overlay on your DINO's SVG β€” a permanent, visible, on-chain record of ecological contribution
  • Fee routing to conservation organisations is governed by the DAO

Revoking

Call DinoPoolRegistryHook.revokePledge() at any time.


21. Adaptive Contrast System

Certain DINO body finishes (NONE, CARBON, WOOD, BLUESCREEN) are very dark in colour. Without intervention, these bodies would visually blend into the near-black biome backgrounds. The art engine applies an automatic contrast system for these cases.

What is applied for dark bodies

  1. Biome spotlight β€” a radial gradient ellipse behind the body zone lifts local background luminance without affecting the rest of the scene
  2. Rim stroke β€” the body SVG paths receive a biome-accent coloured stroke (2.5px) instead of the default dark stroke
  3. Directional lighting β€” the fePointLight lighting colour shifts to the biome accent

Verified rim-light colours (β‰₯ 8Γ— WCAG contrast against all dark finishes)

Biome Rim colour Character
Primordial Forge #ffdd88 Warm amber β€” volcanic light
Crystal Vault #aaddff Cold ice blue
Frontier Ruins #cc88ff Ancient violet
Standard Origin #44ffee Blueprint teal
Nocturnal Wilds #ccff88 Bioluminescent lime

This system operates entirely inside the view function β€” zero gas cost, no new contracts.


22. Wrapped Dinero DINO ERC-20

WrappedDinero (symbol: DINO, name: Wrapped Dinero) wraps legacy 2-decimal Dinero 2015 tokens into standard 18-decimal ERC-20 form.

Decimal bridge

Legacy Dinero 2015 : 2 decimal places
Wrapped DINO       : 18 decimal places
Gap                : 18 - 2 = 16 decimal places
SCALING_FACTOR     = 10^16

1 legacy unit = 10,000,000,000,000,000 DINO wei
Displayed: 1.00 legacy DINO β†’ 1.00 DINO (human-readable values match)

Wrapping

Call wrap(legacyAmount) where legacyAmount is in legacy units (2-decimal). Pass 100 for 1.00 legacy DINO. Approve the WrappedDinero contract first.

Unwrapping

Call unwrap(wrappedAmount) where wrappedAmount must be exactly divisible by 10^16. Indivisible amounts revert with WrapperIndivisibleAmount.

Wrapping and the hasDino badge

If you wrap legacy Dinero and then mint a DINO NFT while holding the wrapped DINO tokens, you receive the DINO badge. The vault checks legacyDineroAddress.balanceOf(caller) > 0 at mint time β€” both wrapped and unwrapped legacy balances count if both addresses are registered.


23. On-Chain Art

Every DINO is rendered as an 800Γ—1050 SVG divided into three vertical zones:

Zone 1: Dinosaur scene (y 0–750)

Layers in render order:

  1. <defs> block β€” all gradients, patterns, filters defined here
  2. Background β€” biome-specific scene with unique elements per biome
  3. Ground shadow ellipse β€” dark oval beneath the body for 3D depth perception
  4. Body geometry β€” genus-group-specific skeletal shape (theropod, sauropod, armoured)
  5. Specular highlight β€” white semi-transparent ellipse on the lit surface for roundness
  6. Skin texture overlay β€” fur strokes, feather curves, crystal spines, or scaly lines
  7. Eye layers β€” sclera + iris + pupil + specular dot (4 layers for depth)
  8. Headgear β€” drawn above skull in z-order
  9. Eyewear β€” overlaid on eye layer
  10. Mouth accessory β€” cigarette/pipe include animated smoke puffs
  11. Body gear β€” hoodie, chain, armour, etc.
  12. Footwear β€” at bottom of body, sneakers include white stripe detail
  13. Wrist accessory β€” on arm/limb area
  14. Cybernetic overlay β€” cyan circle when cyberneticUnlocked = true
  15. TWAP aura β€” animated pulsing purple rings when twapAuraActive = true
  16. Extinct overlay β€” red diagonal cross + EXTINCT text when isExtinct = true

Zone 2: Badge panel (y 760–903)

Separated from the dinosaur body by a biome-accent dividing line. Contains the 2015 COLLECTIBLES label and 0–4 coin badge circles. Badges never overlap the body art.

Zone 3: Classification label (y 904–1050)

Four lines of monospace text: genus and token ID, biome + finish + rarity score, age bracket + eye type + skin texture, and the CollectibleTrust protocol identifier.

Metadata format

tokenURI returns data:application/json;base64,... containing all 28 attributes.


24. Marketplace and Rarity Tools

All 28 traits are exposed as named attributes in the ERC-721 metadata. Marketplaces supporting attribute filtering (OpenSea, Blur, trait.tech, Rarity Sniper) will index and rank DINOs correctly.

Age Bracket caching

Because Age Bracket is computed live at tokenURI call time, marketplaces may cache an older bracket. Use the "Refresh Metadata" button on OpenSea to force a re-fetch. The live bracket is always visible by calling tokenURI directly.

Events to index (subgraph)

  • DinoIncubated(tokenId, owner, genus, biome, rarityScore) β€” mint
  • AnatomyMutated(tokenId, traitId, newValue) β€” mutation
  • CyberneticGrafted(tokenId, finish) β€” graft
  • TwapStateModified(tokenId, active) β€” TWAP
  • BiomeMigrated(tokenId, newBiome) β€” migration
  • ExtinctionMarkApplied(tokenId) β€” extinction
  • BattleSettled(vrfRequestId, winnerId, loserId, advantageApplied) β€” battle
  • BadgeMinted(recipient, badgeId) β€” achievement
  • BiomeLoyaltyStamped(provider, poolId, timestamp) β€” loyalty tracking
  • ConservationLpStamped(provider, poolId) β€” conservation pledge LP

25. Frequently Asked Questions

Q: Which pool should I mint in?
A: Primordial Forge for best rarity odds. Nocturnal Wilds for the WAAC badge and firefly art. Standard Origin for mutation discounts. Frontier Ruins for the CC badge. Crystal Vault for TRANSPARENT finish potential. There is no universally "best" choice β€” every biome has a distinct advantage.

Q: Can I get all four coin badges from one mint?
A: No. Each badge requires either a specific pool mint or a specific roll condition. WAAC requires Nocturnal Wilds OR Theropod roll β‰₯ 940. WMC requires Standard Origin OR Sauropod roll β‰₯ 960. CC requires Frontier Ruins OR any roll β‰₯ 995. DINO requires holding legacy Dinero at mint. The only way to guarantee all four in one DINO is to mint in a coin pool and separately achieve the other conditions β€” but badge guarantees are biome-specific. The full set strategy requires holding legacy Dinero, then minting in a pool that gives one badge guaranteed, and hoping roll conditions provide the others.

Q: Can I move my DINO to a hardware wallet without resetting the aging clock?
A: No. Any wallet-to-wallet transfer resets lastTransferTimestamp β€” including moves to your own hardware wallet. If you want to reach CHRONO_TITAN, keep your DINO in one wallet.

Q: Does migrating biomes change my coin badges?
A: No. Coin badges are booleans set at mint and are permanent. Migration changes the SVG background and battle advantage but never removes or adds badges.

Q: Can battle cause me to lose my NFT?
A: Never. Only win/loss counters change. Your DINO is always yours regardless of battle outcome.

Q: What if Chainlink VRF takes too long to settle a battle?
A: The challenge sits in inflightChallenges in a pending state. The swap that initiated it completed normally. Contact the DAO if a challenge is stuck for more than 100 blocks.

Q: How do I know if my wallet is pledged for conservation?
A: Call DinoPoolRegistryHook.conservationPledge(yourAddress) β€” returns true if pledged.

Q: What gas does minting cost?
A: Approximately 200,000–250,000 gas for revealAndIncubate, plus 0.005 ETH fee. commitSeed costs ~50,000 gas.

Q: Is the DINO badge the same as the DINO NFT collection ticker?
A: No. "DINO" refers to both the ERC-20 token (WrappedDinero, symbol DINO) and the coin badge. Context makes it clear: the badge panel shows the DINO coin badge; the ERC-721 collection ticker is "DINO-NFT".


26. Quick Reference β€” All Trait Values

GenusType (24 values, 0–23)

Theropods (0–5):  TYRANNOSAURUS, SPINOSAURUS, VELOCIRAPTOR, ALLOSAURUS, CARNOTAURUS, DILOPHOSAURUS
Sauropods (6–11): BRACHIOSAURUS, DIPLODOCUS, APATOSAURUS, TITANOSAURUS, ARGENTINOSAURUS, CAMARASAURUS
Armoured/Horned/Ornithopods (12–23):
  ANKYLOSAURUS, STEGOSAURUS, KENTROSAURUS, NODOSAURUS, SCELIDOSAURUS, MIRAGAIA,
  TRICERATOPS, PACHYCEPHALOSAURUS, PARASAUROLOPHUS, IGUANODON, MAIASAURA, PROTOCERATOPS

BiomeType (5 values)

0 PRIMORDIAL_FORGE  (DINO/ETH)   β€” volcanic lava
1 CRYSTAL_VAULT     (DINO/USDC)  β€” crystal cave
2 FRONTIER_RUINS    (DINO/CC)    β€” ancient bytecode walls
3 STANDARD_ORIGIN   (DINO/WMC)  β€” blueprint grid
4 NOCTURNAL_WILDS   (DINO/WAAC) β€” dark jungle + fireflies

AgeBracket (5 values β€” computed dynamically)

0 HATCHLING    (<30 days)
1 JUVENILE     (30–89 days)
2 PREDATOR     (90–179 days)
3 ELDER        (180–364 days)
4 CHRONO_TITAN (365+ days standard; 9 years for NOCTURNAL_WILDS)

TailShape (5 values β€” mutable, traitId=0)

0 STRAIGHT  1 CURVED  2 BOBBED  3 SCARRED_WHIP  4 THAGOMIZER

MouthType (6 values β€” mutable, traitId=1)

0 CLOSED  1 SMILEY  2 MISSING_TOOTH  3 GOLD_GRILLS  4 LIQUIDITY_JAWS  5 CRUSHING_BEAK

LimbState (6 values β€” assigned at mint)

0 INTACT  1 MISSING_TOES  2 ONE_ARMED  3 PEG_LEG  4 CYBERNETIC_ALLOY  5 OSTEODERM_ARMOUR

AlloyFinish (12 values β€” mutable via cybernetic graft)

0 NONE  1 CHROME  2 ANODIZED  3 CARBON  4 PLASMA_GLOW  5 GOLD
6 BRICK  7 WOOD  8 FLUORESCENT  9 BLUESCREEN  10 TRANSPARENT  11 MULTICOLORED

EyeType (6 values β€” biome-influenced at mint)

0 ROUND  1 SLIT_PUPIL  2 COMPOUND  3 GLOWING_RED  4 LASER_BEAM  5 HETEROCHROMIA

SkinTexture (6 values)

0 BALD  1 SCALY  2 FEATHERED  3 BRISTLE_FUR  4 FULL_FUR  5 CRYSTAL_SPINES

Headgear (7 values)

0 NONE  1 BACKWARDS_CAP  2 COWBOY_HAT  3 TOP_HAT  4 CROWN  5 FROG_HAT  6 FLAME_CROWN

Eyewear (6 values)

0 NONE  1 ROUND_FRAMES  2 AVIATORS  3 MONOCLE  4 VR_VISOR  5 GLASSES_3D

MouthAccessory (6 values)

0 NONE  1 CIGARETTE  2 PIPE  3 CIGAR  4 LOLLIPOP  5 TOOTHPICK

BodyGear (6 values)

0 NONE  1 HOODIE  2 CHAIN_NECKLACE  3 BATTLE_ARMOUR  4 TUXEDO_VEST  5 SPACE_SUIT

Footwear (5 values)

0 BARE_CLAWS  1 SNEAKERS  2 BOOTS  3 ROCKET_BOOSTERS  4 ROLLER_SKATES

WristAccessory (5 values)

0 NONE  1 WATCH  2 GOLD_BRACELET  3 HOLOGRAM_BAND  4 SPIKED_CUFF

hookData action field (128 bytes ABI-encoded)

0 = Cybernetic Graft  (id1=tokenId, id2=alloyIndex, epochId=epochId)
1 = PvP Battle        (id1=challengerId, id2=defenderId, epochId=epochId)

Achievement Badge IDs

1 First Swap          (1 swap)
2 Veteran Swapper     (10 swaps)
3 Apex Trader         (100 swaps)
4 Liquidity Provider  (first LP deposit)
5 Battle Victor       (reserved)
6 Biome Loyal         (3 epoch loyalty β€” DAO-awarded)
7 Biome Devoted       (7 epoch loyalty β€” DAO-awarded)
8 Born of the Biome   (10 epoch loyalty β€” legendary, DAO-awarded)

Battle advantage cycle

PRIMORDIAL_FORGE β†’ CRYSTAL_VAULT β†’ FRONTIER_RUINS β†’ STANDARD_ORIGIN β†’ NOCTURNAL_WILDS β†’ PRIMORDIAL_FORGE
(each biome beats the one to its right; +5% VRF weight advantage)

DINO Vault is a CollectibleTrust DAO LLC protocol. All contract interactions are final and irreversible. Always verify contract addresses through official governance channels before transacting.

THIS CODE HAS NOT BEEN AUDITED - USE AT YOUR OWN RISK

Document version: v7 β€” reflects the complete updated codebase including biome gamification, coin badges, adaptive contrast, cosmetic traits, and full pool system.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment