Documentation

The SWIRL mixing protocol, end to end: silent receiving, a continuously deepening anonymity pool, sterile settlement.

Protocol Overview
What is SWIRL?

SWIRL is a mixing layer for Lightning payments. It sits between a payer and your node, and its job is narrow: make the settlement that arrives at your wallet unlinkable to the payment that entered the pool. Not obfuscated, not harder to trace — unlinkable, up to the depth of the pool at the moment you exit.

The system is built from three independent layers, each closing a different class of observer. Identity is handled at receive time by BOLT12 offers with blinded paths; flow is dissolved inside a continuously deepening anonymity pool with uniform denominations and randomized release schedules; and settlement crosses to layer 1 through a hashlock-atomic submarine swap that lands on a UTXO with no shared history.

The shape of a payment
1
Offer
A static code that never names your node
2
Deposit
Payer settles a one-time blinded invoice
3
Pool
Funds merge and rest while depth grows
4
Exit
Uniform chunks leave on jittered schedules

1 — Offer. You publish a single static BOLT12 offer (lno1…). It contains no node ID and no channel information; it is safe to post publicly, forever.

2 — Deposit. A payer resolves the offer over onion-routed messages and receives a one-time invoice whose route terminates in a blinded path. They pay it like any Lightning invoice; they learn nothing about where it actually landed.

3 — Pool. Your deposit does not settle to you directly. It enters a pool alongside other participants' deposits and rests there — a minimum hold first, then a randomized exit queue. Every payout is cut from the same denomination lattice, and release order is a uniform permutation with no relation to arrival.

4 — Exit. Each chunk leaves on its own randomized delay, optionally hopping additional relays, optionally crossing to layer 1 through a submarine swap. Amount, order, and timing each carry zero bits of identifying information.

Read the protocol
SECTIONWHAT IT COVERS
Threat ModelWho is watching, what they see, what they stop seeing
Silent ReceivingStatic BOLT12 offers, onion messages, blinded paths
Pool DepthHow deposits deepen one continuously open anonymity pool
DenominationsWhy every exit is cut from the same quantum lattice
TimingRelease jitter and order permutation as privacy primitives
Loop-OutHashlock-atomic submarine swaps onto sterile UTXOs
ChannelsUnannounced channels, ingress/egress rotation, liquidity
CLI ReferenceEvery swirl command and option, with defaults
Testing & AuditReproduce the regtest evidence yourself
NOTE
SWIRL is in active development and currently runs against regtest and testnet infrastructure. The mixing engine, pool coordinator, and CLI are functional and covered by an end-to-end regtest suite; the submarine loop-out module is present behind a flag and is being hardened. Mainnet parameters ship when the audit surface is complete — see Testing & Audit.
SWIRL — Non-custodial anonymous transactions on Lightning