Skip to content

Commit 9a887ba

Browse files
committed
Merge bitcoin/bitcoin#32344: Wallet: Fix Non-Ranged Descriptors with Range [0,0] Trigger Unexpected Wallet Errors in AddWalletDescriptor
97d383a Test updating non-ranged descriptor with [0,0] range succeeds (Novo) 2ae1788 Skip range verification for non-ranged desc (Novo) Pull request description: Closes bitcoin/bitcoin#31728 This PR updates the `DescriptorScriptPubKeyMan` to skip range checks for non-ranged descriptors, which previously caused errors when updating a non-ranged descriptor with the range [0,0] #### Testing A unit test was added to test the new behaviour ACKs for top commit: achow101: ACK 97d383a rkrux: ACK 97d383a Tree-SHA512: 6dbd058376d9e57d26477d9d6d89646e80a32e3ffcc9f4e30eeda273575d12583ce520cc0032cc67c12ea0b3ad344fbd3945d9fc5e389b6a6bce1ea7ad5d6e59
2 parents 26fba39 + 97d383a commit 9a887ba

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/wallet/scriptpubkeyman.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,11 @@ bool DescriptorScriptPubKeyMan::CanUpdateToWalletDescriptor(const WalletDescript
15981598
return false;
15991599
}
16001600

1601+
if (!descriptor.descriptor->IsRange()) {
1602+
// Skip range check for non-range descriptors
1603+
return true;
1604+
}
1605+
16011606
if (descriptor.range_start > m_wallet_descriptor.range_start ||
16021607
descriptor.range_end < m_wallet_descriptor.range_end) {
16031608
// Use inclusive range for error

src/wallet/test/wallet_tests.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,25 @@ static void AddKey(CWallet& wallet, const CKey& key)
7070
assert(spk_manager);
7171
}
7272

73+
BOOST_FIXTURE_TEST_CASE(update_non_range_descriptor, TestingSetup)
74+
{
75+
CWallet wallet(m_node.chain.get(), "", CreateMockableWalletDatabase());
76+
{
77+
LOCK(wallet.cs_wallet);
78+
wallet.SetWalletFlag(WALLET_FLAG_DESCRIPTORS);
79+
auto key{GenerateRandomKey()};
80+
auto desc_str{"combo(" + EncodeSecret(key) + ")"};
81+
FlatSigningProvider provider;
82+
std::string error;
83+
auto descs{Parse(desc_str, provider, error, /* require_checksum=*/ false)};
84+
auto& desc{descs.at(0)};
85+
WalletDescriptor w_desc{std::move(desc), 0, 0, 0, 0};
86+
BOOST_CHECK(wallet.AddWalletDescriptor(w_desc, provider, "", false));
87+
// Wallet should update the non-range descriptor successfully
88+
BOOST_CHECK(wallet.AddWalletDescriptor(w_desc, provider, "", false));
89+
}
90+
}
91+
7392
BOOST_FIXTURE_TEST_CASE(scan_for_wallet_transactions, TestChain100Setup)
7493
{
7594
// Cap last block file size, and mine new block in a new block file.

0 commit comments

Comments
 (0)