Technical notes
Everything here can be checked against the chain. Nothing on this page needs you to trust us.
Where the art lives
Two contracts. The collection holds ownership and a packed table of trait indices, three bytes per token. A separate renderer holds the art data and builds the picture. Both store their data as contract code rather than in storage slots, which is roughly three times cheaper per byte.
- Art data
- 7,937 bytes — palette, layers, fur texture
- Trait table
- 9,999 bytes — 3 bytes per token
- Trait names
- 853 bytes — categories, traits, tiers
- Outside references
- none
How a picture is assembled
On tokenURI the renderer reads the token's
three bytes, unpacks seven trait indices, and lays down the background,
the body, the fur speckles and then each trait in a fixed order. The result
is a grid of palette slots, turned into an SVG of horizontal runs and
returned as a data: string. Reading it is a
view call, so it costs nothing.
The renderer is interchangeable until the owner locks it with
lockRenderer(). The art itself is data, not
code, so replacing the renderer could fix a metadata bug without touching
a single pixel.
Why the allocation can be trusted
Two things would each be easy to fake on their own, so both are pinned. The table of 3,333 trait sets was generated in advance from a published seed, and its hash was fixed before minting opened. Which token receives which row is then decided by a single offset, taken from a block hash at the moment minting opened. The owner does not produce blocks, so the offset was not theirs to choose.
Honest about the limit: the offset comes from a block hash, not from a verifiable random function. A block producer could in principle influence it. For a collection this size that is the usual trade-off, and it is written down here rather than glossed over.
Rules in the contract
- Supply is fixed at 3,333 and cannot be raised.
- Ten per transaction, ten per wallet.
- Price is adjustable by the owner, since the price of ETH moves.
- One free mint per wallet for holders of partner collections, 333 total.
- Royalty of 5% declared through ERC-2981.
- Token #1 is the project avatar and is minted to the owner before minting opens.
What it costs
Measured on the network, not estimated.
| Action | Gas |
|---|---|
| Deploy both contracts | 9,064,508 |
| Mint two | 119,937 |
| Free mint | 123,726 |
Read tokenURI | view call, free |
Traits and rarity
Loading…
Checking it yourself
- Read
combos()on the collection to get the table address, then read that contract's code. It is the table, byte for byte. - Hash those bytes with keccak256 and compare with the value above.
- Re-run the generator with the published seed and confirm you get the same table.
- Call
tokenURIon any token and decode the base64. The SVG comes out of the contract, not from here.