CoinJoin
Also called: coin join, CoinJoin transaction, coin mixing, collaborative transaction, joint transaction.
A CoinJoin is one transaction that combines inputs from several people, usually with equal-value outputs, so observers can't tell who paid whom.
A CoinJoin is a Bitcoin transaction built jointly by several people. Each participant adds their own inputs and receives outputs, often of identical amounts, and everyone signs only their own part. Anyone can see the transaction, but it is hard to tell which output belongs to which input.
How it works
Gregory Maxwell described the idea in 2013. It relies on a basic property of Bitcoin: each input carries its own signature, so a transaction is valid even when its inputs belong to different people. A typical round:
- A coordinator, or the participants themselves, collect everyone's inputs and the outputs they want.
- The unsigned transaction is shared with all participants.
- Each participant checks that their outputs are present and signs their own inputs, committing to the whole transaction.
- Once every signature is in, the transaction is broadcast.
No one can take another participant's coins, because each signature covers only the exact transaction that was agreed.
BIPs that touch CoinJoin
There is no BIP for CoinJoin itself, but several make it easier. PSBTs carry the transaction between participants: BIP 174 includes a manual CoinJoin workflow example, and BIP 370 lets inputs and outputs be added after creation. BIP 69 notes that its deterministic ordering of inputs and outputs also works for multi-party transactions such as CoinJoins. Payjoin (BIP 78) is a two-party CoinJoin disguised as an ordinary payment.
Why it matters
CoinJoin targets the common-input-ownership heuristic: the assumption that all inputs of a transaction share an owner. Equal-value outputs give each participant a set of coins that can't be told apart. Spending those outputs together later, or merging them with other coins, can undo much of the benefit, so careful UTXO management matters as much as the join itself.