mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
wallet: Refactor function for single DescSPKM setup
We will need access to a function that sets up a singular DescriptorSPKM, so refactor this out of the multiple DescriptorSPKM setup function.
This commit is contained in:
parent
3b09d0eb7f
commit
54e74f46ea
2 changed files with 23 additions and 13 deletions
|
@ -3628,6 +3628,26 @@ DescriptorScriptPubKeyMan& CWallet::LoadDescriptorScriptPubKeyMan(uint256 id, Wa
|
||||||
return *spk_manager;
|
return *spk_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DescriptorScriptPubKeyMan& CWallet::SetupDescriptorScriptPubKeyMan(WalletBatch& batch, const CExtKey& master_key, const OutputType& output_type, bool internal)
|
||||||
|
{
|
||||||
|
AssertLockHeld(cs_wallet);
|
||||||
|
auto spk_manager = std::unique_ptr<DescriptorScriptPubKeyMan>(new DescriptorScriptPubKeyMan(*this, m_keypool_size));
|
||||||
|
if (IsCrypted()) {
|
||||||
|
if (IsLocked()) {
|
||||||
|
throw std::runtime_error(std::string(__func__) + ": Wallet is locked, cannot setup new descriptors");
|
||||||
|
}
|
||||||
|
if (!spk_manager->CheckDecryptionKey(vMasterKey) && !spk_manager->Encrypt(vMasterKey, &batch)) {
|
||||||
|
throw std::runtime_error(std::string(__func__) + ": Could not encrypt new descriptors");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spk_manager->SetupDescriptorGeneration(batch, master_key, output_type, internal);
|
||||||
|
DescriptorScriptPubKeyMan* out = spk_manager.get();
|
||||||
|
uint256 id = spk_manager->GetID();
|
||||||
|
AddScriptPubKeyMan(id, std::move(spk_manager));
|
||||||
|
AddActiveScriptPubKeyManWithDb(batch, id, output_type, internal);
|
||||||
|
return *out;
|
||||||
|
}
|
||||||
|
|
||||||
void CWallet::SetupDescriptorScriptPubKeyMans(const CExtKey& master_key)
|
void CWallet::SetupDescriptorScriptPubKeyMans(const CExtKey& master_key)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_wallet);
|
AssertLockHeld(cs_wallet);
|
||||||
|
@ -3638,19 +3658,7 @@ void CWallet::SetupDescriptorScriptPubKeyMans(const CExtKey& master_key)
|
||||||
|
|
||||||
for (bool internal : {false, true}) {
|
for (bool internal : {false, true}) {
|
||||||
for (OutputType t : OUTPUT_TYPES) {
|
for (OutputType t : OUTPUT_TYPES) {
|
||||||
auto spk_manager = std::unique_ptr<DescriptorScriptPubKeyMan>(new DescriptorScriptPubKeyMan(*this, m_keypool_size));
|
SetupDescriptorScriptPubKeyMan(batch, master_key, t, internal);
|
||||||
if (IsCrypted()) {
|
|
||||||
if (IsLocked()) {
|
|
||||||
throw std::runtime_error(std::string(__func__) + ": Wallet is locked, cannot setup new descriptors");
|
|
||||||
}
|
|
||||||
if (!spk_manager->CheckDecryptionKey(vMasterKey) && !spk_manager->Encrypt(vMasterKey, &batch)) {
|
|
||||||
throw std::runtime_error(std::string(__func__) + ": Could not encrypt new descriptors");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
spk_manager->SetupDescriptorGeneration(batch, master_key, t, internal);
|
|
||||||
uint256 id = spk_manager->GetID();
|
|
||||||
AddScriptPubKeyMan(id, std::move(spk_manager));
|
|
||||||
AddActiveScriptPubKeyManWithDb(batch, id, t, internal);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1018,6 +1018,8 @@ public:
|
||||||
//! @param[in] internal Whether this ScriptPubKeyMan provides change addresses
|
//! @param[in] internal Whether this ScriptPubKeyMan provides change addresses
|
||||||
void DeactivateScriptPubKeyMan(uint256 id, OutputType type, bool internal);
|
void DeactivateScriptPubKeyMan(uint256 id, OutputType type, bool internal);
|
||||||
|
|
||||||
|
//! Create new DescriptorScriptPubKeyMan and add it to the wallet
|
||||||
|
DescriptorScriptPubKeyMan& SetupDescriptorScriptPubKeyMan(WalletBatch& batch, const CExtKey& master_key, const OutputType& output_type, bool internal) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
//! Create new DescriptorScriptPubKeyMans and add them to the wallet
|
//! Create new DescriptorScriptPubKeyMans and add them to the wallet
|
||||||
void SetupDescriptorScriptPubKeyMans(const CExtKey& master_key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
void SetupDescriptorScriptPubKeyMans(const CExtKey& master_key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
void SetupDescriptorScriptPubKeyMans() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
void SetupDescriptorScriptPubKeyMans() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
|
|
Loading…
Add table
Reference in a new issue