Skip to content

Commit f17945b

Browse files
committed
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.
1 parent 663a9ca commit f17945b

File tree

14 files changed

+62
-75
lines changed

14 files changed

+62
-75
lines changed

src/bench/wallet_ismine.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ static void WalletIsMine(benchmark::Bench& bench, int num_combo = 0)
5050
std::string error;
5151
std::vector<std::unique_ptr<Descriptor>> desc = Parse("combo(" + EncodeSecret(key) + ")", keys, error, /*require_checksum=*/false);
5252
WalletDescriptor w_desc(std::move(desc.at(0)), /*creation_time=*/0, /*range_start=*/0, /*range_end=*/0, /*next_index=*/0);
53-
auto spk_manager = *Assert(wallet->AddWalletDescriptor(w_desc, keys, /*label=*/"", /*internal=*/false));
54-
assert(spk_manager);
53+
Assert(wallet->AddWalletDescriptor(w_desc, keys, /*label=*/"", /*internal=*/false));
5554
}
5655
}
5756

src/qt/test/wallettests.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,7 @@ std::shared_ptr<CWallet> SetupDescriptorsWallet(interfaces::Node& node, TestChai
215215
assert(descs.size() == 1);
216216
auto& desc = descs.at(0);
217217
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
218-
auto spk_manager = *Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
219-
assert(spk_manager);
218+
Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
220219
CTxDestination dest = GetDestinationForKey(test.coinbaseKey.GetPubKey(), wallet->m_default_address_type);
221220
wallet->SetAddressBook(dest, "", wallet::AddressPurpose::RECEIVE);
222221
wallet->SetLastBlockProcessed(105, WITH_LOCK(node.context()->chainman->GetMutex(), return node.context()->chainman->ActiveChain().Tip()->GetBlockHash()));

src/test/fuzz/util/wallet.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@ struct FuzzedWallet {
5959
WalletDescriptor w_desc{std::move(parsed_desc), /*creation_time=*/0, /*range_start=*/0, /*range_end=*/1, /*next_index=*/0};
6060
assert(!wallet->GetDescriptorScriptPubKeyMan(w_desc));
6161
LOCK(wallet->cs_wallet);
62-
auto spk_manager = *Assert(wallet->AddWalletDescriptor(w_desc, keys, /*label=*/"", internal));
63-
assert(spk_manager);
64-
wallet->AddActiveScriptPubKeyMan(spk_manager->GetID(), *Assert(w_desc.descriptor->GetOutputType()), internal);
62+
auto& spk_manager = Assert(wallet->AddWalletDescriptor(w_desc, keys, /*label=*/"", internal))->get();
63+
wallet->AddActiveScriptPubKeyMan(spk_manager.GetID(), *Assert(w_desc.descriptor->GetOutputType()), internal);
6564
}
6665
}
6766
}

src/wallet/rpc/backup.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -263,25 +263,21 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c
263263
auto spk_manager_res = wallet.AddWalletDescriptor(w_desc, keys, label, desc_internal);
264264

265265
if (!spk_manager_res) {
266-
throw JSONRPCError(RPC_INVALID_PARAMETER, util::ErrorString(spk_manager_res).original);
266+
throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Could not add descriptor '%s': %s", descriptor, util::ErrorString(spk_manager_res).original));
267267
}
268268

269-
auto spk_manager = spk_manager_res.value();
270-
271-
if (spk_manager == nullptr) {
272-
throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Could not add descriptor '%s'", descriptor));
273-
}
269+
auto& spk_manager = spk_manager_res.value().get();
274270

275271
// Set descriptor as active if necessary
276272
if (active) {
277273
if (!w_desc.descriptor->GetOutputType()) {
278274
warnings.push_back("Unknown output type, cannot set descriptor to active.");
279275
} else {
280-
wallet.AddActiveScriptPubKeyMan(spk_manager->GetID(), *w_desc.descriptor->GetOutputType(), desc_internal);
276+
wallet.AddActiveScriptPubKeyMan(spk_manager.GetID(), *w_desc.descriptor->GetOutputType(), desc_internal);
281277
}
282278
} else {
283279
if (w_desc.descriptor->GetOutputType()) {
284-
wallet.DeactivateScriptPubKeyMan(spk_manager->GetID(), *w_desc.descriptor->GetOutputType(), desc_internal);
280+
wallet.DeactivateScriptPubKeyMan(spk_manager.GetID(), *w_desc.descriptor->GetOutputType(), desc_internal);
285281
}
286282
}
287283
}

src/wallet/test/fuzz/scriptpubkeyman.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,12 @@ static std::optional<std::pair<WalletDescriptor, FlatSigningProvider>> CreateWal
7777
return std::make_pair(w_desc, keys);
7878
}
7979

