Buterin Cards

Replay the Mine

2,015 people didn't mint an image.
They uploaded it.

Between April and December 2023, a progressive JPEG portrait of Vitalik Buterin was assembled on Ethereum one calldata chunk at a time: 2,015 mints, 2,015 pieces of one picture, with no image stored anywhere off-chain.

12.6 MB
uploaded on-chain
237
days, Apr 9 to Dec 1
3.4B
gas burned mining it

Scroll to begin ↓

April 11, 2023

It started with a tweet.

Xata (🦍^🎩)

@Xatarrer

It is my pleasure to release the 🃏 𝗕𝘂𝘁𝗲𝗿𝗶𝗻 𝗖𝗮𝗿𝗱𝘀 collection. 🎴 A collection of 2015 unique cards paying tribute to @VitalikButerin. Minting: buterin.cards Big thanks to the rest of my team: @tarpley_travis, @MrLivingstream & @PawelDudko

The front and back of a Buterin Card side by side. The front frames a portrait of Vitalik Buterin over a sunset city skyline, under the quote title Metaverse, numbered 1768 of 2015. The back is a dark circuit board with Buterin Card spelled in rainbow lettering.
View on X

Chapter two

The reveal

Keep scrolling. Every scan the collection ever produced is one frame of what follows.

Pencil Drawing
1 cardno JPEG yetApr 9, 2023

Chapter three

The mosaic

All 2,015 chunks, one cell each, colored by mining phase. Hatched cells are the 48 empty-chroma fillers: no real image data behind them. Hover a cell, or click to open that card.

This mosaic is a canvas and isn't keyboard-navigable, browse the collection in Explore instead

The mosaic below is a canvas visualization and is not keyboard-navigable. Every card it represents can be browsed, filtered, and opened from the Explore page.

Chapter four

How it worked

From a wallet's calldata to the card on your screen: six steps, all on chain.

  1. 01

    Calldata chunk

    Each mint carries ~6.4 KB of the JPEG, raw, in the transaction's calldata.

  2. 02

    Keccak Merkle leaf

    The chunk is hashed into a leaf of the Merkle tree built at deploy time.

  3. 03

    Proof vs. root

    The contract checks a Merkle proof for that leaf against the root pinned into the deployment.

  4. 04

    SSTORE2 data-contract

    A verified chunk is written as the bytecode of a throwaway contract: a permanent, gas-cheap read forever after.

  5. 05

    Progressive JPEG scan

    Chunks accumulate in order into scans: each a further-refined pass over the same image.

  6. 06

    HTML/SVG card

    tokenURI() stitches the latest scan into the on-chain SVG card you're looking at.

Artifacts from the dig

(a) A real chunk

%2F8QAFQABAQAAAAAAAAAAAAAAAAAAAAH%2F2gAIAQEAAAAKAAAAAAIsAAAAAAAA

The first 64 bytes of card #148's chunk: the first real JPEG scan data anyone ever minted (percent-encoded, exactly as it sits on chain).

(b) The footer

%2F9k%3D

Decodes to "/9k=": bytes FF D9, the JPEG end-of-image marker. Same seven characters, every card, always last.

(c) Empty chroma

AAAAAAAA…AAAA (×6,427, uniform)

48 cards (100-147) carry no image data at all: a uniform filler chunk standing in for the JPEG's blue- and red-chrominance channels until real scan data catches up.

(d) The waiting placeholder

"This card will be visible when card #N is mined."

The line the on-chain SVG shows in place of new detail until the next scan-completing token is minted.

(e) The tokenURI bug

uri.slice(uri.indexOf(",") + 1) → decodeURIComponent → JSON.parse, never new URL()

The on-chain metadata contains raw ?/& characters: strict URL parsers truncate it mid-JSON. OpenSea's lenient parser silently repairs it. Bugs, immortalized on-chain, become features.

(f) The missing x

0123456789abcdefghijklmnopqrstuvwsyz

The background renderer's base-36 alphabet, read the tail: "…tuvw" then "syz". No x. Every card's ray pattern runs on this 37-symbol, x-less alphabet.

(g) The seed drift

seedEffective = seedOnChain + drift × 0x6d2b79f5

card.js silently advances the on-chain seed 22-48 steps before rays.js reads it: every card's background runs on a seed its own trait never shows.

Chapter five

The day Ethereum mined a JPEG

Gas used per day, across all 237 days this collection was mintable.

At 14:44 UTC on December 1 this went out. The remaining four fifths of the collection minted in under four hours.

VonMises

@VonMises14

I wanted to bring some attention to a project @Xatarrer has been working on called Buterin cards buterin.cards I've minted 5 so far (vonmises.eth wallet) and plan to mint more, it's a free mint but gas is high on these due to the interesting mechanics of the drop.

View on X
0169.3M677.4M1.524B2.709BDec 1, 2023: 2.709B gas, 1,606 mints in one dayy-axis: √ scale (compresses the Dec 1 spike so ordinary days stay visible)

Dec 1, 2023: this collection briefly became Ethereum's #1 gas consumer, 13.1% of all gas over a 3-hour window, above Uniswap's universal router and Tether (The Block, Dec 1 2023).

  1. Apr 7, 2023, 8:24 PM UTC

    Contract deployed

    block 16,998,945

  2. Apr 9, 2023, 6:59 AM UTC

    First mint

    card #1

  3. Apr 11, 2023, 3:57 PM UTC

    Announced

    @Xatarrer on X

  4. Apr 12, 2023, 2:22 PM UTC

    Pencil Drawing complete

    99 cards minted

  5. Sep 6, 2023, 8:46 AM UTC

    Black & White complete

    271 cards minted

  6. Dec 1, 2023, 2:44 PM UTC

    VonMises14 tweets the project

    @VonMises14 on X

  7. Dec 1, 2023, 3:42 PM UTC

    Grey Shades complete

    533 cards minted

  8. Dec 1, 2023, 4:35 PM UTC

    Blue Chroma complete

    943 cards minted

  9. Dec 1, 2023, 5:11 PM UTC

    Red Chroma complete

    1,319 cards minted

  10. Dec 1, 2023, 6:18 PM UTC

    Resolution complete

    2,015 cards minted

  11. Dec 1, 2023, 6:18 PM UTC

    Sold out

    1,606 of 2,015 cards (80%) minted this single day

On the fee numbers

Our own receipts: every mint's gasUsed × effectiveGasPrice, summed across all 2,015 mints over the full eight months, total 279.58 ETH. The press figure of 318.31 ETH ($665,670) in 24 hours covers gas from all activity touching the collection that day (trades, approvals, failed transactions), not just mint fees. The two numbers aren't measuring the same thing, which is the honest reason they don't match.

Chapter six

The artifact

Every scan you scrolled through above was a decoded preview. This is the actual file: reassembled byte-for-byte from the chain, nothing else.

The full reassembled on-chain JPEG of Vitalik Buterin, 8,576 × 6,897
Download the on-chain JPEG (7.88 MB)

8,576 × 6,897 · progressive · reassembled from 1,868 on-chain chunks · verify it yourself on any card page

sha256 70b716996354d7c0dde75c29283f2015d8a88bc78e0d56ce93b61c70eba1fff7

Credits

@Xatarrer: JPEG & code

@PawelDudko: dynamic background

Lineage

Nakamoto Cards (Bitcoin) → JPEG Mining → Buterin Cards, the second collection ever mined as a JPEG, and briefly Ethereum's #1 gas consumer.

That's the mine.

Now go find your card.