Skip to content

The Protocol on a T-Shirt

Everything the pool coin checks, in as few lines as will carry it. Each line is something the code does today and Bitcoin enforces. The rest of these docs is commentary.

C H E S H I R E
private Bitcoin, enforced by Bitcoin
STATE one coin, the pool, worth V sat, whose script commits to
roots = H(notes_root, nullifier_root, next_note, next_nullifier)
NOTE C = H(amount, K), K = H(pk, rho, r), pk = H(sk)
a leaf of the notes tree; whoever knows sk and (amount, rho, r) owns it
NULLIFIER nf = H(sk, rho, position)
published once, when the note is spent; the nullifier tree keeps
them sorted, so a second spend of the same note is refused
RECORD 92 bytes per contribution: 2 commitments, 2 nullifier keys, 1 word
(a deposit amount, or an encrypted memo), published in the settlement;
from the records anyone rebuilds both trees, and from the records
plus a seed the owner rebuilds a wallet
SETTLEMENT one transaction: pool in, pool out. The pool's script checks
1. a STARK proof that applying the records, in order, to roots gives
roots', with every spent note in the tree under a recent root,
every nullifier new, every contribution's value conserved and
in range, and totals deposits, payouts, fees
2. the records it publishes are the proof's (fingerprint r, v)
3. V' = V + deposits − payouts − fees; payouts leave as one output
4. the new coin carries roots', epoch + 1, and the same script
BITCOIN no coin pays out more than it holds; the pool coin can only be
ENFORCES spent by a settlement that passes 1–4; one chain of pool coins
from genesis. Who proves, who batches and when is not consensus:
anyone may settle, and a settlement no one makes hurts no one.
needs GSR (BIP-440 + BIP-441), tapleaf 0xc2

Your coins are notes: secret IOUs whose hashes sit in a tree inside one Bitcoin coin. To pay, you prove, without showing which note, that a note in the tree is yours, that you have not spent it before, and that the new notes you create add up to it. Your proof and the hashes it adds to the tree are published in a Bitcoin transaction that spends the pool coin, and the pool coin’s own script re-checks the proof. Bitcoin’s miners run that script, so a settlement that cheats does not confirm. Anyone can gather proofs into a settlement. Nobody has to be trusted to.

No settler, no sequencer, no federation, no token, no challenge period, no bridge, and no second chain that holds value.

Some things are not on the shirt because they are layers. A layer changes who does the work, or how money gets in and out. If it were removed, a valid settlement would still be valid.

layer what it adds page
deposit inbox deposits with no custodian on the way in deposits
vault fan-out many withdrawals paid from one output withdrawals
exit inbox a withdrawal no one can censor exits
solo exit leaving with one note and no one else exits
share chain who proves what, and when, with no settler share chain
payroll provers paid in notes by the proof paying the provers
payment codes received notes recoverable from the seed payment codes
migrations an opt-in move to a successor pool upgrades

The shirt describes what the pool checks. The code carries a little more than the shirt needs, because layers grew into it:

  • the proof’s public statement has fields for payroll, migrations and the exit inbox (156 values where the shirt needs about 90);
  • the state hash folds in the anchor window and the payroll queue, three hashes deep;
  • one record word has six meanings, told apart by bit patterns;
  • the pool has one script leaf per transaction shape and record count, about 21,000 of them at the default bound of 1,750 records.

None of this changes what is checked. A cleaner “core v2” is sketched in the repository’s docs/tshirt.md. It would be a new pool with a new address, so it waits for a re-pin that is due anyway.