This repository tracks the progress of a survey on wallet export formats, with an emphasis on zcashd and zecwallet.
Some work related to parsing is being done in the universal wallet parser.
The zcashd reference client is being deprecated, and this means that funds must be exported from the client and converted to other wallets. The fact that there are now at least four popular major wallets and numerous lightclient wallets, each with their own formats for metadata about funds and transactions, makes this transition challenging as does the number of Zcash address formats (transparent, sprout, sapling, and orchard) and the proliferation of key generation formats (master keys, seeds for HD keys, and BIP-39 compatible seeds for HD keys). A few wallets diverged from the Zcash Improvement Proposals, implementing features not fully aligned with the specifications, which led to (current) compatibility issues, missing and sometimes lost funds.
This reflects a longer standing problem in the Zcash community: any type of migration between wallets is very difficult (see for example forum.zcashcommunity.com/t/shifting-from-zeclite-to-zashi/47756). It's been covered by numerous GitHub Issues, including zcash #6873, zips #821, zips #964, and librustzcash #1552.
The zcashd deprecation therefore offers a major opportunity: we can create an interoperable wallet interchange format that not only serves the main purpose of exporting data from zcashd in a standardized manner, but that also supports the interoperability of the whole Zcash wallet ecosystem going forward, ensuring that users always have their choice of wallet and are never locked into a single provider out of fear of losing past transactions, addresses, seeds, or keys.
This helps to preserve the fairness and openness that are among Zcash's core values.
This survey covers a subset of the existing wallets, some of which may appear missing, but are grouped by their backend/library that generates their storage format. These wallets include:
- Zcashd
- Zecwallet (Zecwallet-lite, zecwallet-light-cli, zecwallet-fullnode)
- Zingo (Zingo, Zingo-pc, Zingo-cli)
- eZcash
- Zashi (zcash_client_sqlite)
- YWallet
- Zenith (coming soon)
- Nighthawk (coming soon)
Name | Defined in | Zecwallet | Zcashd | Zingo | eZcash | Zashi | Ywallet |
---|---|---|---|---|---|---|---|
Unified Full Viewing Key | ZIP-316 | librustzcash::zcash_keys::keys::UnifiedFullViewingKey |
UFVK | librustzcash::zcash_keys::UnifiedFullViewingKey |
UnifiedViewingKey | ||
Unified Address | ZIP-316 | librustzcash::zcash_client_backend::address::UnifiedAddress |
librustzcash::zcash_client_backend::address::UnifiedAddress |
||||
Unified Spending Key | WIP: Not present in latest version | ZcashdUnifiedAddressMetadata | librustzcash::zcash_keys::UnifiedSpendingKey |
||||
Transparent Key | Zcash Protocol Specification Section 5.6.1 Transparent Encodings | WalletTKey | TransparentAddressId | ||||
Ephemeral Key | ZIP-320 | ||||||
V4 Transaction | Zcash Protocol Specification Section 7.1 Transaction Encoding | WIP: Not present in latest version. | CTransaction | librustzcash::zcash_primitives::Transaction |
|||
V5 Transaction | ZIP-225, Zcash Protocol Specification Section 7.1 Transaction Encoding | WalletTx | CTransaction | librustzcash::zcash_primitives::Transaction |
|||
Mnemonic | BIP-39 | MnemonicSeed | Mnemonic, Bip39Mnemonic | ||||
Seed | ZIP-32 | Keys | RawHDSeed | ||||
Birthday | Birthday | CKeyMetadata | Birthday | BirthdayHeight |