Add support for h suffix in addition to ' suffix is to denote hardened xpub derivation #1200

This commit is contained in:
Martin Boehm
2025-02-06 22:46:51 +01:00
parent af3e98f747
commit 783ab61cf6
2 changed files with 13 additions and 1 deletions

View File

@@ -440,7 +440,7 @@ var (
)
func init() {
xpubDesriptorRegex, _ = regexp.Compile(`^(?P<type>(sh\(wpkh|wpkh|pk|pkh|wpkh|wsh|tr))\((\[\w+/(?P<bip>\d+)'/\d+'?/\d+'?\])?(?P<xpub>\w+)(/(({(?P<changelist1>\d+(,\d+)*)})|(<(?P<changelist2>\d+(;\d+)*)>)|(?P<change>\d+))/\*)?\)+`)
xpubDesriptorRegex, _ = regexp.Compile(`^(?P<type>(sh\(wpkh|wpkh|pk|pkh|wpkh|wsh|tr))\((\[\w+/(?P<bip>\d+)['h]/\d+['h]?/\d+['h]?\])?(?P<xpub>\w+)(/(({(?P<changelist1>\d+(,\d+)*)})|(<(?P<changelist2>\d+(;\d+)*)>)|(?P<change>\d+))/\*)?\)+`)
typeSubexpIndex = xpubDesriptorRegex.SubexpIndex("type")
bipSubexpIndex = xpubDesriptorRegex.SubexpIndex("bip")
xpubSubexpIndex = xpubDesriptorRegex.SubexpIndex("xpub")

View File

@@ -823,6 +823,18 @@ func TestParseXpubDescriptors(t *testing.T) {
ChangeIndexes: []uint32{0, 1, 2},
},
},
{
name: "tr([5c9e228d/86h/1h/0h]tpubD/{0,1,2}/*)#4rqwxvej",
xpub: "tr([5c9e228d/86h/1h/0h]tpubDC88gkaZi5HvJGxGDNLADkvtdpni3mLmx6vr2KnXmWMG8zfkBRggsxHVBkUpgcwPe2KKpkyvTJCdXHb1UHEWE64vczyyPQfHr1skBcsRedN/{0,1,2}/*)#4rqwxvej",
parser: btcTestnetParser,
want: &bchain.XpubDescriptor{
XpubDescriptor: "tr([5c9e228d/86h/1h/0h]tpubDC88gkaZi5HvJGxGDNLADkvtdpni3mLmx6vr2KnXmWMG8zfkBRggsxHVBkUpgcwPe2KKpkyvTJCdXHb1UHEWE64vczyyPQfHr1skBcsRedN/{0,1,2}/*)#4rqwxvej",
Xpub: "tpubDC88gkaZi5HvJGxGDNLADkvtdpni3mLmx6vr2KnXmWMG8zfkBRggsxHVBkUpgcwPe2KKpkyvTJCdXHb1UHEWE64vczyyPQfHr1skBcsRedN",
Type: bchain.P2TR,
Bip: "86",
ChangeIndexes: []uint32{0, 1, 2},
},
},
{
name: "tr([5c9e228d/86'/1'/0']tpubD/<0;1;2>/*)#4rqwxvej",
xpub: "tr([5c9e228d/86'/1'/0']tpubDC88gkaZi5HvJGxGDNLADkvtdpni3mLmx6vr2KnXmWMG8zfkBRggsxHVBkUpgcwPe2KKpkyvTJCdXHb1UHEWE64vczyyPQfHr1skBcsRedN/<0;1;2>/*)#4rqwxvej",