80-
static DescriptorScriptPubKeyMan* CreateDescriptor(WalletDescriptor& wallet_desc, FlatSigningProvider& keys, CWallet& keystore)
80+
static std::optional<std::reference_wrapper<DescriptorScriptPubKeyMan>> CreateDescriptor(WalletDescriptor& wallet_desc, FlatSigningProvider& keys, CWallet& keystore)
8181
{
8282
LOCK(keystore.cs_wallet);
83-
DescriptorScriptPubKeyMan* descriptor_spk_manager = nullptr;
84-
auto spk_manager = *Assert(keystore.AddWalletDescriptor(wallet_desc, keys, /*label=*/"", /*internal=*/false));
85-
if (spk_manager) {
86-
descriptor_spk_manager = dynamic_cast<DescriptorScriptPubKeyMan*>(spk_manager);
87-
}
88-
return descriptor_spk_manager;
83+
auto spk_manager_res = keystore.AddWalletDescriptor(wallet_desc, keys, /*label=*/"", /*internal=*/false);
84+
if (!spk_manager_res) return std::nullopt;
85+
return spk_manager_res.value();
8986
};
9087

9188
FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
@@ -106,8 +103,9 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
106103

107104
auto wallet_desc{CreateWalletDescriptor(fuzzed_data_provider)};
108105
if (!wallet_desc.has_value()) return;
109-
auto spk_manager{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
110-
if (spk_manager == nullptr) return;
106+
auto spk_manager_res{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
107+
if (spk_manager_res == std::nullopt) return;
108+
auto spk_manager = &spk_manager_res->get();
111109

112110
if (fuzzed_data_provider.ConsumeBool()) {
113111
auto wallet_desc{CreateWalletDescriptor(fuzzed_data_provider)};
@@ -117,7 +115,7 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
117115
std::string error;
118116
if (spk_manager->CanUpdateToWalletDescriptor(wallet_desc->first, error)) {
119117
auto new_spk_manager{CreateDescriptor(wallet_desc->first, wallet_desc->second, wallet)};
120-
if (new_spk_manager != nullptr) spk_manager = new_spk_manager;
118+
if (new_spk_manager != std::nullopt) spk_manager = &new_spk_manager->get();
121119
}
122120
}
123121

src/wallet/test/ismine_tests.cpp

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
4444
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
4545

4646
scriptPubKey = GetScriptForRawPubKey(pubkeys[0]);
47-
result = spk_manager->IsMine(scriptPubKey);
47+
result = spk_manager->get().IsMine(scriptPubKey);
4848
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
4949
}
5050

@@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
5656
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
5757

5858
scriptPubKey = GetScriptForRawPubKey(uncompressedPubkey);
59-
result = spk_manager->IsMine(scriptPubKey);
59+
result = spk_manager->get().IsMine(scriptPubKey);
6060
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
6161
}
6262

@@ -68,7 +68,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
6868
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
6969

7070
scriptPubKey = GetScriptForDestination(PKHash(pubkeys[0]));
71-
result = spk_manager->IsMine(scriptPubKey);
71+
result = spk_manager->get().IsMine(scriptPubKey);
7272
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
7373
}
7474

@@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
8080
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
8181

8282
scriptPubKey = GetScriptForDestination(PKHash(uncompressedPubkey));
83-
result = spk_manager->IsMine(scriptPubKey);
83+
result = spk_manager->get().IsMine(scriptPubKey);
8484
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
8585
}
8686

@@ -93,7 +93,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
9393

9494
CScript redeemScript = GetScriptForDestination(PKHash(pubkeys[0]));
9595
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
96-
result = spk_manager->IsMine(scriptPubKey);
96+
result = spk_manager->get().IsMine(scriptPubKey);
9797
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
9898
}
9999

@@ -103,7 +103,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
103103
std::string desc_str = "sh(sh(" + EncodeSecret(keys[0]) + "))";
104104

105105
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
106-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
106+
BOOST_CHECK(!spk_manager.has_value());
107107
}
108108

109109
// (P2PKH inside) P2SH inside P2WSH (invalid) - Descriptor
@@ -112,7 +112,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
112112
std::string desc_str = "wsh(sh(" + EncodeSecret(keys[0]) + "))";
113113

114114
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
115-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
115+
BOOST_CHECK(!spk_manager.has_value());
116116
}
117117

118118
// P2WPKH inside P2WSH (invalid) - Descriptor
@@ -121,7 +121,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
121121
std::string desc_str = "wsh(wpkh(" + EncodeSecret(keys[0]) + "))";
122122

123123
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
124-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
124+
BOOST_CHECK(!spk_manager.has_value());
125125
}
126126

