diff --git a/bip-0138.md b/bip-0138.md index 453c7d9f..8c84f8de 100644 --- a/bip-0138.md +++ b/bip-0138.md @@ -206,11 +206,43 @@ Note: the derivation-path vector should not contain duplicates. Derivation paths are optional; they can be useful to simplify the recovery process if one has used a non-common derivation path to derive his key.[^derivation-optional] +All implementations that can fetch xpubs from a signing device SHOULD try the following +common paths automatically: + +- `m/44h/h/{0..9}h` +- `m/49h/h/{0..9}h` +- `m/84h/h/{0..9}h` +- `m/86h/h/{0..9}h` +- `m/87h/h/{0..9}h` +- `m/48h/h/{0..9}h/1h` +- `m/48h/h/{0..9}h/2h` + +`` is the BIP44 coin type of the network being recovered: `0` for mainnet +and `1` for test networks. `{0..9}h` covers accounts 0 through 9. + +Some signing devices can fail or require confirmation when fetching xpubs for +some of these paths. This list is not exhaustive: an implementation MAY treat a +path as allowed to fail for any device it supports, in particular +`m/87h/h/{0..9}h`, which is widely under-supported. Implementations SHOULD +at least classify these:[^common-derivation-paths] + +- BitBox02: `m/44h/h/{0..9}h`, `m/87h/h/{0..9}h` +- Ledger: `m/87h/h/{0..9}h` + +If fetching an xpub for one of these common paths fails or times out, +implementations SHOULD warn the user. + [^derivation-optional]: **Why are derivation paths optional?** When standard derivation paths are used, they are easily discoverable, making them straightforward to brute-force. Omitting them enhances privacy by reducing the information shared publicly about the descriptor scheme. +[^common-derivation-paths]: **Why this restricted list?** + The list covers common account paths for the network being recovered, accounts 0 + through 9. Some signing devices reject or display some of these paths before + exporting an xpub, so implementations should treat the listed paths for that + device as optional rather than aborting recovery. + `DERIVATION_PATH` follows this format: `COUNT`