how it works

turfwar is one canvas shared by every coin launched through it. a buy of a coin paints pixels in that coin's colour. the coin that holds the most ground through the hour wins the round, and the trading fees of all coins buy the winner and burn it.

overview

buy

every 0.01 SOL you buy of a coin on the canvas is one pixel.

hold ground

a cell held for one second is one point for the coin. the round lasts 60 minutes.

burn

70% of every coin's creator fees buy the winner and burn it.

pixels

the site does not ask you to do anything here. you buy the coin wherever you trade. every 45 seconds the site reads the list of holders of each coin from the chain and compares it with the last look.

  • a bigger balance is a buy. the difference, valued at the coin's price at that look, becomes pixels: 0.01 SOL is one pixel. parts of a pixel add up.
  • a smaller balance is a sell. the wallet loses the same share of its cells, the newest first, and the same share of its waiting pixels.
  • pixels wait 120 seconds. in that time the wallet can place them by hand on the canvas (one free signature proves the wallet). after that they land on their own: on the empty cell nearest to the coin's starting point.
  • an empty cell costs one pixel. a cell of another coin costs 2. a cell of your own coin costs nothing and changes nothing.

the first time a coin is looked at, everybody who holds it counts as a buyer. that first look is capped at 2,000 pixels for the whole coin, shared by size, so an old coin cannot flood the canvas. every later look is capped at 8,000.

ground

the canvas is 256 by 256 cells. every coin gets one colour and one starting point, as far from the other starting points as the canvas allows. a cell belongs to the coin that painted it last and to the wallet that paid for it.

  • a cell lasts 6 rounds. when a round ends, every cell painted 6 or more rounds ago turns empty. ground has to be bought again to be kept.
  • selling gives ground back. the cells of the seller turn empty, not into another coin's ground.

a round

a round follows the clock: it starts and ends on the full hour, for every coin at once. every second, each coin gets one point per cell it holds. the coin with the most points when the round ends wins. more ground in the last minute does not win a round: an hour of ground does.

points start from zero in every round. the canvas itself stays.

the pot

the pot is the sum of every coin's own pot: the part of its creator fees that reached its vault and was not spent yet. when a round ends, every vault that holds at least 0.005 SOL buys the winning coin with its whole pot and burns what it bought, in one transaction. a smaller pot stays for the next round.

  • the buy and the burn are one transaction. nothing the vault buys can stay with it.
  • the winner is bought on pump.fun: on the bonding curve, or in its pool once it has graduated.
  • what a buy does not need (a few percent are kept as margin against price movement) goes back into that coin's pot.
  • a round nobody held ground in has no winner. the pots roll on.

fees and the vault

pump.fun pays every coin a creator fee on each trade. for a coin on the canvas that fee is split on chain, and the split is locked:

70%the coin's vault: the pot
10%the creator of the coin
20%turfwar

fees are claimed once at least 0.002 SOL are waiting. every coin has its own vault, a plain wallet whose address is on the coin's page. from each claim the vault keeps a small reserve for its own network fees.

launching

the launch page creates an ordinary pump.fun coin and sets its fee split in a second transaction. both are signed in your wallet. a coin launched somewhere else can be on the canvas too, if its creator distribution was set to the three addresses above and locked. the site finds such a coin on its own once it was registered.

an initial buy of up to 50 SOL can be part of the launch. it paints pixels like any other buy.

what it cannot do

  • it does not see every trade. it compares two looks at the holder list. a buy and a sell between two looks leave no trace and paint nothing.
  • it cannot tell a transfer from a trade. moving coins to another wallet reads as a sell in the first wallet and a buy in the second. the ground of the first is lost, the second gets pixels at the current price.
  • the price is the price at the look. not the price you paid. in a fast market the pixels of a buy can be more or fewer than the SOL you spent.
  • the pot comes only from fees. no trades, no pot. turfwar adds nothing to it.
  • one creator can run two coins. nothing stops that. it moves no money between them: each pot only ever buys the round's winner.
  • the vault keys are on the server. the buys and burns are made by software, not by a program on chain. every one of them is a public transaction, linked on the coin's page.
  • ground is not a claim on anything. it pays nothing by itself. it only decides which coin the pot buys.

api

read only, JSON, no key. responses are wrapped as { "data": … }.

GET/api/canvas the whole canvas: size, version, the cells as base64 (one byte per cell, the team's id; two bytes little endian when there are more than 255 teams), the teams, the round, the pot.

GET/api/canvas/delta?since=<version> what changed since a version: a flat list of cell index and team id. changes is null when the version is too old; load the canvas again.

GET/api/coins every coin, ?sort=ground|pot|burned|mcap|new.

GET/api/coins/<mint> one coin with its fee split and burns.

GET/api/wallet/<address> a wallet's cells and waiting pixels, per coin.

GET/api/rounds the settled rounds, newest first.

GET/api/feed rounds, burns and fee claims as they happen.

GET/api/stats, /api/config, /api/health