wallet2: use nearest checkpoint to allow fast_refresh on old accounts

This commit is contained in:
Oscar Mira 2025-05-21 00:40:57 +02:00
parent edc447eb75
commit 69345dbe29
No known key found for this signature in database
GPG key ID: B371B98C5DC32237

View file

@ -3790,11 +3790,11 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
{ {
std::vector<crypto::hash> hashes; std::vector<crypto::hash> hashes;
const uint64_t checkpoint_height = m_checkpoints.get_max_height(); const uint64_t checkpoint_height = m_checkpoints.get_nearest_checkpoint_height(stop_height);
if ((stop_height > checkpoint_height && m_blockchain.size()-1 < checkpoint_height) && !force) if ((stop_height > checkpoint_height && m_blockchain.size()-1 < checkpoint_height) && !force)
{ {
// we will drop all these, so don't bother getting them // we will drop all these, so don't bother getting them
uint64_t missing_blocks = m_checkpoints.get_max_height() - m_blockchain.size(); uint64_t missing_blocks = checkpoint_height - m_blockchain.size();
while (missing_blocks-- > 0) while (missing_blocks-- > 0)
m_blockchain.push_back(crypto::null_hash); // maybe a bit suboptimal, but deque won't do huge reallocs like vector m_blockchain.push_back(crypto::null_hash); // maybe a bit suboptimal, but deque won't do huge reallocs like vector
m_blockchain.push_back(m_checkpoints.get_points().at(checkpoint_height)); m_blockchain.push_back(m_checkpoints.get_points().at(checkpoint_height));