Skip to content

Comparison

joinstr is one of several coinjoin designs. The table compares it with the best known alternatives.

joinstr JoinMarket Whirlpool WabiSabi
Coordinator None, pools run over nostr relays None, takers coordinate makers over IRC and onion message channels Central Central
Who sets a round Any user creates a pool The taker The coordinator The coordinator
Fees Mining fee only, optional relay fee Mining fee plus maker fees paid by the taker Mining fee plus a pool entry fee Mining fee plus any coordinator fee
Fidelity bonds Not used Used by makers Not used Not used
Outputs One denomination per pool, no change Equal coinjoin outputs plus change Fixed pool denominations, no change in mixes Many standard denominations, change possible
Signature hash ALL\|ANYONECANPAY ALL ALL ALL
Network privacy Tor by default, optional VPN Tor Tor Tor
Languages Python, Kotlin, Java, Rust, Dart Python Java C#
Coordinators today None needed None needed Ashigaru runs one Independent coordinators such as kruw

What sets joinstr apart

  • No server to run or trust. Anyone can start a pool on any relay. If a relay goes away, new pools simply use another one.
  • Fewer steps. Registering outputs first and signing with SIGHASH_ALL|ANYONECANPAY removes the need for a coordinator to collect inputs before anyone signs.
  • No fees beyond mining. There is no maker or coordinator to pay.

Tradeoffs

  • Pools need enough peers at the same time. A coordinator or a market of makers can fill rounds faster.
  • Peers see every input and output of their round. Only the link between them stays hidden.
  • Peers who join and never sign can stall a round. Ring signature recovery and aut-ct reduce the damage but do not remove it.