life.so
life.so in one minute

A launchpad where every coin is a little living world.

No need to know any math or game rules. Here is the whole idea in six steps.

  1. You launch a coin

    Name, ticker, image, one click with your wallet. It's a normal pump.fun coin: people buy and sell it the usual way.

  2. It gets its own grid

    A board of 4 096 squares, empty at the start. Think of it as your coin's petri dish.

  3. Buys light squares, sells switch them off

    Each buy lights up a few squares (one per 0.1 SOL, up to 9). Each sell switches some off. Where they land is random: nobody can choose, not even the creator.

  4. The grid lives on its own

    Every 4 seconds, lit squares are born, survive or die depending on their neighbours. That's Conway's Game of Life, a famous rule from 1970. Shapes appear and move by themselves, like this glider.

  5. The grid decides when the coin gets bought back and burned

    Every trade pays creator fees. 70 % of them wait in a buyback wallet. When the grid breaks its population record, part of it buys the coin back and burns those tokens forever. If the grid dies out completely, everything waiting is bought back and burned.

  6. Everyone gets their share, locked at launch

    70 % buy back and burn your coin · 20 % go to you, the creator · 10 % buy back and burn $LIFE, the pad's coin. This split is written on pump.fun at launch and locked: neither you nor life.so can change it.

In short: trading your coin feeds a living grid, and the grid decides when the trading fees are spent on buying back and burning your coin.

Questions

What people usually ask

Do I need to understand the Game of Life?
No. It runs by itself. You only need to know: buys add squares, the board lives, records burn the coin.
What do I earn if I launch a coin?
20 % of your coin's creator fees, paid to your wallet each time fees are distributed. You can also buy first (the optional "dev buy") in the same transaction as the launch.
What does "buy back and burn" mean?
The fees are used to buy your coin on the market, then those tokens are destroyed, so fewer tokens exist. It says nothing about the coin's price, which can still go to zero.
Who controls the fees? Can life.so take them?
The split is fixed on pump.fun at launch and locked: neither you nor life.so can change it. The 70 % and the 10 % go to two buyback wallets run by life.so, whose service buys back and burns from them; every buyback and burn is public on Solana and listed on the coin's page. If the service stops, the fees wait in those wallets. One exception belongs to pump.fun: its "community takeover" can rewrite the split of any coin. life.so re-reads every split on each run and stops listing, distributing and buying back a coin whose split changed.
Can someone place squares where they want?
Not easily. Where a trade lands comes from its transaction signature; aiming it means trying many signatures before sending. The rules of the grid never change.
Why does my grid look empty?
A square costs 0.1 SOL of trading. Smaller trades are real trades but light nothing. A grid fills up as bigger buys come in.
What does a launch cost?
About 0.02 SOL of network fees, paid from your wallet, plus your dev buy if you choose one. life.so never holds your keys.
What is $LIFE?
The pad's own coin, not launched yet. 10 % of every coin's fees are set aside to buy it back and burn it once it exists. That is not a promise about its price.
The full rules

For the curious: every detail, exactly as the site and the service apply them.

1 · Launch

A pump.fun coin with a locked fee split

Launching creates a standard pump.fun coin from your wallet. In the same step, its creator fees are split and the split is locked (pump.fun allows its creator one update of a split, then never again; pump.fun itself keeps a "community takeover" that can rewrite it):

70 % buyback wallet of this coin buys it back and burns it, paced by the grid (5) 20 % the creator's wallet 10 % buyback wallet of $LIFE buys $LIFE back and burns it

The site checks on-chain that the split exists, is locked, and gives exactly these shares before listing a coin, and checks it again on every run. That is all it checks: life.so does not vet coins or the people who launch them. An optional dev buy lets the creator buy first, inside the launch transaction.

2 · The grid

64 × 64, on a torus

Each coin has one grid of 4 096 cells. It is closed on itself: what leaves on the right comes back on the left, what leaves at the bottom comes back at the top. Every grid starts empty at the coin's launch slot.

Cells follow Conway's rules, unchanged forever: a dead cell with exactly 3 living neighbours is born, a living cell with 2 or 3 living neighbours survives, every other cell is dead at the next generation.

3 · Trades

Where and how many

The transaction signature (64 bytes) is read as one big number. Its value modulo 4 096 gives the cell.

p = signature mod 4096 = ((byte[62] & 15) × 256) + byte[63] x = p mod 64 y = ⌊p / 64⌋ n = min(9, ⌊amount / 0.1 SOL⌋) below 0.1 SOL a trade touches nothing

