Skip to content

Latest commit

 

History

History
129 lines (107 loc) · 6.89 KB

joinmarket_private_flow.md

File metadata and controls

129 lines (107 loc) · 6.89 KB

A private flow through JoinMarket

Bitcoin privacy starts on the base layer where cooperative transactions with equal amount outputs - known as coinjoins - are used. This document aims to provide an introduction to using JoinMarket, a decentralized, liquidity market based coinjoin implementation following basic good practices.

Common definitions

Mixdepth

  • One of the accounts in the JoinMarket wallet.
  • Abbreviated to m0 / m1 / m2 / m3 / m4
  • All are derived from the same BIP32 and BIP39 compatible HD seed.

Sweep

  • It means sending one or multiple utxos without creating change.
  • It is achieved by sending all utxos (except the ones frozen) from an account.
  • The amount is not fixed and fees come off the sum of the inputs.

Status labels

  • applied automatically by JoinMarket via a simple transaction analyses

    deposit: output of a simple transaction to new address

    cj-out: one of the equal amount outputs

    change-out: one of the unique amount outputs from a cj

    non-cj-change: output of a transaction without equal amounts

    reused: a utxo on an address which has been used previously

Orderbook

Minimum size to coinjoin

  • The default is 100k sats (+/-10%) so that is a safe choice.
  • On the example below offers start at 6 peers offering min 27300 sats.
  • Running the Tumbler would require to start with a higher amount as the fees can take up a significant portion.

Maximum size to coinjoin

  • The max amount offered is limited by the wallet of each Maker.
  • It is the highest amount in one single mixdepth (-0-10%).
  • Multiple bitcoin amounts are offered by several (10+) peers.
  • On the example below 21 peers offer 19+ BTC

Screenshots taken from https://nixbitcoin.org/orderbook in March 2022.

  • Click the top of the line to order by it's attribute

The flow of funds

Running the Tumbler

Sending transactions manually and running the Yield Generator

Deposit

  • Send to a new address in m0 - could be any of the accounts, but suggesting using the first one for simplicity.
  • Deposit a single or multiple coins from a single funding source at a time.
  • Select the newly deposited coin(s) with freeze/unfreeze if there are others in the account.

Sweep

Send or participate in multiple coinjoins

  • Stretch out in time to avoid timing analyses.

  • The Taker acts as the coinjoin coordinator

    • has the most privacy benefits
    • pays the fees (miner and coinjoin fees)

The Taker role

  • the Taker is the initiator and coordinator of the coinjoin - takes the liquidity on offer.
  • Send coinjoins to a new address in the next mixdepth.
  • In a coinjoin multiple coins can be merged by sending custom amounts or sweeping.

The Maker role

Leaving the JoinMarket wallet

When

  • The more coinjoins the funds were through the better.
  • Consider that the privacy benefit from coinjoins is breaking down with time as the peers are gradually exposed or clustered.
  • If deposited only to m0 and followed the steps above all coins in m4 must have been through at least 5 coinjoins.
  • In a long running, active Maker wallet some funds could have made multiple circles - there is no indication of this by default

How

Do
  • Can only send (merge coins) from one account at a time.
  • Send to multiple separate destinations (separate wallets with different purposes - not to be merged later).
  • Sweep whole accounts or coins and don't leave change behind.
  • Fund lightning nodes or send to cold storage via coinjoin(s).
  • Pay with Payjoin to BIP78 compatible wallets to obfuscate the amount sent.
Don't
  • Avoid sending out the whole amount which entered the wallet a few transactions ago all at once.
  • Don't merge a change from a previous transaction when sending to a new destination.

More Reading

Questions and discussions: