Vault supports HD wallets according to BIP39 (i.e., mnemonic seed), BIP44 (i.e., multi-asset, multi-account) and the following derivation path hierarchy per BIP32:
m / purpose' / coin_type' / account' / change / index
Note: The apostrophe, as used above, indicates BIP32 hardened derivation at that level.
Purpose is a constant set to
0x8000002C) following the BIP43 recommendation. It indicates that the subtree of this node is used according to this specification. Hardened derivation is used at this level.
One mnemonic seed can be used for unlimited number of independent coin types (i.e., Bitcoin, Ethereum, etc.). This level creates a separate subtree for every coin, avoiding the reuse of addresses across coins. Hardened derivation is used at this level.
The account level of the derivation path splits the key space into independent identities. This ensures the wallet never mixes coins across accounts. Accounts are comparable to bank accounts in the context of how they organize and accept funds (i.e., public deposit and private signing facilities). Accounts are sequentially incremented, starting from index
0. This number is used as the child index in BIP32 derivation. Hardened derivation is used at this level.
Note: Account creation should be prevented while the previous account (i.e., the account at
index - 1) has no transaction history (i.e., none of its addresses have been used).
1are used for the external and internal chains, respectively. The external chain is used for addresses that are meant to be visible outside of the wallet context (i.e., for receiving payments). The internal chain is used for addresses which should remain private within the wallet context; this chain is used to store change returned from broadcast transactions. Public derivation is used at this level.
Addresses are numbered from index
0in sequentially increasing manner. This number is used as child index in BIP32 derivation. Public derivation is used at this level.