wallet: Use util::Error throughout AddWalletDescriptor
32023 changed AddWalletDescriptor to return util::Error, but did not change all of the failure cases to do so. This may result in some callers continuing when there was actually an error. Unify all of the failure cases to use util::Error so that all callers handle AddWalletDescriptor errors in the same way. The encapsulated return type is changed from ScriptPubKeyMan* to std::reference_wrapper<DescriptorScriptPubKeyMan>. This avoids having a value that can be interpreted as a bool, and also removes the need to constantly dynamic_cast the returned value. The only kind of ScriptPubKeyMan that can come out of AddWalletDescriptor is a DescriptorScriptPubKeyMan anyways.
This commit is contained in:
1 parent
c461d15287
commit
785e1407b0
13 files changed
+28
-44
No files matched your search
@@ -80,12 +80,9 @@ static std::optional<std::pair<WalletDescriptor, FlatSigningProvider>> CreateWal
|
||||
static DescriptorScriptPubKeyMan* CreateDescriptor(WalletDescriptor& wallet_desc, FlatSigningProvider& keys, CWallet& keystore)
|
||||
{
|
||||
LOCK(keystore.cs_wallet);
|
||||
DescriptorScriptPubKeyMan* descriptor_spk_manager = nullptr;
|
||||
auto spk_manager = *Assert(keystore.AddWalletDescriptor(wallet_desc, keys, /*label=*/"", /*internal=*/false));
|
||||
if (spk_manager) {
|
||||
descriptor_spk_manager = dynamic_cast<DescriptorScriptPubKeyMan*>(spk_manager);
|
||||
}
|
||||
return descriptor_spk_manager;
|
||||
auto spk_manager_res = keystore.AddWalletDescriptor(wallet_desc, keys, /*label=*/"", /*internal=*/false);
|
||||
if (!spk_manager_res) return nullptr;
|
||||
return &spk_manager_res.value().get();
|
||||
};
|
||||
|
||||
FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
|
||||
|
||||
@@ -27,8 +27,7 @@ static void import_descriptor(CWallet& wallet, const std::string& descriptor)
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 10, 0);
|
||||
auto spk_manager = *Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
|
||||
assert(spk_manager);
|
||||
Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(psbt_updater_test)
|
||||
|
||||
@@ -25,13 +25,13 @@ BOOST_AUTO_TEST_CASE(DescriptorScriptPubKeyManTests)
|
||||
// Verify that a SigningProvider for a pubkey is only returned if its corresponding private key is available
|
||||
auto key_internal = GenerateRandomKey();
|
||||
std::string desc_str = "tr(" + EncodeSecret(key_internal) + ",pk(" + HexStr(key_scriptpath.GetPubKey()) + "))";
|
||||
auto spk_man1 = dynamic_cast<DescriptorScriptPubKeyMan*>(CreateDescriptor(keystore, desc_str, true));
|
||||
auto spk_man1 = CreateDescriptor(keystore, desc_str, true);
|
||||
BOOST_CHECK(spk_man1 != nullptr);
|
||||
auto signprov_keypath_spendable = spk_man1->GetSigningProvider(key_internal.GetPubKey());
|
||||
BOOST_CHECK(signprov_keypath_spendable != nullptr);
|
||||
|
||||
desc_str = "tr(" + HexStr(XOnlyPubKey::NUMS_H) + ",pk(" + HexStr(key_scriptpath.GetPubKey()) + "))";
|
||||
auto spk_man2 = dynamic_cast<DescriptorScriptPubKeyMan*>(CreateDescriptor(keystore, desc_str, true));
|
||||
auto spk_man2 = CreateDescriptor(keystore, desc_str, true);
|
||||
BOOST_CHECK(spk_man2 != nullptr);
|
||||
auto signprov_keypath_nums_h = spk_man2->GetSigningProvider(XOnlyPubKey::NUMS_H.GetEvenCorrespondingCPubKey());
|
||||
BOOST_CHECK(signprov_keypath_nums_h == nullptr);
|
||||
|
||||
@@ -35,8 +35,7 @@ std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cc
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
|
||||
auto spk_manager = *Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
|
||||
assert(spk_manager);
|
||||
Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
|
||||
}
|
||||
WalletRescanReserver reserver(*wallet);
|
||||
reserver.reserve();
|
||||
@@ -194,7 +193,7 @@ MockableDatabase& GetMockableDatabase(CWallet& wallet)
|
||||
return dynamic_cast<MockableDatabase&>(wallet.GetDatabase());
|
||||
}
|
||||
|
||||
wallet::ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success)
|
||||
wallet::DescriptorScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success)
|
||||
{
|
||||
keystore.SetWalletFlag(WALLET_FLAG_DESCRIPTORS);
|
||||
|
||||
@@ -211,6 +210,6 @@ wallet::ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string&
|
||||
|
||||
LOCK(keystore.cs_wallet);
|
||||
auto spkm = Assert(keystore.AddWalletDescriptor(w_desc, keys,/*label=*/"", /*internal=*/false));
|
||||
return spkm.value();
|
||||
return &spkm.value().get();
|
||||
};
|
||||
} // namespace wallet
|
||||
@@ -116,7 +116,7 @@ public:
|
||||
std::unique_ptr<WalletDatabase> CreateMockableWalletDatabase(MockableData records = {});
|
||||
MockableDatabase& GetMockableDatabase(CWallet& wallet);
|
||||
|
||||
ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success);
|
||||
DescriptorScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success);
|
||||
} // namespace wallet
|
||||
|
||||
#endif // BITCOIN_WALLET_TEST_UTIL_H
|
||||
@@ -66,8 +66,7 @@ static void AddKey(CWallet& wallet, const CKey& key)
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
|
||||
auto spk_manager = *Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
|
||||
assert(spk_manager);
|
||||
Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(scan_for_wallet_transactions, TestChain100Setup)
|
||||
|
||||
Reference in new issue
Block a user