Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Multi-Currency Hierarchy For Use In Multisignature Deterministic Wallets

Multi-Currency Hierarchy For Use In Multisignature Deterministic Wallets

Throughout this document, "999" is used as a placeholder for a BIP number.

Abstract

This BIP defines a hierarchy based on BIP-0044 for deterministic wallets intended to facilitate multi-currency, multisignature wallet management.

This BIP is an application of BIP-0043.

Motivation

The hierarchy defined in BIP-0044 places a coin's type level above the level designating account number. This limits the possible implementations of multi-currency, multisignature wallets. The hierarchy defined here facilitates the creation of wallets intended to be both multi-currency and multisignature, in which only one set of keys must be distributed among cosigners.

Path Levels

m / purpose' / wallet' / coin_type / change / address_index

Purpose

Purpose is a constant tentatively set to 999 as there is no BIP number assigned to this proposal. Hardened derivation is used here.

Wallet

This level is incremented for every wallet that one makes. Much like the account node in BIP-0044, this is intended to organize independent identities within the key space. Basically, each index in this level represents a group of cosigners. Hardened derivation is used here.

Coin Type

This is the BIP-0044 index of the coin being managed. Public derivation is used here. Public derivation is used so that cosigners need only know one of each other's public keys, rather than needing to distribute public keys for each coin.

Change

0 is used for public addresses and 1 is used for change addresses. Identical to BIP-0044 behavior. Public derivation is used here.

Address Index

The address index. This increases sequentially as it does in BIP-0044. Public derivation is used here.

Examples

wallet coin change? address path
first Bitcoin no first m / 999' / 0' / 0 / 0 / 0
first Bitcoin no second m / 999' / 0' / 0 / 0 / 1
first Testnet no first m / 999' / 0' / 1 / 0 / 0
second Bitcoin no first m / 999' / 1' / 0 / 0 / 0
second Bitcoin yes first m / 999' / 1' / 0 / 1 / 0
third Testnet yes sixth m / 999' / 2' / 1 / 1 / 5

Implementation

Encompass uses this method for deriving keys in multisig wallets, except that "44" is used where "999" is above, since it was originally BIP-0044-based.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.