From 31ec95aadeeb944be8813d78541df5528d355a62 Mon Sep 17 00:00:00 2001 From: thotbot Date: Sat, 3 Jul 2021 23:55:51 +0200 Subject: [PATCH] Skip unneeded blocks in fast refresh --- src/wallet/wallet2.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index c95a4a7e9..5bd7d2ee1 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -3294,11 +3294,19 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height, { std::vector hashes; - const uint64_t checkpoint_height = m_checkpoints.get_max_height(); + // Get highest checkpoint that is lower than stop_height + uint64_t checkpoint_height = 0; + for (auto i : m_checkpoints.get_points()) { + if (i.first > stop_height) { + break; + } + checkpoint_height = i.first; + } + if ((stop_height > checkpoint_height && m_blockchain.size()-1 < checkpoint_height) && !force) { // 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) 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));