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:
parent
03752444cd
commit
97b0753923
1 changed files with 21 additions and 4 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue