|
| 1 | +<pre> |
| 2 | + BIP: multipath-descs |
| 3 | + Layer: Applications |
| 4 | + Title: Multipath Descriptor Key Expressions |
| 5 | + Author: Andrew Chow < [email protected]> |
| 6 | + Comments-Summary: No comments yet. |
| 7 | + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-multipath-descs |
| 8 | + Status: Draft |
| 9 | + Type: Informational |
| 10 | + Created: 2022-07-26 |
| 11 | + License: BSD-2-Clause |
| 12 | +</pre> |
| 13 | + |
| 14 | +==Abstract== |
| 15 | + |
| 16 | +This document specifies a modification to Key Expressions of Descriptors that are described in BIP 380. |
| 17 | +This modification allows Key Expressions to indicate BIP 32 derivation path steps that can have multiple values. |
| 18 | + |
| 19 | +==Copyright== |
| 20 | + |
| 21 | +This BIP is licensed under the BSD 2-clause license. |
| 22 | + |
| 23 | +==Motivation== |
| 24 | + |
| 25 | +Descriptors can describe the scripts that are used in a wallet, but wallets often require at least two descriptors for all of the scripts that they watch for. |
| 26 | +Wallets typically have one descriptor for producing receiving addresses, and the other for change addresses. |
| 27 | +These descriptors are often extremely similar - they produce the same types of scripts, derive keys from the same master key, and use derivation paths that are almost identical. |
| 28 | +The only differences are in the derivation path where one of the steps will be different between the descriptors. |
| 29 | +Thus it is useful to have a notation to represent both descriptors as a single descriptor where one of the derivation steps is a pair of values. |
| 30 | + |
| 31 | +==Specification== |
| 32 | + |
| 33 | +For extended keys and their derivations paths in a Key Expression, BIP 380 states: |
| 34 | + |
| 35 | +* <tt>xpub</tt> encoded extended public key or <tt>xprv</tt> encoded extended private key (as defined in BIP 32) |
| 36 | +** Followed by zero or more <tt>/NUM</tt> or <tt>/NUMh</tt> path elements indicating BIP 32 derivation steps to be taken after the given extended key. |
| 37 | +** Optionally followed by a single <tt>/*</tt> or <tt>/*h</tt> final step to denote all direct unhardened or hardened children. |
| 38 | +
|
| 39 | +This is modifed to state: |
| 40 | + |
| 41 | +* <tt>xpub</tt> encoded extended public key or <tt>xprv</tt> encoded extended private key (as defined in BIP 32) |
| 42 | +** Followed by zero or more <tt>/NUM</tt> or <tt>/NUMh</tt> path elements indicating BIP 32 derivation steps to be taken after the given extended key. |
| 43 | +** Followed by zero or one <tt>/<NUM;NUM</tt> (<tt>NUM</tt> may be followed by <tt>h</tt> to indicated a hardened step) path element indicating a tuple of BIP 32 derivation steps to be taken after the given extended key. |
| 44 | +*** Followed by zero or more <tt>;NUM</tt> or <tt>;NUMh</tt> additional tuple values of BIP 32 derivation steps |
| 45 | +*** Followed by a single <tt>></tt> |
| 46 | +** Followed by zero or more <tt>/NUM</tt> or <tt>/NUMh</tt> path elements indicating BIP 32 derivation steps to be taken after the given extended key. |
| 47 | +** Optionally followed by a single <tt>/*</tt> or <tt>/*h</tt> final step to denote all direct unhardened or hardened children. |
| 48 | +
|
| 49 | +When a <tt>/<NUM;NUM;...;NUM></tt> is encountered, parsers should produce multiple descriptors where the first descriptor uses the first <tt>NUM</tt>, and a second descriptor uses the second <tt>NUM</tt>, and so on, until each <tt>NUM</tt> is accounted for. |
| 50 | +Descriptors that contain multiple Key Expressions that each have a <tt>/<NUM;NUM;...;NUM></tt> must have tuples of exactly the same length. |
| 51 | + |
| 52 | +The common use case for this is to represent descriptors for producing receiving and change addresses. |
| 53 | +When interpreting for this use case, wallets should use the first descriptor for producing receiving addresses, and the second descriptor for producing change addresses. |
| 54 | +For this use case, the element will commonly be the value <tt>/<0;1></tt> |
| 55 | + |
| 56 | +==Test Vectors== |
| 57 | + |
| 58 | +TBD |
| 59 | + |
| 60 | +==Backwards Compatibility== |
| 61 | + |
| 62 | +This is an addition to the Key Expressions defined in BIP 380. |
| 63 | +Key Expressions using the format described in BIP 380 are compatible with this modification and parsers that implement this will still be able to parse such descriptors. |
| 64 | +However as this is an addition to Key Expressions, older parsers will not be able to understand such descriptors. |
| 65 | + |
| 66 | +This modification to Key Expressions uses two new characters: <tt><</tt> and <tt>;</tt>. |
| 67 | +These are part of the descriptor character set and so are covered by the checksum algorithm. |
| 68 | +As these are previously unused characters, old parsers will not accidentally mistake them for indicating something else. |
| 69 | + |
| 70 | +==Reference Implementation== |
| 71 | + |
| 72 | +https://github.com/bitcoin/bitcoin/pull/22838 |
0 commit comments