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 committed 2024-02-07 18:11:51 -03:00
1 parent 03752444cd
commit 97b0753923
1 file changed
+21 -4
+21 -4
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