"Stamps" are token images for Ethereum
It's Solidity all the way down
Stop me if you’ve heard this one before.
“It’s just a JPEG.”
“It’s not even a JPEG. It’s just a link!”
Most token images are like this. But token images don't need to be links. Instead, some collections encode data directly in their token URLs. Take Larva Labs' Autoglyphs for example.

The Autoglyphs smart contract doesn’t store a link to its images. It generates each glyph algorithmically and defines the output as an inline data URL.
Fully onchain
But even though fully onchain examples like Autoglyphs exist, most other tokens still rely on external links and web frameworks to host and render their media. Why? Well, storing media onchain is expensive, and generating media onchain is unconventional.
But let’s say we still want to produce “fully onchain” token URLs. What else could that look like?
Stamps
I've been calling these fully onchain tokens "stamps".
Standardized - Stamps are standard tokens (e.g. ERC721) with token URLs.
Self-contained - Stamp URLs are inline files encoded in data URL format.
Accessible - Viewing a stamp URL does not exceed the transaction gas limit.¹
No external image hosting. No JavaScript library. Just a smart contract that outputs images you can render in any standard web browser.
With this framework in mind, let’s see what kinds of stamps can create.
Gems
I made “Gems” - a stamp collection of procedurally-generated 3D gemstone SVGs.
How they’re made (for the curious)
We first use a convex hull algorithm to connect a cloud of loosely randomized points into a mesh of triangular faces. Then, we project the mesh faces from 3D to 2D, and arrange the faces from back-to-front (painter’s algorithm) as polygons. We color each face according to a simplified specular lighting model.
All of this logic is defined in a collection of Solidity smart contracts². The final output is a base64-encoded SVG data URL that is generated onchain and renders in any browser like this.
“So it’s not a link but...”
Regardless of the technical novelty, stamps are still images. You can right-click, save, and share them just like any other image.
So why make stamps? For me, it’s a fun exercise - generative art with constraints. It’s also fun to say that stamps are “fully onchain”. But why should that matter? After all,
”It’s just a JPEG.”
Or in this case, an SVG, but you get the picture.
Footnotes
Block gas limits and transaction gas limits can be modified (e.g. EIP-7825 on Ethereum). Alternatively, we could define different “gas classes” of stamps based on their gas cost to render. That being said, gas costs for specific operations can be modified as well.
There is a “PrinterNFT” contract which defines the NFT minting of Gems, and it delegates the image generation to a separately deployed “GemPrinter” contract. This helps break down the contract size. If there’s any interest, I may follow up with a more technical blog post on the 3D rendering and gas optimization in the contracts.




