Learn how to use joinmarket for significant privacy benefits on the Bitcoin network.
joinmarket is a CoinJoin implementation aimed at improving the privacy and fungibility of bitcoin transactions.
CoinJoin is a privacy technique where two or more users pool their Bitcoins together into a collaborative transaction.
joinmarket works by creating a marketplace for CoinJoins, allowing them to be paid for.
On one side are Takers, who pay for CoinJoins because they require them on demand and On the other side of the market are Makers, who provide the CoinJoin liquidity and are compensated a fee for CoinJoins.
- joinmarket requires a connection to an instance of Bitcoin Core.
- On Mac OS , you need Homebrew.
- joinmarket is a python application, which requires an up to date version of python to run.
- This guide was created for Mac and Linux users, for windows guides refer to joinmarket documentation.
We will use git to download joinmarket. You can also manually download the latest release from joinmarket’s github repository.
git clone https://github.com/JoinMarket-Org/joinmarket-clientserver
Make sure joinmarket is reset to most recent stable release.
git reset --hard SOFTWARE VERSION
Verify the GPG signature of the folder we downloaded.
We will check the signature and compare it against the developer’s public key, as he showed it on a live demonstration of joinmarket.
git tag -v SOFTWARE VERSION
Install joinmarket from the scripts folder.
The virtual ENV provides an isolated environment for joinmarket to run in. Every time you want to use joinmarket, you must activate the virtual environment first.
Before we can use joinmarket we have to configure it. The joinmarket.cfg location will be shown to you in the terminal when you created it.
Lines starting with “#” are comments, they are descriptive and are ignored by joinmarket.
Lines with “=” are parameters. They are modifiable and affect how joinmarket runs.
Anything can be turned off by adding a “#” at beginning of a line.
Detailed documentation on the config file.
Blockchain settings will configure your connection to Bitcoin Core.
You can connect to Bitcoin Core running on –
- The same computer (local)
- On the same local area network ie.. another computer in your home network.
- Over Tor. Connecting over Tor does not work natively and requires a few more steps, see Opennoms guide on how to Torify joinmarkets connection to Bitcoin Core.
rpc_wallet_file option will isolate the watch only addresses.
Messaging settings dictate how joinmarket connects with other users.
You can leave these default settings, but for improved privacy Tor is recommended.
Fee settings refer to Bitcoin network transaction fees. These can be modified at anytime.
joinmarket documentation on fees.
Taken directly from the Bitcoin Wiki
To avoid a later transaction recombining a change output with a CoinJoin output, JoinMarket’s wallets have the concept of a mixdepth.
UTXOs from one mixdepth are never used as inputs along with coins from others, so mixdepths are like seperate identities which users can use to stop coins from different sources being mixed.
Coins only move between them via CoinJoins. The Deterministic wallet discourages users from doing address reuse. The wallet allows individual private keys and UTXOs to be imported, which can be used with reused addresses to have CoinJoins created from them which would confuse any analysis based on the common-input-ownership heuristic.
Sendpayment.py offers a very flexible single CoinJoin implementation.
You can send Bitcoin to another address right away and get the privacy benefits of a CoinJoin. The privacy benefits are less than using the tumble.py script, or being a Maker and running the Yield Generator scripts – but is still a valuable option.
Learn more at joinmarket’s documentation on single CoinJoins.
Fee limits apply to what you, as a Taker, pay for the service of CoinJoin.
This can be set in your joinmarket.cfg file or you can manually set it every time you do a CoinJoin.
After getting the hang of joinmarket, you will get a better idea of what is appropriate to pay based on your use case.
joinmarket documentation on fees.
The participant information is presented to the taker, so the taker can confirm they want to go through with the CoinJoin.
For a detailed explanation on Tumble.schedule, you can open the “sample schedule for testnet” file locally or go to joinmarket’s github repository to view it.
You can manually pass parameters for the yield generator, when you type it into the command line.
Learn more about the Yield Generator in the joinmarket documentation.
Installing Tmux or GNU screen guide will allow you to run joinmarket in the background.
This can be useful for running the yield generator indefinitely.
Opennoms Guide to running joinmarket with Tmux
Ministry of Nodes joinmarket guide – tmux install starts at 21:35.