How it works

Three moves, no server

A launch is a drawing sent as bytes. Everything after it is a constant in a contract. There is no upload step, no image host and no metadata service, because the chain holds the picture and draws it back itself.

01 · Draw

Bytes, not pixels

The canvas is 256 by 256. Each stroke you make is simplified to a handful of points, a colour from a fixed sixteen colour palette and a width, and packed into bytes: three bytes per stroke plus two per point. A doodle is a few hundred bytes. The pad accepts up to 8,192.

02 · Launch

The chain keeps it

One transaction. The contract checks the bytes are well formed, refuses an exact repeat of a drawing that already exists, writes the bytes into the new coin's contract, mints the whole supply to the coin's own curve and gives you nothing: no allocation, no cut, no admin.

03 · Trade

It trades, you earn

Buys and sells run against one constant product forever. One percent of every trade is the fee, and the same transaction splits it: eighty percent credited to your wallet, ten spent on the curve and burned, ten to the protocol. Claim yours from the studio whenever you like.

The format

What a drawing is, on chain

Version 1. Every coin's drawing() returns exactly these bytes, and image() returns the SVG the renderer makes of them.

BytesMeaningRange
byte 0Version. Must be 1.1
byte 1Paper colour, an index into the palette.0 to 15
then, per strokeColour index, width in canvas units, number of points.0 to 15 · 1 to 64 · 1 to 255
2 bytes per pointx then y on the 256 by 256 canvas. One point is a dot, more is a line with round caps and joins.0 to 255
Whole drawingStrokes back to back until the bytes run out. Anything malformed reverts the launch.2 to 8,192 bytes

Plainly

What the contract promises

  1. The drawing is the coin. The bytes are written into the coin's own contract at launch and cannot be changed. drawing() gives them back, image() renders them, tokenURI() wraps them in metadata. No IPFS, no server, no link that rots.
  2. The renderer has no owner and no storage. It is a pure function every coin points at. What it draws today it draws forever.
  3. One drawing, one coin. The keccak of the bytes is the key. Launch the same bytes twice and the second reverts, naming the first.
  4. The artist gets nothing at launch. No allocation, no control. If you want your own coin, you buy it like everyone else. What you get is the fee.
  5. The split is 80 / 10 / 10 and it is a constant. 80% of the fee to the wallet that drew it, 10% spent on the coin's own curve and burned, 10% to the protocol. Nobody can change it after deployment.
  6. The buyback is inline. The burn share is spent on the curve in the same transaction as the trade that produced it, and the tokens it buys are destroyed. No keeper, no treasury, no discretion about when.
  7. The curve never graduates. A virtual reserve of 0.05 ETH seeds every curve and is never withdrawable, which is what keeps the last seller payable.
  8. Nobody can touch a curve, a picture or an artist's balance. The owner can rename the vault the protocol's tenth goes to and withdraw that tenth, and that is the whole list.

Honestly

What we do not promise

Open problem

Originality

The contract can only tell that two byte strings differ. A tracing of somebody else's drawing, or the same drawing shifted one pixel, is a new coin to the chain. Uniqueness here means the bytes, not the idea.

Open problem

Taste

Anyone can launch anything they can draw. Nothing is reviewed and nothing can be taken down, because nothing is hosted. The gallery shows what the chain holds.

A limit

Eight kilobytes

The cap keeps a launch cheap and a render cheap to read. The easel simplifies strokes as you draw so most pictures use a fraction of it, and refuses a stroke that would go over.

A limit

Sixteen colours

A fixed palette costs one byte per stroke and makes every drawing look like it came from the same hand. It is the PICO-8 palette with pure white in place of its off white.

Draw one

The canvas is on the front page. The rest is the contract's problem.

Back to the canvas