0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-08 10:31:50 -05:00

wallet: clean redundancies in DelAddressBook

1) Encode destination only once (instead of three).
2) Fail if the entry's linked data cannot be removed.
3) Don't remove entry from memory if db write fail.
4) Notify GUI only if removal succeeded
This commit is contained in:
furszy 2022-07-09 21:30:57 -03:00
parent 03752444cd
commit 97b0753923
No known key found for this signature in database
GPG key ID: 5DD23CCC686AA623

View file

@ -2385,6 +2385,7 @@ bool CWallet::SetAddressBook(const CTxDestination& address, const std::string& s
bool CWallet::DelAddressBook(const CTxDestination& address)
{
const std::string& dest = EncodeDestination(address);
WalletBatch batch(GetDatabase());
{
LOCK(cs_wallet);
@ -2396,14 +2397,30 @@ bool CWallet::DelAddressBook(const CTxDestination& address)
return false;
}
// Delete data rows associated with this address
batch.EraseAddressData(address);
if (!batch.EraseAddressData(address)) {
WalletLogPrintf("Error: cannot erase address book entry data\n");
return false;
}
// Delete purpose entry
if (!batch.ErasePurpose(dest)) {
WalletLogPrintf("Error: cannot erase address book entry purpose\n");
return false;
}
// Delete name entry
if (!batch.EraseName(dest)) {
WalletLogPrintf("Error: cannot erase address book entry name\n");
return false;
}
// finally, remove it from the map
m_address_book.erase(address);
}
// All good, signal changes
NotifyAddressBookChanged(address, "", /*is_mine=*/false, AddressPurpose::SEND, CT_DELETED);
batch.ErasePurpose(EncodeDestination(address));
return batch.EraseName(EncodeDestination(address));
return true;
}
size_t CWallet::KeypoolCountExternalKeys() const