diff options
author | S3RK <1466284+S3RK@users.noreply.github.com> | 2021-06-28 21:37:53 +0200 |
---|---|---|
committer | S3RK <1466284+S3RK@users.noreply.github.com> | 2021-06-28 21:44:50 +0200 |
commit | 3efaf83c75cd8dc2fa084537b8ed6715fb58c04d (patch) | |
tree | 5cfbf5602d4d1379935bee09713a555bc4970b4a /src/wallet/wallet.cpp | |
parent | 6737d9655bcf527afbd85d610d805a2d0fd28c4f (diff) | |
download | bitcoin-3efaf83c75cd8dc2fa084537b8ed6715fb58c04d.tar.xz |
wallet: deactivate descriptor
Diffstat (limited to 'src/wallet/wallet.cpp')
-rw-r--r-- | src/wallet/wallet.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 5ae490d5cc..521708e69c 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3171,6 +3171,23 @@ void CWallet::LoadActiveScriptPubKeyMan(uint256 id, OutputType type, bool intern NotifyCanGetAddressesChanged(); } +void CWallet::DeactivateScriptPubKeyMan(uint256 id, OutputType type, bool internal) +{ + auto spk_man = GetScriptPubKeyMan(type, internal); + if (spk_man != nullptr && spk_man->GetID() == id) { + WalletLogPrintf("Deactivate spkMan: id = %s, type = %d, internal = %d\n", id.ToString(), static_cast<int>(type), static_cast<int>(internal)); + WalletBatch batch(GetDatabase()); + if (!batch.EraseActiveScriptPubKeyMan(static_cast<uint8_t>(type), internal)) { + throw std::runtime_error(std::string(__func__) + ": erasing active ScriptPubKeyMan id failed"); + } + + auto& spk_mans = internal ? m_internal_spk_managers : m_external_spk_managers; + spk_mans[type] = nullptr; + } + + NotifyCanGetAddressesChanged(); +} + bool CWallet::IsLegacy() const { if (m_internal_spk_managers.count(OutputType::LEGACY) == 0) { |