Skip to content

Commit

Permalink
wallet: Remove chainStateFlushed
Browse files Browse the repository at this point in the history
chainStateFlushed is no longer needed since the best block is updated
after a block is scanned. Since the chainstate being flushed does not
necessarily coincide with the wallet having processed said block, it
does not entirely make sense for the wallet to be recording that block
as its best block, and this can cause race conditions where some blocks
are not processed. Thus, remove this notification.
  • Loading branch information
achow101 committed Nov 19, 2024
1 parent 151c733 commit d4c7013
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 18 deletions.
16 changes: 0 additions & 16 deletions src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -642,15 +642,6 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
return false;
}

void CWallet::chainStateFlushed(ChainstateRole role, const CBlockLocator& loc)
{
// Don't update the best block until the chain is attached so that in case of a shutdown,
// the rescan will be restarted at next startup.
if (m_attaching_chain || role == ChainstateRole::BACKGROUND) {
return;
}
}

void CWallet::SetBestBlock(int block_height, uint256 block_hash)
{
AssertLockHeld(cs_wallet);
Expand Down Expand Up @@ -3279,11 +3270,6 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
// be pending on the validation-side until lock release. It's likely to have
// block processing duplicata (if rescan block range overlaps with notification one)
// but we guarantee at least than wallet state is correct after notifications delivery.
// However, chainStateFlushed notifications are ignored until the rescan is finished
// so that in case of a shutdown event, the rescan will be repeated at the next start.
// This is temporary until rescan and notifications delivery are unified under same
// interface.
walletInstance->m_attaching_chain = true; //ignores chainStateFlushed notifications
walletInstance->m_chain_notifications_handler = walletInstance->chain().handleNotifications(walletInstance);

const std::optional<int> tip_height = chain.getHeight();
Expand Down Expand Up @@ -3371,13 +3357,11 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
error = _("Failed to rescan the wallet during initialization");
return false;
}
walletInstance->m_attaching_chain = false;
// Set and update the best block record
walletInstance->SetBestBlock(*scan_res.last_scanned_height, scan_res.last_scanned_block);
}
walletInstance->GetDatabase().IncrementUpdateCounter();
}
walletInstance->m_attaching_chain = false;

return true;
}
Expand Down
2 changes: 0 additions & 2 deletions src/wallet/wallet.h
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati

std::atomic<bool> fAbortRescan{false};
std::atomic<bool> fScanningWallet{false}; // controlled by WalletRescanReserver
std::atomic<bool> m_attaching_chain{false};
std::atomic<bool> m_scanning_with_passphrase{false};
std::atomic<SteadyClock::time_point> m_scanning_start{SteadyClock::time_point{}};
std::atomic<double> m_scanning_progress{0};
Expand Down Expand Up @@ -812,7 +811,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati
/** should probably be renamed to IsRelevantToMe */
bool IsFromMe(const CTransaction& tx) const;
CAmount GetDebit(const CTransaction& tx, const isminefilter& filter) const;
void chainStateFlushed(ChainstateRole role, const CBlockLocator& loc) override;

DBErrors LoadWallet();

Expand Down

0 comments on commit d4c7013

Please sign in to comment.