Migrating from zcashd
zcashd was a single process that acted as both a Zcash full node and a wallet. Its
replacement is a stack of separate components: zebrad provides the full node, and
Zallet provides the wallet. Migrating therefore has two halves: replacing the node, and
migrating the wallet. This page covers the wallet half, and links out to the node parts
you need.
⚠️ Keep your
zcashddata. Do not deletewallet.dat(or thezcashddatadir) after migrating. The migration reports anything it cannot represent in a Zallet wallet rather than migrating it, and that key material then exists only inwallet.dat.
Migration steps
-
Run a
zebradnode. Zallet reads chain data fromzebradvia one of its two chain backends; the backend you choose determines howzebradneeds to be built and configured. -
Install Zallet. See Installation.
-
Create a Zallet config from your
zcash.conf:$ zallet migrate-zcash-conf --zcashd-datadir /path/to/zcashd/datadir -o /path/to/zallet/datadir/zallet.tomlWallet-relevant options are translated to their
zallet.tomlequivalents; options that only affect the node are ignored, and wallet options that cannot be migrated produce warnings. Note thatrpcuser/rpcpasswordare not migrated: Zallet’s JSON-RPC interface uses cookie authentication by default, and you can add password credentials withzallet add-rpc-user. -
Initialize wallet encryption. Zallet encrypts key material with an age identity that you create before importing any keys; see Wallet setup.
-
Migrate your
wallet.dat:$ zallet migrate-zcashd-wallet --zcashd-datadir /path/to/zcashd/datadirThis imports the wallet’s key material and creates corresponding Zallet accounts. If you have several
wallet.datfiles, run it once per file (subsequent runs need--allow-multiple-wallet-imports); each wallet becomes a distinct set of accounts. -
Start Zallet and let it sync:
$ zallet startTransaction history is recovered by scanning the chain, so the wallet needs to sync before balances are complete. Use
zallet rpc getwalletstatusto observe sync progress, then verify your balances againstzcashdbefore decommissioning it. -
Update your RPC clients. Zallet implements a subset of the
zcashdwallet JSON-RPC methods, some with altered semantics, and somezcashdmethods are intentionally omitted. Check every method you use against the method status matrix. Thezallet rpccommand replaceszcash-cli.
What is migrated
- Mnemonic seeds and the keys derived from them. Accounts are re-created following the
structure of the
zcashdwallet. - Standalone (imported) Sapling spending keys and transparent keys.
- Transparent watch-only entries that include their public key or redeem script.
- Account birthdays, so that chain scanning starts from the right height.
What is not migrated
The migration reports these (with counts) instead of importing them:
- Sprout spending keys and funds. Zallet does not support the Sprout pool. Move any
Sprout funds (e.g. to Sapling, using
zcashd’s migration or a Sprout-capable tool) before retiringzcashd. - Address book entries.
- Watch-only entries recorded without their public key or redeem script, and entries with uncompressed public keys.
- Regtest wallets (not currently supported).
Back up the migrated wallet
After migration, a mnemonic backup alone is not sufficient: imported keys exist only
in the wallet database. Keep secure copies of the wallet database (wallet.db), the age
encryption identity file, and your mnemonic phrase(s) — and keep the original
wallet.dat. See the warning in the
migrate-zcashd-wallet reference for details.