Skip to content

Commit 3a82a53

Browse files
committed
Specify bip-multipath-descs
1 parent 43da5de commit 3a82a53

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

bip-multipath-descs.mediawiki

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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

Comments
 (0)