127127
// (P2PKH inside) P2WSH inside P2WSH (invalid) - Descriptor
@@ -130,7 +130,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
130130
std::string desc_str = "wsh(wsh(" + EncodeSecret(keys[0]) + "))";
131131

132132
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
133-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
133+
BOOST_CHECK(!spk_manager.has_value());
134134
}
135135

136136
// P2WPKH compressed - Descriptor
@@ -141,7 +141,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
141141
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
142142

143143
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0]));
144-
result = spk_manager->IsMine(scriptPubKey);
144+
result = spk_manager->get().IsMine(scriptPubKey);
145145
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
146146
}
147147

@@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
151151
std::string desc_str = "wpkh(" + EncodeSecret(uncompressedKey) + ")";
152152

153153
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
154-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
154+
BOOST_CHECK(!spk_manager.has_value());
155155
}
156156

157157
// scriptPubKey multisig - Descriptor
@@ -162,7 +162,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
162162
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
163163

164164
scriptPubKey = GetScriptForMultisig(2, {uncompressedPubkey, pubkeys[1]});
165-
result = spk_manager->IsMine(scriptPubKey);
165+
result = spk_manager->get().IsMine(scriptPubKey);
166166
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
167167
}
168168

@@ -176,7 +176,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
176176

177177
CScript redeemScript = GetScriptForMultisig(2, {uncompressedPubkey, pubkeys[1]});
178178
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
179-
result = spk_manager->IsMine(scriptPubKey);
179+
result = spk_manager->get().IsMine(scriptPubKey);
180180
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
181181
}
182182

@@ -190,7 +190,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
190190

191191
CScript redeemScript = GetScriptForMultisig(2, {pubkeys[0], pubkeys[1]});
192192
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(redeemScript));
193-
result = spk_manager->IsMine(scriptPubKey);
193+
result = spk_manager->get().IsMine(scriptPubKey);
194194
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
195195
}
196196

@@ -201,7 +201,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
201201
std::string desc_str = "wsh(multi(2," + EncodeSecret(uncompressedKey) + "," + EncodeSecret(keys[1]) + "))";
202202

203203
auto spk_manager = CreateDescriptor(keystore, desc_str, false);
204-
BOOST_CHECK_EQUAL(spk_manager, nullptr);
204+
BOOST_CHECK(!spk_manager.has_value());
205205
}
206206

207207
// P2WSH multisig wrapped in P2SH - Descriptor
@@ -215,7 +215,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
215215
CScript witnessScript = GetScriptForMultisig(2, {pubkeys[0], pubkeys[1]});
216216
CScript redeemScript = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
217217
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
218-
result = spk_manager->IsMine(scriptPubKey);
218+
result = spk_manager->get().IsMine(scriptPubKey);
219219
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
220220
}
221221

@@ -228,28 +228,28 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
228228
auto spk_manager = CreateDescriptor(keystore, desc_str, true);
229229

230230
// Test P2PK
231-
result = spk_manager->IsMine(GetScriptForRawPubKey(pubkeys[0]));
231+
result = spk_manager->get().IsMine(GetScriptForRawPubKey(pubkeys[0]));
232232
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
233233

234234
// Test P2PKH
235-
result = spk_manager->IsMine(GetScriptForDestination(PKHash(pubkeys[0])));
235+
result = spk_manager->get().IsMine(GetScriptForDestination(PKHash(pubkeys[0])));
236236
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
237237

238238
// Test P2SH (combo descriptor does not describe P2SH)
239239
CScript redeemScript = GetScriptForDestination(PKHash(pubkeys[0]));
240240
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
241-
result = spk_manager->IsMine(scriptPubKey);
241+
result = spk_manager->get().IsMine(scriptPubKey);
242242
BOOST_CHECK_EQUAL(result, ISMINE_NO);
243243

244244
// Test P2WPKH
245245
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0]));
246-
result = spk_manager->IsMine(scriptPubKey);
246+
result = spk_manager->get().IsMine(scriptPubKey);
247247
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
248248

249249
// P2SH-P2WPKH output
250250
redeemScript = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0]));
251251
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
252-
result = spk_manager->IsMine(scriptPubKey);
252+
result = spk_manager->get().IsMine(scriptPubKey);
253253
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
254254

255255
// Test P2TR (combo descriptor does not describe P2TR)
@@ -259,7 +259,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
259259
builder.Finalize(xpk);
260260
WitnessV1Taproot output = builder.GetOutput();
261261
scriptPubKey = GetScriptForDestination(output);
262-
result = spk_manager->IsMine(scriptPubKey);
262+
result = spk_manager->get().IsMine(scriptPubKey);
263263
BOOST_CHECK_EQUAL(result, ISMINE_NO);
264264
}
265265

