Skip to content

Commit b69068f

Browse files
committed
spdescriptor: Replace maxNumberOfLabels with fAllowLabels
1 parent e662bad commit b69068f

File tree

6 files changed

+78
-61
lines changed

6 files changed

+78
-61
lines changed

src/key_io.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ SpKey DecodeSpKey(const std::string& str)
339339
auto result = bech32::Decode(str, bech32::CharLimit::SILENT_PAYMENTS);
340340
bool isValid = result.encoding == bech32::Encoding::BECH32M && result.hrp == Params().SilentPaymentKeyHRP(false);
341341
std::vector<unsigned char> data_out = {};
342-
data_out.reserve(BIP352_SPKEY_SIZE);
342+
data_out.reserve(BIP352_SPKEY_SIZE_IN_BYTES);
343343
isValid &= ConvertBits<5, 8, false>([&](unsigned char c) { data_out.push_back(c); }, result.data.begin(), result.data.end());
344344
if (isValid) {
345345
key.Decode(data_out.data());
@@ -349,10 +349,10 @@ SpKey DecodeSpKey(const std::string& str)
349349

350350
std::string EncodeSpKey(const SpKey& key)
351351
{
352-
std::vector<unsigned char> data(BIP352_SPKEY_SIZE);
352+
std::vector<unsigned char> data(BIP352_SPKEY_SIZE_IN_BYTES);
353353
key.Encode(data.data());
354354
std::vector<unsigned char> data_out = {};
355-
data_out.reserve(((BIP352_SPKEY_SIZE * 8) / 5)+1);
355+
data_out.reserve(((BIP352_SPKEY_SIZE_IN_BYTES * 8) / 5)+1);
356356
ConvertBits<8, 5, true>([&](unsigned char c) { data_out.push_back(c); }, data.begin(), data.end());
357357
auto ret = bech32::Encode(bech32::Encoding::BECH32M, Params().SilentPaymentKeyHRP(false), data_out);
358358
memory_cleanse(data.data(), data.size());
@@ -367,7 +367,7 @@ SpPubKey DecodeSpPubKey(const std::string& str)
367367
bool isValid = result.encoding == bech32::Encoding::BECH32M &&
368368
result.hrp == Params().SilentPaymentKeyHRP();
369369
std::vector<unsigned char> data_out = {};
370-
data_out.reserve(BIP352_SPKEY_SIZE);
370+
data_out.reserve(BIP352_SPKEY_SIZE_IN_BYTES);
371371
isValid &= ConvertBits<5, 8, false>([&](unsigned char c) { data_out.push_back(c); }, result.data.begin(), result.data.end());
372372
if (isValid) {
373373
key.Decode(data_out.data());
@@ -377,10 +377,10 @@ SpPubKey DecodeSpPubKey(const std::string& str)
377377

378378
std::string EncodeSpPubKey(const SpPubKey& key)
379379
{
380-
std::vector<unsigned char> data(BIP352_SPKEY_SIZE);
380+
std::vector<unsigned char> data(BIP352_SPKEY_SIZE_IN_BYTES);
381381
key.Encode(data.data());
382382
std::vector<unsigned char> data_out = {};
383-
data_out.reserve(((BIP352_SPKEY_SIZE * 8) / 5)+1);
383+
data_out.reserve(((BIP352_SPKEY_SIZE_IN_BYTES * 8) / 5)+1);
384384
ConvertBits<8, 5, true>([&](unsigned char c) { data_out.push_back(c); }, data.begin(), data.end());
385385
auto ret = bech32::Encode(bech32::Encoding::BECH32M, Params().SilentPaymentKeyHRP(), data_out);
386386
memory_cleanse(data.data(), data.size());

src/script/descriptor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ class SilentPubkeyProvider final : public PubkeyProvider
575575
public:
576576
SilentPubkeyProvider(uint32_t exp_index, const SpPubKey& sppk) : PubkeyProvider(exp_index), m_sppk(sppk) {}
577577
bool IsRange() const override { return false; }
578-
size_t GetSize() const override { return BIP352_SPKEY_SIZE; }
578+
size_t GetSize() const override { return BIP352_SPKEY_SIZE_IN_BYTES; }
579579
bool GetPubKey(int pos, const SigningProvider& arg, CPubKey& key, KeyOriginInfo& info, const DescriptorCache* read_cache = nullptr, DescriptorCache* write_cache = nullptr) const override
580580
{
581581
return false;
@@ -619,14 +619,14 @@ class SilentPubkeyProvider final : public PubkeyProvider
619619
if (!arg.GetKey(m_sppk.spendKey.GetID(), spendKey)) return false;
620620
ret.scanKey = m_sppk.scanKey;
621621
ret.spendKey = spendKey;
622-
ret.maximumNumberOfLabels = m_sppk.maximumNumberOfLabels;
622+
ret.fAllowLabels = m_sppk.fAllowLabels;
623623
std::copy(m_sppk.version, m_sppk.version + sizeof(m_sppk.version), ret.version);
624624
std::copy(m_sppk.vchFingerprint, m_sppk.vchFingerprint + sizeof(ret.vchFingerprint), ret.vchFingerprint);
625625
return true;
626626
}
627627
bool GetSpPubKey(SpPubKey& ret) const
628628
{
629-
ret.maximumNumberOfLabels = m_sppk.maximumNumberOfLabels;
629+
ret.fAllowLabels = m_sppk.fAllowLabels;
630630
std::copy(m_sppk.version, m_sppk.version + sizeof(m_sppk.version), ret.version);
631631
std::copy(m_sppk.vchFingerprint, m_sppk.vchFingerprint + sizeof(ret.vchFingerprint), ret.vchFingerprint);
632632
ret.scanKey = m_sppk.scanKey;

src/silentpaymentkey.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,62 +6,62 @@
66
#include <silentpaymentkey.h>
77
#include <span.h>
88

9-
void SpPubKey::Encode(unsigned char code[BIP352_SPKEY_SIZE]) const
9+
void SpPubKey::Encode(unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]) const
1010
{
1111
// Should probably check that keys are compressed here
1212
memcpy(code, version, 1);
1313
memcpy(code+1, vchFingerprint, 4);
14-
WriteBE32(code+5, maximumNumberOfLabels);
15-
memcpy(code+9, scanKey.begin(), 32);
16-
memcpy(code+41, spendKey.begin(), 33);
14+
memcpy(code+5, &fAllowLabels, 1);
15+
memcpy(code+6, scanKey.begin(), 32);
16+
memcpy(code+38, spendKey.begin(), 33);
1717
}
1818

19-
void SpPubKey::Decode(const unsigned char code[BIP352_SPKEY_SIZE])
19+
void SpPubKey::Decode(const unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES])
2020
{
2121
memcpy(version, code, 1);
2222
memcpy(vchFingerprint, code+1, 4);
23-
maximumNumberOfLabels = ReadBE32(code+5);
24-
scanKey.Set(code+9, code+41, true);
25-
spendKey.Set(code+41, code+BIP352_SPKEY_SIZE);
23+
memcpy(&fAllowLabels, code+5, 1);
24+
scanKey.Set(code+6, code+38, true);
25+
spendKey.Set(code+38, code+BIP352_SPKEY_SIZE_IN_BYTES);
2626
}
2727

2828
CKeyID SpPubKey::GetID() const
2929
{
30-
unsigned char code[BIP352_SPKEY_SIZE];
30+
unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES];
3131
Encode(code);
32-
return CKeyID(Hash160(std::span(code, BIP352_SPKEY_SIZE)));
32+
return CKeyID(Hash160(std::span(code, BIP352_SPKEY_SIZE_IN_BYTES)));
3333
}
3434

35-
void SpKey::Encode(unsigned char code[BIP352_SPKEY_SIZE]) const
35+
void SpKey::Encode(unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]) const
3636
{
3737
// Should probably check that keys are compressed here
3838
memcpy(code, version, 1);
3939
memcpy(code+1, vchFingerprint, 4);
40-
WriteBE32(code+5, maximumNumberOfLabels);
41-
memcpy(code+9, scanKey.begin(), 32);
42-
code[41] = 0x00;
43-
memcpy(code+42, spendKey.begin(), 32);
40+
memcpy(code+5, &fAllowLabels, 1);
41+
memcpy(code+6, scanKey.begin(), 32);
42+
code[38] = 0x00;
43+
memcpy(code+39, spendKey.begin(), 32);
4444
}
4545

46-
void SpKey::Decode(const unsigned char code[BIP352_SPKEY_SIZE])
46+
void SpKey::Decode(const unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES])
4747
{
48-
if (code[41] != 0x00) {
48+
if (code[38] != 0x00) {
4949
// return early leave SpKey invalid
5050
return;
5151
}
5252
memcpy(version, code, 1);
5353
memcpy(vchFingerprint, code+1, 4);
54-
maximumNumberOfLabels = ReadBE32(code+5);
55-
scanKey.Set(code+9, code+41, true);
56-
spendKey.Set(code+42, code+BIP352_SPKEY_SIZE, true);
54+
memcpy(&fAllowLabels, code+5, 1);
55+
scanKey.Set(code+6, code+38, true);
56+
spendKey.Set(code+39, code+BIP352_SPKEY_SIZE_IN_BYTES, true);
5757
}
5858

5959
SpPubKey SpKey::Neuter()
6060
{
6161
SpPubKey ret;
6262
memcpy(ret.version, version, 1);
6363
memcpy(ret.vchFingerprint, vchFingerprint, 4);
64-
ret.maximumNumberOfLabels = maximumNumberOfLabels;
64+
ret.fAllowLabels = fAllowLabels;
6565
ret.scanKey = scanKey;
6666
ret.spendKey = spendKey.GetPubKey();
6767
return ret;

src/silentpaymentkey.h

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
#include <cstring>
1313

14-
const unsigned int BIP352_SPKEY_SIZE = 74;
14+
const unsigned int BIP352_SPKEY_SIZE_IN_BYTES = 71;
1515

1616
struct SpPubKey {
1717
unsigned char version[1];
1818
unsigned char vchFingerprint[4];
19-
int maximumNumberOfLabels;
19+
unsigned char fAllowLabels; // sizeof(bool) might differ from 1 based on impl so use "unsigned char"
2020
CKey scanKey;
2121
CPubKey spendKey;
2222

@@ -29,7 +29,7 @@ struct SpPubKey {
2929
{
3030
memset(version, 0, sizeof(version));
3131
memset(vchFingerprint, 0, sizeof(vchFingerprint));
32-
maximumNumberOfLabels = 0;
32+
fAllowLabels = true;
3333
CPubKey dummySpendPubKey;
3434
spendKey = dummySpendPubKey;
3535
}
@@ -38,14 +38,14 @@ struct SpPubKey {
3838
{
3939
memset(version, 0, sizeof(version));
4040
memset(vchFingerprint, 0, sizeof(vchFingerprint));
41-
maximumNumberOfLabels = 0;
41+
fAllowLabels = true;
4242
}
4343

4444
friend bool operator==(const SpPubKey &a, const SpPubKey &b)
4545
{
4646
return memcmp(a.version, b.version, sizeof(version)) == 0 &&
4747
memcmp(a.vchFingerprint, b.vchFingerprint, sizeof(vchFingerprint)) == 0 &&
48-
a.maximumNumberOfLabels == b.maximumNumberOfLabels &&
48+
a.fAllowLabels == b.fAllowLabels &&
4949
a.scanKey == b.scanKey &&
5050
a.spendKey == b.spendKey;
5151
}
@@ -72,8 +72,13 @@ struct SpPubKey {
7272
return scanKey.IsValid() && spendKey.IsValid();
7373
}
7474

75-
void Encode(unsigned char code[BIP352_SPKEY_SIZE]) const;
76-
void Decode(const unsigned char code[BIP352_SPKEY_SIZE]);
75+
bool AllowLabels()
76+
{
77+
return fAllowLabels;
78+
}
79+
80+
void Encode(unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]) const;
81+
void Decode(const unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]);
7782

7883
//! Get the KeyID of this Silent Payment public key (hash of its serialization)
7984
CKeyID GetID() const;
@@ -82,21 +87,21 @@ struct SpPubKey {
8287
struct SpKey {
8388
unsigned char version[1];
8489
unsigned char vchFingerprint[4];
85-
int maximumNumberOfLabels;
90+
unsigned char fAllowLabels; // sizeof(bool) might differ from 1 based on impl so use "unsigned char"
8691
CKey scanKey;
8792
CKey spendKey;
8893

8994
friend bool operator==(const SpKey& a, const SpKey& b)
9095
{
9196
return memcmp(a.version, b.version, sizeof(version)) == 0 &&
9297
memcmp(a.vchFingerprint, b.vchFingerprint, sizeof(vchFingerprint)) == 0 &&
93-
a.maximumNumberOfLabels == b.maximumNumberOfLabels &&
98+
a.fAllowLabels == b.fAllowLabels &&
9499
a.scanKey == b.scanKey &&
95100
a.spendKey == b.spendKey;
96101
}
97102

98103
SpKey() = default;
99-
SpKey(const SpPubKey& sppub, const CKey& scanKey_in, const CKey& spendKey_in) : maximumNumberOfLabels(sppub.maximumNumberOfLabels), scanKey(scanKey_in), spendKey(spendKey_in)
104+
SpKey(const SpPubKey& sppub, const CKey& scanKey_in, const CKey& spendKey_in) : fAllowLabels(sppub.fAllowLabels), scanKey(scanKey_in), spendKey(spendKey_in)
100105
{
101106
std::copy(sppub.version, sppub.version + sizeof(sppub.version), version);
102107
std::copy(sppub.vchFingerprint, sppub.vchFingerprint + sizeof(sppub.vchFingerprint), vchFingerprint);
@@ -107,8 +112,13 @@ struct SpKey {
107112
return scanKey.IsValid() && spendKey.IsValid();
108113
}
109114

110-
void Encode(unsigned char code[BIP352_SPKEY_SIZE]) const;
111-
void Decode(const unsigned char code[BIP352_SPKEY_SIZE]);
115+
bool AllowLabels()
116+
{
117+
return fAllowLabels;
118+
}
119+
120+
void Encode(unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]) const;
121+
void Decode(const unsigned char code[BIP352_SPKEY_SIZE_IN_BYTES]);
112122
SpPubKey Neuter();
113123
};
114124

src/test/descriptor_tests.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,38 +1101,38 @@ BOOST_AUTO_TEST_CASE(descriptor_test)
11011101
// Silent Payments
11021102
// Check that /* uses default derivation path for SP
11031103
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/*,xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/*)",
1104-
"sp(spprv1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5qw3uewwg77eaq9rth6er3vj0yutvs5xyup0ndsrg2ffwgheppkkdg3tdld9)",
1105-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)",
1106-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)");
1104+
"sp(spprv1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5ww8yph)",
1105+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)",
1106+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)");
11071107

11081108
// Check that no path uses default derivation path for SP
11091109
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi,xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi)",
1110-
"sp(spprv1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5qw3uewwg77eaq9rth6er3vj0yutvs5xyup0ndsrg2ffwgheppkkdg3tdld9)",
1111-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)",
1112-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)");
1110+
"sp(spprv1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5ww8yph)",
1111+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)",
1112+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)");
11131113

11141114
// Check that provided path is used instead of the default derivation path for SP
11151115
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi,xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/0h)",
1116-
"sp(spprv1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5qwmvhpf70wwlfxmkfmfm8dargka4qgec2fkmxcpvr3tgkezxs2l6sf4t658)",
1117-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5p457zxv2j2yzn9ha42hxhf3fkqdz5pc5hykqevp765qrrsdn7vc4skd7hrr)",
1118-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5p457zxv2j2yzn9ha42hxhf3fkqdz5pc5hykqevp765qrrsdn7vc4skd7hrr)");
1116+
"sp(spprv1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q8dkts5l8h805ndmya5ank735tw6syvu9ymdnvqkpc45tv3rg90ag3njkw0)",
1117+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q660prx9f9zpfjm764tnt5c5mqx32qu2tjtqvkqld2qp3cxelxv2ccvc7ax)",
1118+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q660prx9f9zpfjm764tnt5c5mqx32qu2tjtqvkqld2qp3cxelxv2ccvc7ax)");
11191119

11201120
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/0h,xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi)",
1121-
"sp(spprv1qqqqqqqqqqqqqq8dkts5l8h805ndmya5ank735tw6syvu9ymdnvqkpc45tv3rg90agqw3uewwg77eaq9rth6er3vj0yutvs5xyup0ndsrg2ffwgheppkkdgnemptj)",
1122-
"sp(sppub1qqqqqqqqqqqqqq8dkts5l8h805ndmya5ank735tw6syvu9ymdnvqkpc45tv3rg90agpnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtss5pst7p)",
1123-
"sp(sppub1qqqqqqqqqqqqqq8dkts5l8h805ndmya5ank735tw6syvu9ymdnvqkpc45tv3rg90agpnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtss5pst7p)");
1121+
"sp(spprv1qqqqqqqqq8km9c20nmnh6fkajw6wem0g69hdgzxwzjdkekqtqu269kg35zh75q8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5ht3stj)",
1122+
"sp(sppub1qqqqqqqqq8km9c20nmnh6fkajw6wem0g69hdgzxwzjdkekqtqu269kg35zh75qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cgufn4lq)",
1123+
"sp(sppub1qqqqqqqqq8km9c20nmnh6fkajw6wem0g69hdgzxwzjdkekqtqu269kg35zh75qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cgufn4lq)");
11241124

11251125
// Check that xpubs are accepted for spend key
11261126
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi,xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8)",
1127-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)",
1128-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)",
1129-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5pnngmqzvcpt976aaqlhevn5qkv2y7sk42j0mpd7yzsut507jwgtssknx4ck)",
1127+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)",
1128+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)",
1129+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg9v9p49)",
11301130
MISSING_PRIVKEYS);
11311131

11321132
CheckSilentPayments("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi,xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/0)",
1133-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5p8cjcfl7ucts5c4ln7tqfjvm9ledmcpdyq4s55kz6rmssl903az0qr6947z)",
1134-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5p8cjcfl7ucts5c4ln7tqfjvm9ledmcpdyq4s55kz6rmssl903az0qr6947z)",
1135-
"sp(sppub1qqqqqqqqqqqqqq8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5p8cjcfl7ucts5c4ln7tqfjvm9ledmcpdyq4s55kz6rmssl903az0qr6947z)",
1133+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qnufvyllwv9c2v2lel9syexdjlukauqkjq2c22tpdpacg0jhc738sy4ufm5)",
1134+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qnufvyllwv9c2v2lel9syexdjlukauqkjq2c22tpdpacg0jhc738sy4ufm5)",
1135+
"sp(sppub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qnufvyllwv9c2v2lel9syexdjlukauqkjq2c22tpdpacg0jhc738sy4ufm5)",
11361136
MISSING_PRIVKEYS);
11371137

11381138
CheckUnparsable("sp(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi)",

test/functional/wallet_miniscript.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
# A Taproot with all above scripts in its tree.
5757
f"tr(4d54bb9928a0683b7e383de72943b214b0716f58aa54c7ba6bcea2328bc9c768,{{{{{P2WSH_MINISCRIPTS[0]},{P2WSH_MINISCRIPTS[1]}}},{{{P2WSH_MINISCRIPTS[2].replace('multi', 'multi_a')},{P2WSH_MINISCRIPTS[3]}}}}})",
5858
f"sp({TPRVS[0]},{TPUBS[0]})",
59-
"sp(sprtpub1qqqqqqqqqqqqqqz2cezqye6220rn3xzpxu5lxdh8l89x6mvvz25vx699mlz5tss635p7y6txdrl97smz23cmxylj0wmtygzulgc9ynpctsj8g3zxp9eycgcpvngw9)",
59+
"sp(sprtpub1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2qee5dspxvq4jldw7s0mukf6qtx9z0gt24f8asklzpgw968lf8y9cg0wxxt4)",
6060
]
6161

6262
DESCS_PRIV = [
@@ -209,6 +209,13 @@
209209
"sigs_count": 1,
210210
"stack_size": 1,
211211
},
212+
{
213+
"desc": "sp(sprtprv1qqqqqqqqq850xtnj8hk0gpg6a7kgutyne8zmy9p38qtumvq6zj2tj97ggd4n2q8g7vh8y00v7sz34mav3ckf8jw9kg2rzwqhekcp59y5hytussmtx5yvyrl8)",
214+
"sequence": None,
215+
"locktime": None,
216+
"sigs_count": 1,
217+
"stack_size": 1,
218+
}
212219
]
213220

214221

0 commit comments

Comments
 (0)