aboutsummaryrefslogtreecommitdiff
path: root/src/wallet
diff options
context:
space:
mode:
authorbrunoerg <brunoely.gc@gmail.com>2024-07-30 15:07:46 -0300
committerbrunoerg <brunoely.gc@gmail.com>2024-08-01 11:08:03 -0300
commit401cc4ec70d67ba2aa0e078d2fab214e1c40742c (patch)
tree2d45aa7d38ec7ec4894264c76c8b10040b443ed9 /src/wallet
parentf66738f79c79eb00332e64d0841937b7a1f2db0b (diff)
fuzz: improve scriptpubkeyman target
The goal of this improvement is to reduce TopUp calls which can lead to timeouts.
Diffstat (limited to 'src/wallet')
-rw-r--r--src/wallet/test/fuzz/scriptpubkeyman.cpp54
1 files changed, 19 insertions, 35 deletions
diff --git a/src/wallet/test/fuzz/scriptpubkeyman.cpp b/src/wallet/test/fuzz/scriptpubkeyman.cpp
index 1066a3c268..315efa0dca 100644
--- a/src/wallet/test/fuzz/scriptpubkeyman.cpp
+++ b/src/wallet/test/fuzz/scriptpubkeyman.cpp
@@ -94,7 +94,7 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
LOCK(wallet.cs_wallet);
wallet.SetWalletFlag(WALLET_FLAG_DESCRIPTORS);
wallet.SetLastBlockProcessed(chainstate.m_chain.Height(), chainstate.m_chain.Tip()->GetBlockHash());
- wallet.m_keypool_size = 10;
+ wallet.m_keypool_size = 1;
}
auto wallet_desc{CreateWalletDescriptor(fuzzed_data_provider)};
@@ -102,23 +102,23 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
auto spk_manager{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
if (spk_manager == nullptr) return;
+ if (fuzzed_data_provider.ConsumeBool()) {
+ auto wallet_desc{CreateWalletDescriptor(fuzzed_data_provider)};
+ if (!wallet_desc.has_value()) {
+ return;
+ }
+ std::string error;
+ if (spk_manager->CanUpdateToWalletDescriptor(wallet_desc->first, error)) {
+ auto new_spk_manager{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
+ if (new_spk_manager != nullptr) spk_manager = new_spk_manager;
+ }
+ }
+
bool good_data{true};
- LIMITED_WHILE(good_data && fuzzed_data_provider.ConsumeBool(), 300) {
+ LIMITED_WHILE(good_data && fuzzed_data_provider.ConsumeBool(), 20) {
CallOneOf(
fuzzed_data_provider,
[&] {
- auto wallet_desc{CreateWalletDescriptor(fuzzed_data_provider)};
- if (!wallet_desc.has_value()) {
- good_data = false;
- return;
- }
- std::string error;
- if (spk_manager->CanUpdateToWalletDescriptor(wallet_desc->first, error)) {
- auto new_spk_manager{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
- if (new_spk_manager != nullptr) spk_manager = new_spk_manager;
- }
- },
- [&] {
const CScript script{ConsumeScript(fuzzed_data_provider)};
auto is_mine{spk_manager->IsMine(script)};
if (is_mine == isminetype::ISMINE_SPENDABLE) {
@@ -144,30 +144,12 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
},
[&] {
auto spks{spk_manager->GetScriptPubKeys()};
- for (const CScript& spk : spks) {
- if (fuzzed_data_provider.ConsumeBool()) {
- spk_manager->MarkUnusedAddresses(spk);
- }
+ if (!spks.empty()) {
+ auto& spk{PickValue(fuzzed_data_provider, spks)};
+ (void)spk_manager->MarkUnusedAddresses(spk);
}
},
[&] {
- CKey key{ConsumePrivateKey(fuzzed_data_provider, /*compressed=*/fuzzed_data_provider.ConsumeBool())};
- if (!key.IsValid()) {
- good_data = false;
- return;
- }
- spk_manager->AddDescriptorKey(key, key.GetPubKey());
- spk_manager->TopUp();
- LOCK(spk_manager->cs_desc_man);
- auto particular_key{spk_manager->GetKey(key.GetPubKey().GetID())};
- assert(*particular_key == key);
- assert(spk_manager->HasPrivKey(key.GetPubKey().GetID()));
- },
- [&] {
- std::string descriptor;
- (void)spk_manager->GetDescriptorString(descriptor, /*priv=*/fuzzed_data_provider.ConsumeBool());
- },
- [&] {
LOCK(spk_manager->cs_desc_man);
auto wallet_desc{spk_manager->GetWalletDescriptor()};
if (wallet_desc.descriptor->IsSingleType()) {
@@ -209,6 +191,8 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
);
}
+ std::string descriptor;
+ (void)spk_manager->GetDescriptorString(descriptor, /*priv=*/fuzzed_data_provider.ConsumeBool());
(void)spk_manager->GetEndRange();
(void)spk_manager->GetKeyPoolSize();
}