Docs

The game on the home page has infinite lives, so you cannot lose it. The chain breaks it instead: every $LIVES trade overwrites one byte of its cartridge, and anyone can recount the result.

In four steps

  1. 1. A trade

    Any $LIVES trade of 0.02 SOL or more, buy or sell, on the pump.fun curve or on PumpSwap after it.

  2. 2. One byte

    sha256 of the transaction signature picks an address in the 4,096 byte ROM and a new value.

  3. 3. The crash

    When 40% of the bytes differ from the clean ROM, the game falls to its error screen.

  4. 4. The burn

    The whole pot buys back $LIVES and burns it. The dead ROM goes to the archive and a clean revision starts.

The formula

For every transaction that trades at least 0.02 SOL of $LIVES (the SOL of all its $LIVES trades together):

h       = sha256(the 64 bytes of the transaction signature)
address = (h[0] * 256 + h[1]) mod 4096
value   = h[2]
ROM[address] = value

Writes are applied in chain order: by slot, then by the transaction's index in its block. The ROM of a revision is its clean ROM plus every write of that revision, in that order. The keeper reads the transactions from the chain (the pump.fun curve before migration, the PumpSwap pool after), never from pump.fun's website.

The page gets the current ROM once, then only the writes after the last one it holds, and applies each one on the very next frame of the game.

The ROM map

The cartridge is 4,096 bytes of data, not code. The game reads every byte through a guard: indices wrap around, physics values are pulled into a safe range. A corrupted byte can make the game strange or impossible; it can never make the page crash.

OffsetBytesAreaWhat it holds

Tile attributes: the low half of a byte holds solid (1), spring (4) and ice (8); the high half holds the kind: 1 deadly, 2 one-way, 4 updraft. A door is exactly 0x90. So a random byte makes a wall or a hole half the time, a trap one time in sixteen and a door one time in 256.

Physics: 16 values, each the mean of 4 bytes, so one corrupted byte moves a value a quarter of the way at most. A gravity-direction value under 48 turns gravity upside down.

The crash

A revision crashes on the write that makes 1,639 bytes differ from its clean ROM: 1,639 / 4,096 = 40.0% (1,638 would be 39.99%). Writing a byte back to its clean value lowers the count. The recorded trades on this site crashed their first revision after 2,063 writes.

On the crash the game freezes, its dead memory scrolls up the screen, the ROM and the last frame are archived, and the next counted trade writes into a clean cartridge of the next revision. Nothing runs by the clock: a revision lives exactly as many trades as it takes.

How it plays as it rots, measured by a search player on the recorded trades: still beatable at 2%, 5%, 8% and 10%; at 15% the door can no longer be reached; later, stray door bytes sometimes open a short way out.

The pot and the burn

The $LIVES creator fees stay with the creator, who forwards them to the keeper wallet by hand. The keeper counts everything above its 0.05 SOL network-fee reserve as forwarded and splits it:

90%the pot: on every crash, ALL of it buys back $LIVES and burns it
10%work: RPC and hosting

The buyback goes through the pump.fun curve before migration and Jupiter after it. Everything bought is burned with the token program's burn instruction (never sent to a dead address), with this memo in the same transaction:

lives crash <revision> <trades> <SOL spent> <$LIVES burned>

A crash that finds the pot empty is still put on chain, by the memo alone with zeros. Holders take no part in the mechanic: there is no prize for reaching the door, and you can play without a wallet.

Keeper wallet: named here at launch.

Recount it

Download recount.mjs (Node 18 or newer, no packages) and run it. It takes the clean ROM and the list of writes from this site, recomputes every byte with the formula above and compares the result with the site's ROM. Add your own RPC to check every signature, slot and block index against the chain.

node recount.mjs
node recount.mjs --rev 3
node recount.mjs --rpc https://your-solana-rpc

Raw data: clean.rom (4,096 bytes), /api/writes?rev=N, every dead ROM on the Archive.

The game

Eight rooms of a small dungeon, one hero, a door at the end of room 8. Arrow keys or A and D to move, Space, W or Up to jump; on a phone, the three keys under the screen. Fall, touch a trap or an enemy and you start the room again: the lives never run out.

"Reached the door on this revision" counts every visitor who gets there. There is no money in it, so there is no anti-cheat.

Blow on the cartridge jolts the screen and reloads the ROM with the current data. That is all it does.