TECHNICAL_DOC // KEYS / DERIVATION-PATHS
DERIVATION
PATHS
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.
PATH_NOTATION
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.
INTERACTIVE — TRY IT YOURSELF
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.
PATH DISSECTOR — HOVER EACH SEGMENT
INTERACTIVE PATH BREAKDOWNhover for level meaning, click standard paths below
STANDARD BIP PATHS
CLICK A PATH TO DISSECT IT
| PATH | TYPE | DESCRIPTION | BIP |
|---|
PATH BUILDER
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.