{{ r.body }}
Distinction
What this protocol is, and what it is not.
The original mixed explainer made the motions visible, but it let protocol and implementation names bleed together. This fork gives each page its own object model, payment path, maintenance path, liquidity burden, and failure mode.
Flow
Five-person example flow.
Step through the timeline one slot at a time or jump directly to a highlighted event. Amounts, fees, and timings are illustrative examples, not protocol constants.
- {{ bi.text }}
-
{{ tr.root.kind }}{{ tr.root.pub }}{{ tr.root.id }}{{ tr.root.amt }}{{ tr.root.note }}{{ tr.root.script }}
-
{{ n1.kind }}{{ n1.pub }}{{ n1.id }}{{ n1.amt }}{{ n1.note }}{{ n1.script }}
-
{{ n2.kind }}{{ n2.pub }}{{ n2.id }}{{ n2.amt }}{{ n2.note }}{{ n2.script }}
-
{{ n3.kind }}{{ n3.pub }}{{ n3.id }}{{ n3.amt }}{{ n3.note }}{{ n3.script }}
-
{{ n4.kind }}{{ n4.pub }}{{ n4.id }}{{ n4.amt }}{{ n4.note }}{{ n4.script }}
-
-
-
-
Blueprint
The original sketch: four people, one coin, thirty days.
Every protocol on this page descends from one short drawing: Ruben Somsen's “Simplest Ark explanation”. His cases — holding, sending, the swap, the four outcomes, the shared tree, the lonely exit, the server's locked pile — are replayed here with four people, real amounts, and a calendar. Fees are ignored, “day 30” stands in for any timelock, and the scripts are Ruben's simplified pseudoscript, not literal Bitcoin script. On the other protocol tabs, this section becomes the delta: what each design keeps from this sketch, and what it throws away.
“Alice gives a coin to the Server, provided the Server gives a coin to Bob. There is no trust involved.”the whole protocol in one sentence · everything below is enforcement detail
One on-chain coin, four owners, a tree of escape hatches.
Alice, Bob, Carol, and Dave pool 1.00 BTC into a single on-chain output, UTXO_1. Bitcoin sees exactly one coin. Underneath it, everyone pre-signs a tree of transactions that nobody intends to publish: two branch outputs splitting the coin, four leaves — one per person — and, hanging off each leaf, that person's REDEEM_TX. The redeem is the escape hatch: publish your path through the tree, left to right, and it pays you out with nobody's permission. Every box in the diagram except UTXO_1 lives in wallets, not on the chain.
-
depth 0 · on-chainUTXO_11.00 BTCA+B+C+D+SorS after day 30
-
depth 1 · presignedBRANCH_AB0.65 BTCA+B+SorS after day 30
-
depth 2 · presignedLEAF_A0.40 BTCA+SorS after day 30
-
depth 3 · presignedREDEEM_A0.40 BTCA+SorA after a 30-day wait
-
-
depth 2 · presignedLEAF_B0.25 BTCB+SorS after day 30
-
depth 3 · presignedREDEEM_B0.25 BTCB+SorB after a 30-day wait
-
-
-
depth 1 · presignedBRANCH_CD0.35 BTCC+D+SorS after day 30
-
depth 2 · presignedLEAF_C0.20 BTCC+SorS after day 30
-
depth 3 · presignedREDEEM_C0.20 BTCC+SorC after a 30-day wait
-
-
depth 2 · presignedLEAF_D0.15 BTCD+SorS after day 30
-
depth 3 · presignedREDEEM_D0.15 BTCD+SorD after a 30-day wait
-
-
-
Two catches, both from the gist. Building this tree needs everyone — A+B+C+D+S — to pre-sign together, which is the interactivity a covenant opcode like OP_CTV would remove. But after day 0, nobody ever needs the other three again: to spend, you talk only to S. That single change is what separates Ark from the older payment-pool designs, where every spend meant herding the whole pool.
Two payments, nobody paid on-chain — and one brand-new coin.
Alice owes Dave 0.10; Bob owes Carol 0.05. Neither payment touches UTXO_1. Instead, S batches both into a new coin it funds from its own pocket: UTXO_2, 0.65 BTC, with fresh leaves for Alice's change (0.30), Bob's change (0.20), Carol (0.05), and Dave (0.10) — each with its own dashed REDEEM_TX, exactly like day 0. In exchange, Alice and Bob each sign a FORFEIT_TX: “S may take my old redeem output — but only in a world where UTXO_2 actually exists.” The moment UTXO_2 confirms, the swap is atomic: the old claims belong to S, the new claims to their owners. Until it confirms, nothing has moved — treat the payment as instant only if you trust S not to rework pending transactions.
-
depth 0 · on-chainUTXO_11.00 BTC
-
depth 1 · presignedBRANCH_AB0.65 BTC
-
depth 2 · presignedLEAF_A0.40 BTC
-
depth 3 · presignedREDEEM_A0.40 BTC
-
depth 4 · new on day 3FORFEIT_A0.40 BTCS — needs UTXO_2's anchor as a second inputorA after a 30-day wait
-
-
-
-
-
depth 0 · on-chainUTXO_20.65 BTCA+B+C+D+SorS after day 33
-
depth 1 · presignedBRANCH_AB′0.50 BTCA+B+SorS after day 33
-
depth 2 · changeLEAF_A′0.30 BTCA+SorS after day 33
-
depth 2 · changeLEAF_B′0.20 BTCB+SorS after day 33
-
-
depth 1 · presignedBRANCH_CD′0.15 BTCC+D+SorS after day 33
-
depth 2 · paidLEAF_C′0.05 BTCC+SorS after day 33
-
depth 2 · paidLEAF_D′0.10 BTCD+SorS after day 33
-
-
Carol and Dave now hold claims under two different roots at once — their untouched day-0 leaves in UTXO_1, plus their new leaves in UTXO_2, each root with its own clock. And note who had to be online: everyone with a leaf in UTXO_2 pre-signs its tree before it goes on-chain. That is the recipient interactivity the gist flags, and the thing later designs (and CTV) work to remove.
The same swap, four endings.
Everything above is machinery for exactly one guarantee: whatever anyone does after the swap is agreed, they cannot come out ahead by misbehaving. Run Alice-pays-Dave through all four worlds:
UTXO_2 confirms; Carol and Dave are paid. Every redeem transaction stays in its drawer. On day 30 the “S after day 30” clause matures and S sweeps UTXO_1 with one transaction. Total chain footprint: two coins, no matter how many payments rode inside.
After UTXO_2 confirms, she publishes REDEEM_A anyway. S answers with FORFEIT_A — valid precisely because UTXO_2 exists — and takes the 0.40 long before Alice's 30-day wait matures. She bought fee bills and nothing else.
UTXO_2 never appears, so FORFEIT_A can never be valid — its anchor input doesn't exist. Alice publishes REDEEM_A, waits out her 30 days, and takes her 0.40 back. Dave wasn't paid, but nobody was robbed. That is what “atomic” buys.
She neither swaps nor publishes her redeem before UTXO_1's clock runs out. The “S after day 30” clause matures and S can claim her arm. The one non-negotiable obligation in this design: come back online before expiry.
Carol walks out alone — and the tree unfolds behind her.
Carol never spent her day-0 leaf, and she has decided not to ask S for anything. So she publishes her path down the tree, transaction by transaction, paying a fee for each hop:
The server's books: front now, sweep later.
S never held anyone's money — every user could always exit unilaterally. What S did do is front fresh coins and wait for timelocks to pay it back. The whole month, from S's side of the desk:
Every payment makes S front money that only comes back after the timelock. Ruben's back-of-envelope for a busy Ark:
30-day timelock × 1 BTC moving every 10 min = 6 × 24 × 30 ≈ 4,320 BTC locked at all timesThe faster money moves, the more of S's capital sits frozen. That lockup — not custody risk — is the price of everyone else's cheap instant payments, and it is the tradeoff every protocol on this page is negotiating.
Bitcoin script cannot say “spendable only if some other UTXO exists.” So the transaction that creates UTXO_2 also carries a tiny ANCHOR output only S can spend, and Alice's FORFEIT_TX takes that anchor as a second input.
FORFEIT_A inputs: [ REDEEM_A output ] + [ UTXO_2's anchor ]Now the forfeit literally cannot confirm unless UTXO_2 confirmed first. An impossible script condition becomes an ordinary transaction dependency.
Vs original Ark
{{ vsArkTitle }}
{{ vsArkLead }}
{{ vsArkLiq }}
{{ vsArkTp }}
left: Ruben's sketch (the Original Ark tab) · right: this protocol
Sources