mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-12 02:07:39 +01:00
Check if the wallet already contains the descriptor GetDescriptorScriptPubKeyMan #32013
removed duplicate calling of GetDescriptorScriptPubKeyMan after this its significantly improved performance of importdescriptor part.
This commit is contained in:
parent
45719390a1
commit
d53f4d8b43
2 changed files with 7 additions and 8 deletions
|
@ -1575,14 +1575,6 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c
|
|||
|
||||
WalletDescriptor w_desc(std::move(parsed_desc), timestamp, range_start, range_end, next_index);
|
||||
|
||||
// Check if the wallet already contains the descriptor
|
||||
auto existing_spk_manager = wallet.GetDescriptorScriptPubKeyMan(w_desc);
|
||||
if (existing_spk_manager) {
|
||||
if (!existing_spk_manager->CanUpdateToWalletDescriptor(w_desc, error)) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, error);
|
||||
}
|
||||
}
|
||||
|
||||
// Add descriptor to the wallet
|
||||
auto spk_manager = wallet.AddWalletDescriptor(w_desc, keys, label, desc_internal);
|
||||
if (spk_manager == nullptr) {
|
||||
|
|
|
@ -69,6 +69,8 @@
|
|||
#include <wallet/types.h>
|
||||
#include <wallet/walletdb.h>
|
||||
#include <wallet/walletutil.h>
|
||||
#include <rpc/request.h>
|
||||
#include <rpc/protocol.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
|
@ -3950,8 +3952,13 @@ ScriptPubKeyMan* CWallet::AddWalletDescriptor(WalletDescriptor& desc, const Flat
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
std::string error;
|
||||
auto spk_man = GetDescriptorScriptPubKeyMan(desc);
|
||||
if (spk_man) {
|
||||
if (!spk_man->CanUpdateToWalletDescriptor(desc, error)) {
|
||||
WalletLogPrintf("Invalid param: %s\n", error);
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, error);
|
||||
}
|
||||
WalletLogPrintf("Update existing descriptor: %s\n", desc.descriptor->ToString());
|
||||
spk_man->UpdateWalletDescriptor(desc);
|
||||
} else {
|
||||
|
|
Loading…
Add table
Reference in a new issue