# Joinmarket support
JoinMarket is software to create a special kind of bitcoin transaction called a CoinJoin transaction. Its aim is to improve the confidentiality and privacy of bitcoin transactions.
You will be able to use your bitcoin to help other protect their privacy, while earning a yield for this service.
See the documentation of the joinmarket project (opens new window) for more details.
This is a very advanced functionality, and there is no easy way to recover if something goes wrong.
For hardcore bitcoiners only.
# How to use
BTCPAYGEN_ADDITIONAL_FRAGMENTS="$BTCPAYGEN_ADDITIONAL_FRAGMENTS;opt-add-joinmarket" . btcpay-setup.sh -i
Then you need to setup your default joinmarket wallet:
jm.sh wallet-tool-generate jm.sh set-wallet <wallet_file_name> <password>
Once done, you will need to send some money to the joinmarket wallet:
# How to change joinmarket configuration?
Connect to your container, and edit your configuration:
jm.sh bash vim $CONFIG
# Managing your wallet
jm.sh without parameter, you will get a bunch of command that you can run such as:
Usage: ------ Tooling to setup your joinmarket yield generator wallet-tool: Run wallet-tools.py on the wallet wallet-tool-generate: Generate a new wallet set-wallet: Set the wallet that the yield generator need to use bash: Open an interactive bash session in the joinmarket container receive-payjoin: Receive a payjoin payment sendpayment: Send a payjoin through coinjoin (password needed) Example: * jm.sh wallet-tool-generate * jm.sh set-wallet wallet.jmdat mypassword * jm.sh wallet-tool * jm.sh receive-payjoin <amount> * jm.sh sendpayment <amount> <address> * jm.sh wallet-tool history * jm.sh bash
jm.sh commands are wrapper around joinmarket scripts. Those are just convenience command, you can always directly connect to the container via
jm.sh bash and achieve the same result with the joinmarket python scripts.
# Getting command prompt into the container
You can connect to the container and have direct access to joinmarket scripts such as:
jm.sh bash sendpayment.py wallet.jmdat ...
# Managing the services such as yield generators
First connect to the container's bash
You can list available services to run:
Which might show you
root> supervisorctl status ob-watcher STOPPED Not started yg-privacyenhanced STOPPED Not started yield-generator-basic STOPPED Not started
You can start a yield generator with:
supervisorctl start yg-privacyenhanced
*** Note that services will NOT be restarted automatically if the container restart. ***
If you want to automatically restart the service when the container restart,
Then remove the comment
# in front of the service name you want to automatically restart.
ob-watcher service allows you to see an order book (opens new window).
You can activate it:
supervisorctl start ob-watcher
Then you can browse it by browsing
# Error: Failed to load wallet, you need to remove the lock file
You might sometimes get the following error when running a python script for joinmarket:
Failed to load wallet, error message: RetryableStorageError('File is currently in use (locked by pid 12822). If this is a leftover from a crashed instance you need to remove the lock file `/root/.joinmarket/wallets/.wallet.jmdat.lock` manually.')
This is because a service using the wallet is running, so you need to shut it down before running the command.
Check which service is running:
And stop it
supervisorctl stop yg-privacyenhanced
# Read the logs of services
You can use the
supervisorctl tail command:
supervisorctl tail yg-privacyenhanced
You can also check the logs in the