Skip to content

Back Up And Recover A Wallet

Use this procedure to restore a JoinMarket NG wallet from its BIP39 mnemonic. Do not spend until the recovered wallet has been checked against independent records.

Preserve What Is Not In The Seed

Keep the mnemonic and its exact BIP39 passphrase. The passphrase selects a different wallet and is not the same as the password that encrypts a local wallet file. Record the file-encryption password if you still need to open that file, but it does not derive keys.

The seed does not restore local labels, frozen UTXOs, address reservations, or the original CoinJoin and send records. Preserve the original data directory and wallet files when possible. An external-key fidelity bond also requires its external seed or private key and the recorded public key, derivation path, fingerprint, network, and locktime.

Keep Formats Separate

Native CLI wallets use *.mnemonic files. JAM and jmwalletd use their own encrypted JMNG container, which may have a .jmdat name. The legacy joinmarket-clientserver wallet.jmdat is JMDAT, a third and incompatible format. Do not rename, copy, or pass either .jmdat file to --mnemonic-file; recover the BIP39 phrase with the tool appropriate to that wallet format, then import the phrase here.

Import And Verify

Stop the original maker, taker, wallet daemon, and any other process using this wallet. Do not operate the old and recovered copies at the same time.

Import the mnemonic interactively into a new file:

jm-wallet import --output "$HOME/.joinmarket-ng/wallets/recovered.mnemonic"

The command prompts for the mnemonic and for a local file-encryption password. It stores the words, not the BIP39 passphrase. Supply that passphrase only when using the recovered wallet, via the hidden prompt rather than on a command line:

jm-wallet info \
  --mnemonic-file "$HOME/.joinmarket-ng/wallets/recovered.mnemonic" \
  --prompt-bip39-passphrase

Compare the displayed wallet fingerprint, known receive addresses, and each mixdepth balance with records from the old wallet or an independent source. A successful import followed by info only proves that the phrase was accepted and reports currently discovered data. It does not prove that all old history, labels, freezes, address metadata, or coverage was restored.

Check Coverage Before Rescanning

For a descriptor wallet, inspect Core's scan and coverage diagnostics first:

jm-wallet info \
  --mnemonic-file "$HOME/.joinmarket-ng/wallets/recovered.mnemonic" \
  --prompt-bip39-passphrase \
  --scan-status

Run an explicit jm-wallet rescan only when a known address or balance is still missing and the diagnostics establish incomplete time or address-index coverage. Use jm-wallet rescan --help to choose a time repair or, only for a known index gap, --scan-depth. A rescan can be long-running; it is not a routine recovery step and is not evidence that all seed-independent history was recovered.

Recover Fidelity Bonds Only When Needed

If the old wallet held fidelity bonds, run jm-wallet recover-bonds with the recovered mnemonic and the same prompted BIP39 passphrase. It explicitly scans all 960 canonical bond locktimes and can take a long time. Do not run it merely because recovery metadata is absent.

See Fidelity Bond Operations for wallet-derived and external-key bond recovery. A regular history scan does not establish bond coverage.

After the address and balance comparisons match, retain the original backup and seed-independent metadata until you have completed the intended accounting and re-created any needed labels or freezes.