From 73d20c85358cf95d3f71b1ed7e54b9cebc463336 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 Aug 2020 15:20:23 +0200 Subject: [PATCH] cj_comparison: initial commit --- cj_comparison.md | 150 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 cj_comparison.md diff --git a/cj_comparison.md b/cj_comparison.md new file mode 100644 index 0000000..95662f4 --- /dev/null +++ b/cj_comparison.md @@ -0,0 +1,150 @@ +# CoinJoin comparison + +Implementations are discussed in a temporal order. +If you find a factual error please suggest to correct it. +Aiming to avoid including personal opinions, if so feel free to raise an issue. + +--- + +## JoinMarket +### Stack: +bitcoind RPC - JoinMarket CLI / JoinMarketQT GUI on desktop / JoininBox menu on server +### Code +Size : +Number of contributors: +Programming language: +Python3 + +### CJ implementation: +#### Pool size: +Variable depending on Offer Book (produced by the Makers - communicated via IRC bots) +#### Fees: +Coordinator Fees: +variable (according to Makers setting) +Miner fees: +depends on the number of inputs and outputs +variable (sat/byte randomised around the coordinator/taker setting) + +#### Remix: +Can be triggered on demand (Taker) or remixed for free (liquidity market - Maker) + +### Architecture (with default settings): +Coordination is decentralised P2P through encrypted IRC +own full node backend only +Tor is available (not enforced) +CJ participants are randomised 7-9 +Coordinator fees are variable and randomised around the Taker's setting +variable and randomised contribution to onchain fees by the makers +Wallets are separated to 5 accounts (mixdepths) +The UTXOS only progress between mixdepths as part of a CJ (the unmixed change is left behind in the same mixdepth) +Can only spend from one mixdepth at a time +#### Autolabeling to: +New address (deposit) , +change-out (unmixed i. last CJ), +non-CJ-out (change of a non-CJ txn), +reused (more than one UTXO/txn on the same address) +CJ-out + +### Postmix: +coin control with auto-labeling (freeze method) +Send with a CJ - can be an arbitrary amount +Payjoin - cross implementation with BTCPayServer and WasabiWallet +### Good practice: +occasional sweep txns +use the Tumbler script (first and last txns are sweeping - no unmixed change) +Alternate taker being a Taker (tumbler, sendpayment) and Maker (Yield Gen) +Break down large amounts between multiple wallets (watch the offerbook) + +--- + +## Wasabi Wallet +Stack: +Neutrino and/or bitcoind - Wasabi Wallet on desktop + +### Code: +Size: +Language: C# +Number of contributors: + +### CJ implementation: +#### Pool size: +fixed ~ 10M sats +#### Fees: +Miner fees: +variable sat/byte according to blockspace market - shared between participants +#### Remix: +Paid per round. Triggered by number of participants (100) or time (2h) + +### Architecture: +Tor only +Central coordinator +Backend is P2P client-side filtering (Neutrino) with option to connect own full node +blocks queried from random peers / own node +Coordinator fees are paid in the mix to a variable fee adress by all participants +Miner fees shared by all participants +High number of CJ partcipants +### Postmix: +Coin-control and labeling (auto and manual) +single account for Pre, postmix and unmixed change +HWW support for non-CJ wallets +Payjoin - able to send cross implementation to BTCPay and JM + +### Good practice: +make multiple rounds (at least two - can change green checkmark to 101) +do not consolidate unmixed change with CJ outputs +avoid consolidating high number of mixed UTXO-s + +--- + +## Samourai Wallet Whirlpool + +### Stack: +bitcoind RPC - Dojo (+indexer, Docker) + Whirlpool (SW/ WhirlpoolGUI (Desktop)/WhirpoolCLI) + SW (Android) +### Code: +Size: +Language: +NodeJS and Rust (for Indexer/ Electrs) + Docker +Number of contributors: +Number of external dependencies: + +### CJ implementation: +#### Pool size: +fixed 1M / 5M / 50M sats +#### Fees: +Coordinator Fees: +Preset per entry to pool (2.5% of pool size) +Miner fees: +Tx0 - variable sat/byte according to mempool +Whirpool entry - set for every UTXO according to mempool - can set priority +#### Remix: +Entry is paid, triggers if another new entrant is present +Remix is free and participation is randomised + +### Architecture: +Central coordinator +own backend not enforced - Dojo with Full bitcoin node is available +Tor only +5 participants (2 always new entries) +Coordinator fees are paid outside of mix on entry +Miner fees paid by new entrants +1495 possible interpretations per mix. Remix time is variable and cannot be controlled. +Premix, postmix and unmixed change is separated to different accounts + +### Post Mix: +Coin control +Pay with a simulated or real 2 partcipant CJ - Stonewall/Stonewall2 +P2EP between SW-s + +### Good practice suggestions: +Keep mixing +avoid consolidating large number of UTXOs +never consolidate between amounts (warnings are issued) + +--- + +## Resources +BitcoinQandA +Bitcoin-only CJ research +JM docs +Wasabi Docs +Samourai Docs \ No newline at end of file