Skip to content

Run A CoinJoin

A taker selects makers, coordinates one CoinJoin, and pays their fees plus the Bitcoin mining fee. A successful transaction does not guarantee anonymity.

Before You Start

Complete wallet setup, wait for eligible confirmed funds, and keep your Bitcoin backend and Tor running. Stop other processes spending from this wallet. Check jm-wallet info before choosing an amount.

The amount is in satoshis, not BTC. Leave room for fees. The default authentication proof needs an eligible UTXO with at least five confirmations and a value of at least 20% of the CoinJoin amount.

Quick Start

Replace AMOUNT_SATS with the amount you intend to CoinJoin:

jm-taker coinjoin --amount AMOUNT_SATS --destination INTERNAL

Review the maker and fee preview, then the final transaction fee confirmation. Do not use --yes for your first run. If the preview expires, start again to obtain current offers.

INTERNAL sends the equal output to the next mixdepth in your wallet. Change stays in the source mixdepth. After broadcast, wait for confirmation and check jm-wallet info and jm-wallet history. If the process stops unexpectedly, check for a broadcast transaction before retrying.

Common Use Cases

To choose the source compartment, add --mixdepth N. To pay another wallet, replace INTERNAL with a fresh destination address that you have checked on the correct network. External payments reveal information to the recipient.

A sweep CoinJoins the selected mixdepth's eligible funds, less fees, without creating taker change:

jm-taker coinjoin --amount 0 --mixdepth 2 --destination INTERNAL

A sweep links the inputs it spends. It is not automatically the best privacy choice. For manual input selection, use --select-utxos with an explicit --amount; omitting the amount sweeps the selection. Selection is limited to one mixdepth. --input-utxo TXID:VOUT selects exact inputs without an interactive menu; repeat it for each input and specify the source mixdepth. Fidelity bonds are shown but never selectable as CoinJoin inputs, even after expiry; redeem them with jm-wallet send --select-utxos instead.

Configuration Notes

Set fee limits in [taker] in your configuration. Consult the installed config.toml.template for exact settings and defaults, and jm-taker coinjoin --help for per-run overrides. The configuration reference explains precedence.

Maker fees and mining fees are separate costs. More participants and inputs usually make a larger transaction. Additional equal outputs do not represent a guaranteed anonymity set. If there are too few suitable offers, wait or review your amount and budget rather than immediately weakening limits.

The default offer filter selects fees on a shared public grid. See the fee quantization discussion and paper for background; the installed settings reference describes current behavior. Fee rounding and equalization are optional policies that may be incompatible with older makers. Keep the defaults unless you understand the compatibility and cost implications. tx_fee_factor adds fee-rate randomization: 0.2 allows a rate between the base rate and 1.2 times that rate, not 0.2 times it.

Ignored Makers

Previously problematic makers are avoided when enough alternatives exist, but the persisted ignored list is a preference, not a permanent ban. Inspect the reported failure before using jm-taker clear-ignored-makers to reset it.

Tumbler

For a sequence of CoinJoins with several destinations, use the tumbler guide. Repeating one command is not a substitute for considering the entire spending path.

Docker Deployment

Container operators should use the taker Compose configuration and its environment settings. Do not assume a native installation's paths or credentials apply inside a container.

Command Reference

Use jm-taker --help or jm-taker coinjoin --help for the installed version. The component reference contains generated command help for the source checkout.