The three popular coinjoin approaches explained:

## Joinmarket

### joinmarket cli/qt, join in box, jam

Any user can become a taker, the coordinator of a coinjoin transaction, who dictates the equal output amount of this round. The taker can choose how many and which makers to invite to add inputs and outputs to the transaction. The taker pays for the entire blockspace cost as well as a liquidity fee to the makers. There is no coordinator blinding, so the taker learns which inputs and outputs belong to which maker.

Payments inside the coinjoin are only possible for the taker, because only he can choose an output amount in the transaction.

A liquid maker market enables coinjoins of high and arbitrary values. Censorship is circumvented by the taker bribing the makers with a fee.

Takers must proof ownership of an onchain utxo (poodle), and makers must time lock bitcoin (fidelity bonds), in order to prevent different de-anonymizing attack vectors.

A transaction can have a wide range of number of inputs, for example 5-50, depending on how many makers are invited.

## Whirlpool

### samourai, sparrow

A single server runs the coordinator who does not add inputs to the coinjoin. Chaumian blind signatures with fixed amounts are used to prevent the coordinator from learning input to output linkage. The coordinator dictates the value and number of the inputs and the outputs of the transaction.

Therefor users must do a single-user preparation transaction tx0 which reveals common input and output ownership and leaves a toxic change that's impossible to register in a coinjoin.

Payments in the coinjoin is not possible for any user, thus fallback to single user payment transactions or two party coinjoin payments.

Because of the need of a separate tx0 and post mix transaction, this is very expensive in terms of block space and mining fee.

The first round users pay for the blockspace of the recurring users, thus when there are no new users, old users cannot coinjoin anymore.

The coordinator charges a fixed fee in tx0, which incentivizes that a large number of inputs is consolidated in tx0, which reveals common ownership.

The coordinator limits the number of inputs and outputs to 5 each.

## WabiSabi

### Wasabi, Btcpayserver, Trezor Suite

A single server runs the coordinator who does not add inputs to the coinjoin. Keyed verified anonymous credentials are used to prevent the coordinator from learning input to output linkage, the value of the credential is also blinded, this enables arbitrary amount input and output registration. The coordinator does not dictate the value of the inputs or outputs, it is entirely up to the users.

This means that users can anonymously consolidate multiple inputs of arbitrary value without the coordinator or an outside observerer learning common ownership. There is no single user preparation transaction.

This also enables anonymous payments inside the coinjoin, where the arbitrary amount of payment can be registered directly in a coinjoin. Multiple payment outputs can be batched anonymously without revealing the common spender.

Furthermore, the sender can pass on the arbitrary amount wabisabi credential to the receiver, who then registers his output directly with the coordinator. This is an anonymous payment where the sender does not learn about the address of the receiver.

Because everything can be done in a coinjoin, this is extremely blockspace efficient and thus cheap in mining fees.

Wabisabi is the only protocol that creates transactions that can be signed on a hardware wallet, which is an obvious improvement in security.

Every user pays for the exact amount of blockspace that he uses, thus incentivizing efficient allocation of a scarce resource.

The coordinator sets a range of minimum and maximum number of inputs to the transaction, currently between 150-400 inputs.

Wabisabi enables large coinjoins with many hundreds of inputs and outputs of arbitrary amount where every user can do anonymous input consolidation and output payment batching.

Reply to this note

Please Login to reply.

Discussion

Fidelity bonds are not a strict requirement for makers in JoinMarket, they just increase chance of participating in coinjoins. Bondless makers still have some probability.

Also, hardware wallet signing could be possible with JoinMarket too, it’s just not so simple and nobody has yet implemented that. https://github.com/JoinMarket-Org/joinmarket-clientserver/issues/663

#[1]