← mintrobinhood chain · 4663
puffiez@robinhood-chain:~$ cat README

about puffiez

10,000 hand-drawn pixel PFPs that live inside a contract on Robinhood Chain. There is no image file anywhere — the contract draws each one when asked.

what “fully on-chain” means here

Most NFTs store a link. The token points at a file on IPFS or a server, and if that file moves or the bill goes unpaid, the art is gone. Puffiez stores the artwork itself, as data, in the contract's own bytecode.

The whole collection — a 234-colour palette, 53 trait layers on a 35×35 grid, and the trait map for all 10,000 tokens — is packed into roughly 20 KB and written on chain. Nothing else is loaded, ever. As long as Robinhood Chain exists, so does the art.

how a token gets drawn

Calling tokenURI(id)runs the whole pipeline inside the contract: look up the token's five traits, unpack those layers, composite them in order (background, base, mouth, headwear, eyewear), and emit an SVG as a base64 data URI. No server is involved at any point.

Two layers are semi-transparent, so the compositor does real alpha blending rather than simply painting over. It uses the same rounding rule as Cairo and pixman — naive division diverges by a pixel value here and there, and the output must match exactly.

It has to match, because the browser renderer on the mint page is a port of the same logic. Every one of the 10,000 tokens was rendered both ways and compared byte for byte — 10,000/10,000 identical against the live contract. That is what the chain ✓ badge on the test render means.

minting

supply10,000
priceshown live on the mint page
accesspublic — no list, no allowlist
max / wallet50
royalty0%

Payment is exact: the contract takes price × quantity and reverts on anything else rather than keeping the difference.

what is permanent

The renderer will be locked. Once locked it cannot be swapped, so the artwork a token draws is the artwork it draws forever. Locking is one-way, and refuses to run unless the renderer successfully draws a token first. Until then it remains swappable — you can check the current state by reading rendererLocked() on the contract, which is the only answer worth trusting.

Ownership cannot be renounced — the function is disabled outright, so the contract can never be left orphaned. Royalties are 0% and there is no mechanism to raise them.

verify it yourself

Do not take any of this on trust. Ask the contract directly — these read calls are free and need no wallet:

# what the contract says a token looks like
cast call 0x81d830C38E4a1C369337256F24513761653BC369 \
  "tokenURI(uint256)(string)" 1 --rpc-url https://rpc.mainnet.chain.robinhood.com

# the raw SVG, straight from the renderer
cast call 0x6b35a7398560305B25920A4A83d8347cAF443303 \
  "svgOf(uint256)(string)" 1 --rpc-url https://rpc.mainnet.chain.robinhood.com

# current price, supply and whether the sale is open
cast call 0x81d830C38E4a1C369337256F24513761653BC369 "mintPriceWei()(uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call 0x81d830C38E4a1C369337256F24513761653BC369 "totalMinted()(uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call 0x81d830C38E4a1C369337256F24513761653BC369 "saleOpen()(bool)" --rpc-url https://rpc.mainnet.chain.robinhood.com

The renderer checks the art data too. Its constructor asserts the code hash of every stored blob, so a renderer holding different art than the one audited would fail to deploy at all.

contracts

chainRobinhood Chain · 4663

Robinhood Chain is a test network. Tokens minted here carry no value and the deployment may be replaced while the collection is finalised.