The amount is the SOL that entered or left the coin's bonding curve. The trade acts on the 3 × 3 box centred on (x, y), wrapping across the edges. The nine positions are put in an order by a Fisher–Yates shuffle driven by bytes 0 to 7 of the signature, and the first n are used. A buy switches them on, a sell switches them off.

Nobody chooses a signature, so nobody chooses a cell.

4 · Time

One generation every 10 slots

generation g covers slots [launch + 10(g − 1), launch + 10g) 1. apply its trades in chain order (slot, then position in the block) 2. one Conway step on the whole grid

A slot lasts about 0.4 s, so the grid advances about every 4 seconds, whether anyone trades or not. Generation 0 is the empty grid. The state at any generation depends only on the list of trades before it: anyone can rebuild the whole life of a coin from the chain.

5 · Events and fees

When the 70 % are spent

Fees are distributed from the coin's vault to its three shareholders. The 70 % then wait in the coin's buyback wallet, and only three events of the grid spend them:

EventConditionFees
RecordPopulation after the step is above every previous generation. Buyback and burn of a share of what is waiting, equal to the growth: (new − old) / new.
ExtinctionPopulation drops to 0. Everything waiting is bought back and burned. The grid restarts with the next buy.
FossilThe grid is identical for 300 generations in a row, with living cells. Nothing. Shown as fossilised until a trade changes the grid.
burn share = (Pnew − Precord) / Pnew first record: record 0, everything accumulated since launch is burned in full

An oscillator (a blinker, for instance) changes at every generation, so a grid that still holds one never fossilises. Amounts below 0.001 SOL are carried over to the next buyback.

There is no dedicated Solana program. A public service replays every grid, detects the events with the rules on this page, and executes the buybacks and burns from the buyback wallets. Each one is listed on the coin's page with its transactions.

6 · Museum

Patterns that appear on their own

At every generation, living cells closer than three cells to each other are grouped. A group is compared, under every rotation and reflection and in every phase, with a library of known patterns: block, beehive, blinker, toad, beacon, glider, lightweight spaceship, pulsar, pentadecathlon. It counts when it is seen two generations in a row with nothing else living within two cells.

The first appearance of each pattern on a coin enters the museum. The badge goes to the most recent buy whose cells fell within two cells of the pattern. Badges carry no fees.

7 · Fixed

What nobody can do

  • choose where a cell lands
  • pause the grid, reset it, or draw on it
  • change the rules: birth on 3, survival on 2 or 3, 64 × 64, 10 slots, 300 generations
  • change the 70 / 20 / 10 split once it is locked (only pump.fun's takeover can)
  • for life.so: spend the 70 % outside the three events
8 · Replay it yourself

The whole simulation is one file

life.js runs in this page and in node. The two functions that matter:

function footprint(trade) {
  const b = decode58(trade.sig, 64);
  const p = ((b[62] & 15) << 8) | b[63];
  const x = p % 64, y = (p / 64) | 0;
  const order = [0, 1, 2, 3, 4, 5, 6, 7, 8];
  for (let i = 8; i > 0; i--) {
    const j = b[8 - i] % (i + 1);
    [order[i], order[j]] = [order[j], order[i]];
  }
  const n = Math.min(9, Math.floor(trade.lamports / 1e8));
  return order.slice(0, n).map(o =>
    ((y + ((o / 3) | 0) - 1 + 64) % 64) * 64 + (x + (o % 3) - 1 + 64) % 64);
}

function step(src, dst) {           // B3/S23 on the torus
  for (let i = 0; i < 4096; i++) {
    const c = neighbours(i).reduce((s, j) => s + src[j], 0);
    dst[i] = (c === 3 || (c === 2 && src[i])) ? 1 : 0;
  }
}
9 · Witness

The page and the service must see the same grid

The page replays in JavaScript, the service in Python. An off-by-one in the clock would give two different grids and fees moving on events nobody can see. So both replay the same coins and compare a hash of the grid at every generation, the population, and every event. The witness also runs once with the service shifted by one slot, to check that it does catch a difference.

Identical · 6 coins · 13 576 generations compared
EDEN2601 gen729 trades55 events identical
SOUP1951 gen550 trades47 events identical
METH2221 gen51 trades57 events identical
PETRI2401 gen963 trades60 events identical
AMBER1801 gen23 trades39 events identical
DRIFT2601 gen458 trades65 events identical
Control run, service shifted by one slot: difference caught