@@ -277,7 +277,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
277277
builder.Finalize(xpk);
278278
WitnessV1Taproot output = builder.GetOutput();
279279
scriptPubKey = GetScriptForDestination(output);
280-
result = spk_manager->IsMine(scriptPubKey);
280+
result = spk_manager->get().IsMine(scriptPubKey);
281281
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
282282
}
283283
}

src/wallet/test/psbt_wallet_tests.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ static void import_descriptor(CWallet& wallet, const std::string& descriptor)
2727
assert(descs.size() == 1);
2828
auto& desc = descs.at(0);
2929
WalletDescriptor w_desc(std::move(desc), 0, 0, 10, 0);
30-
auto spk_manager = *Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
31-
assert(spk_manager);
30+
Assert(wallet.AddWalletDescriptor(w_desc, provider, "", false));
3231
}
3332

3433
BOOST_AUTO_TEST_CASE(psbt_updater_test)

src/wallet/test/scriptpubkeyman_tests.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ BOOST_AUTO_TEST_CASE(DescriptorScriptPubKeyManTests)
2525
// Verify that a SigningProvider for a pubkey is only returned if its corresponding private key is available
2626
auto key_internal = GenerateRandomKey();
2727
std::string desc_str = "tr(" + EncodeSecret(key_internal) + ",pk(" + HexStr(key_scriptpath.GetPubKey()) + "))";
28-
auto spk_man1 = dynamic_cast<DescriptorScriptPubKeyMan*>(CreateDescriptor(keystore, desc_str, true));
29-
BOOST_CHECK(spk_man1 != nullptr);
30-
auto signprov_keypath_spendable = spk_man1->GetSigningProvider(key_internal.GetPubKey());
28+
auto spk_man1_res = CreateDescriptor(keystore, desc_str, true);
29+
BOOST_CHECK(spk_man1_res.has_value());
30+
auto& spk_man1 = spk_man1_res->get();
31+
auto signprov_keypath_spendable = spk_man1.GetSigningProvider(key_internal.GetPubKey());
3132
BOOST_CHECK(signprov_keypath_spendable != nullptr);
3233

3334
desc_str = "tr(" + HexStr(XOnlyPubKey::NUMS_H) + ",pk(" + HexStr(key_scriptpath.GetPubKey()) + "))";
34-
auto spk_man2 = dynamic_cast<DescriptorScriptPubKeyMan*>(CreateDescriptor(keystore, desc_str, true));
35-
BOOST_CHECK(spk_man2 != nullptr);
36-
auto signprov_keypath_nums_h = spk_man2->GetSigningProvider(XOnlyPubKey::NUMS_H.GetEvenCorrespondingCPubKey());
35+
auto spk_man2_res = CreateDescriptor(keystore, desc_str, true);
36+
BOOST_CHECK(spk_man2_res.has_value());
37+
auto& spk_man2 = spk_man1_res->get();
38+
auto signprov_keypath_nums_h = spk_man2.GetSigningProvider(XOnlyPubKey::NUMS_H.GetEvenCorrespondingCPubKey());
3739
BOOST_CHECK(signprov_keypath_nums_h == nullptr);
3840
}
3941

src/wallet/test/util.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cc
3535
assert(descs.size() == 1);
3636
auto& desc = descs.at(0);
3737
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
38-
auto spk_manager = *Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
39-
assert(spk_manager);
38+
Assert(wallet->AddWalletDescriptor(w_desc, provider, "", false));
4039
}
4140
WalletRescanReserver reserver(*wallet);
4241
reserver.reserve();
@@ -194,15 +193,15 @@ MockableDatabase& GetMockableDatabase(CWallet& wallet)
194193
return dynamic_cast<MockableDatabase&>(wallet.GetDatabase());
195194
}
196195

197-
wallet::ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success)
196+
std::optional<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>> CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success)
198197
{
199198
keystore.SetWalletFlag(WALLET_FLAG_DESCRIPTORS);
200199

201200
FlatSigningProvider keys;
202201
std::string error;
203202
auto parsed_descs = Parse(desc_str, keys, error, false);
204203
Assert(success == (!parsed_descs.empty()));
205-
if (!success) return nullptr;
204+
if (!success) return std::nullopt;
206205
auto& desc = parsed_descs.at(0);
207206

208207
const int64_t range_start = 0, range_end = 1, next_index = 0, timestamp = 1;

src/wallet/test/util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class MockableDatabase : public WalletDatabase
116116
std::unique_ptr<WalletDatabase> CreateMockableWalletDatabase(MockableData records = {});
117117
MockableDatabase& GetMockableDatabase(CWallet& wallet);
118118

119-
ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success);
119+
std::optional<std::reference_wrapper<DescriptorScriptPubKeyMan>> CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success);
120120
} // namespace wallet
121121

122122
#endif // BITCOIN_WALLET_TEST_UTIL_H

0 commit comments

Comments
 (0)