Skip to content


Have a question that is not listed here? Let us know!


Frequently Asked Questions

This FAQ compiles questions that relate to Jam in particular. For things related to JoinMarket in general, please refer to the JoinMarket documentation.

How much can I earn?

Earning sats entails providing liquidity to other market participants. Consequently, how much you can earn depends on multiple factors, market conditions and liquidity size being two of them. In general, the more liquidity you provide, the more you can earn. That being said, you are competing in an open market, and because competition is global and only constraint by market forces, the margin is usually thin.

If your offers are not taken by market participants, your offer might be too expensive. Check the order book and compare your offer to the market price. If your offer is competitive and is still ignored, make sure to create a Fidelity Bond, which signals that you are a serious market participant and not a malicious entity.

See also "a few words about incentives" from the JoinMarket documentation.

How high are the fees that I do have to pay?

The amount of fees you have to pay depends on market and blockspace conditions. They are dictated by supply and demand, both for collaborative transactions and single user transactions.

Market makers provide liquidity and set the fee they want to earn, either in absolute or percentage terms. Market takers have to agree to take these offers voluntarily. Check the orderbook to get an up-to-date overview of the current fee market.

In addition to these fees, you will have to pay mining fees for you and the makers. Mining fees depend on how many transactions are currently in the mempool. Inspect your mempool or use a public site like to do a fee estimation.


We recommended that you run your own instance on your full node.

See also "a note on fees" from the JoinMarket documentation.

I'm getting an error when trying to open the wallet

The following error can pop up in case JoinMarket didnt't shut down cleanly:

wallet.jmdat cannot be created/opened, it is locked.


Make sure that you have written down your wallet seed before executing any command

You can resolve this by manually deleting the wallet .lock file as explained in issue #173.

Why is my collaborative transaction taking so long?

This can have multiple reasons. Tor or general network connection issues, participants not responding in a timely manner, missing requirements to source commitments (see the docs), period of slow block production, unexpected increase of transaction fees, etc.

For a better assessment, the following can be taken as a guideline:

  • single collaborative transactions generally take only a few minutes (<15min)
  • a scheduled sweep can take hours, even days (<3days)

If an operation takes longer than that, then there might be a different issue. See "Something else is/seems stuck" for more info.

Something else is/seems stuck; what can I do?

If a single collaborative transaction takes hours, or if your scheduled sweep already takes over three days, there might be a different underlying problem.

A general rule of thumb is: Any operation either succeeds or fails. If an operation is aborted prematurely, there is no danger of loss of funds.

All operations can be aborted by locking your wallet.

Since Jam does not yet have a way to provide fine grained error information to users, it is always a good idea to inspect the log files for warning and error messages.

How do I view the log file?

If you are running Jam with one of the supported integrations (RaspiBlitz, Citadel, Umbrel, etc.) chances are you can view the logs inside the app (See Settings > Show logs).

If the option is not displayed, or if you run the standalone docker image yourself, you can find all log files inside the container in directory /var/log/jam/. See jmwalletd_stdout.log or jmwalletd_stderr.log for problems with Jam.

e.g. tail -n 200 -f /var/log/jam/jmwalletd_stdout.log

If you run JoinMarket natively, you can find the logs files inside the logs folder of JoinMarket's working directory (e.g. /home/<user>/.joinmarket/logs)

e.g. tail -n 200 -f /home/user/.joinmarket/logs/jmwalletd_logs.log

No connection to gateway


(hint: check service is running; check ports are open) can also be reverse proxy issues; reverse proxy is still mandatory (this is a pain point for me.. we need to get rid of it) don't know if we should go into details why it is needed or what the differences are

Can I import an existing wallet?

Yes, it is possible to import an existing wallet. However, not yet via the web interface, but with a few manual steps via the command line.

  • Log into the host machine, e.g. with ssh (see an example for Umbrel below)
  • Navigate to JoinMarket's root directory
  • Invoke the recover mechansim of the script
. jmvenv/bin/activate # if virtual environment is enabled
python3 scripts/ recover --gap-limit=200 --recoversync
  • Answer questions (provide seed phrase, etc.). Make sure that you put ".jmdat" at the end of the name for the wallet, otherwise it won't be displayed in Jam. Answer the question for support of fidelity bonds with "y" (yes).
root@821939a90a7c:/src# python3 scripts/ recover --gap-limit=200 --recoversync
User data location: /root/.joinmarket/
Input mnemonic recovery phrase: zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong
Input mnemonic extension, leave blank if there isnt one: 
Enter new passphrase to encrypt wallet: 
Reenter new passphrase to encrypt wallet: 
Input wallet file name (default: wallet.jmdat): recover.jmdat
Would you like this wallet to support fidelity bonds? write 'n' if you don't know what this is (y/n): y
Write down this wallet recovery mnemonic

zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong

Recovered wallet OK
  • All done.

Here is an example of how you'd get into the Jam container on Umbrel:

  • Log into your umbrel with ssh umbrel@umbrel.local
  • Move into the jam container with docker exec -it jam_jam_1 bash
  • Navigate to JoinMarket's root directory with cd /src
  • Now follow the import procedure as explained above
  • Leave the command line with exit (multiple times)