BitcoinMachine
TECHNICAL_DOC // KEYS / DERIVATION-PATHS
DERIVATION
PATHS
A derivation path is a string notation describing a node's location in the wallet-hierarchical-deterministic/">HD wallet tree. BIP 44 standardized a 5-level path structure (purpose / coin / account / change / index) so that wallets, hardware devices, and recovery tools agree on where keys for each script type live. The "purpose" level distinguishes legacy, P2SH-SegWit, native SegWit, and Taproot key spaces.
BIP 44 STANDARD STRUCTURE
m / purpose' / coin_type' / account' / change / address_index Example: m / 84' / 0' / 0' / 0 / 5 └─┬─┘ │ │ │ │ │ │ │ │ │ │ └─ 6th address (0-indexed) │ │ │ │ └─ external (receive) chain │ │ │ └─ first account │ │ └─ Bitcoin mainnet │ └─ BIP 84 (native SegWit P2WPKH) └─ master (root from seed) Notation rules: m master private key M master public key / child derivation step ' or h hardened derivation (index + 2³¹) number non-hardened index All four "above-account" levels are hardened. "change" and "address_index" are non-hardened → xpub at account level can derive all addresses
Purpose Levels — One Per Script Type
BIP 44/49/84/86
Each address format gets its own purpose number, ensuring keys for different script types never collide and can be derived independently from the same seed.
BIP 44 — Legacy P2PKH (m/44') Path: m/44'/0'/0'/0/i Address: 1... (Base58Check) Output: P2PKH BIP 49 — P2SH-wrapped SegWit (m/49') Path: m/49'/0'/0'/0/i Address: 3... (Base58Check) Output: P2SH(P2WPKH) Used for compatibility with wallets pre-Bech32 BIP 84 — Native SegWit P2WPKH (m/84') Path: m/84'/0'/0'/0/i Address: bc1q... (Bech32) Output: P2WPKH Standard for SegWit-native wallets BIP 86 — Single-key Taproot (m/86') Path: m/86'/0'/0'/0/i Address: bc1p... (Bech32m) Output: P2TR (key-path only) Internal key tweaked with empty merkle root
Coin Type — SLIP-0044
CHAIN ID
The second level distinguishes which cryptocurrency the keys are for. SLIP-0044 maintains the registry. Only Bitcoin values shown — every chain has its own assignment.
Bitcoin coin types: 0' Bitcoin mainnet 1' Testnet (any testnet — testnet3, testnet4, signet, regtest) Other (for context): 2' Litecoin 3' Dogecoin 60' Ethereum 133' Zcash 145' Bitcoin Cash ... Why hardened: Prevents an attacker who learns one coin's xpub from deriving keys for other coins. Path examples: m/84'/0'/0'/0/0 first BTC native SegWit address m/84'/1'/0'/0/0 first testnet native SegWit address
Account / Change / Index — Lower Levels
SUB-TREE
Within one purpose+coin combination, the account level partitions funds, the change level separates receive vs change, and the index counts addresses sequentially.
Account (hardened): m/84'/0'/0' first account m/84'/0'/1' second account m/84'/0'/2' third account Each account has an independent xpub. Use cases: personal/business, hot/cold separation. Change (non-hardened): /0 external chain (addresses given out for receiving) /1 internal chain (change addresses created by wallet) BIP 86 Taproot: only /0 used by spec (single-key wallets). Address index (non-hardened): /0, /1, /2, ... Sequential within each chain. Wallets typically scan ahead a "gap limit" of 20 unused addresses before stopping (BIP 44 §"Address gap limit"). Full example tree under one account: m/84'/0'/0'/0/0 1st receive address m/84'/0'/0'/0/1 2nd receive address m/84'/0'/0'/1/0 1st change address m/84'/0'/0'/1/1 2nd change address
Multisig and Taproot Variants
EXTENDED PATHS
Beyond single-key paths, dedicated purposes exist for multisig coordination and complex Taproot policies.
BIP 48 — Multisig (m/48') Path: m/48'/coin'/account'/script_type' script_type: 0' P2SH-multisig (3...) 1' P2SH-P2WSH-multisig (3...) 2' P2WSH-multisig (bc1q...) Each cosigner exports their xpub at this level. Coordinator combines them via a descriptor. BIP 88 (less standardized) and other purposes: m/45' BIP 45 multisig (older convention) m/87' "Cake wallet" multisig spec Custom paths for descriptor-based wallets Taproot script-path: Single-key: m/86' (BIP 86) Multi-key/scripted: descriptors with custom paths e.g. tr(KEY, {pk(KEY2), pk(KEY3)}) under m/345'
TERMINOLOGY_INDEX
BIP 44
Multi-account hierarchy. Defines the 5-level path structure: purpose/coin/account/change/index.
Purpose
First level of the path. Indicates script type / BIP family. 44=legacy, 49=wrapped SegWit, 84=SegWit, 86=Taproot.
SLIP-0044
Registered coin type identifiers. Bitcoin mainnet = 0, testnet = 1.
Hardened
Derivation step where index ≥ 2³¹. Notation: i' or ih. Required above the account level.
Gap Limit
Maximum number of consecutive unused addresses scanned during recovery. BIP 44 default: 20.
BIP44/49/84/86
Derivation Paths
A BIP32 path like m/84'/0'/0'/0/5 is a coordinate in the key tree. Each /-separated level is a CKD operation; an apostrophe marks a hardened step. The five standard levels are: purpose (which BIP), coin type (which chain), account, change (0=receive, 1=internal), and address index.
INTERACTIVE PATH BREAKDOWNhover for level meaning, click standard paths below
CLICK A PATH TO DISSECT IT
PATHTYPEDESCRIPTIONBIP
Build a derivation path by selecting each component. Use the dropdowns to understand what each level controls and how the hardened/normal choice affects wallet security.
BUILD A PATH FROM COMPONENTS
Gap limit: Wallets stop scanning for addresses after finding 20 consecutive unused addresses (BIP44 gap limit). If you skip indices — e.g. generate address 0, 1, 2, then jump to 25 — addresses 3–24 may never be scanned on wallet restore, causing apparent fund loss. Always use sequential indices.