|
|
|
@ -2284,7 +2284,7 @@ bool Blockchain::get_transactions(const t_ids_container& txs_ids, t_tx_container
|
|
|
|
|
// Find the split point between us and foreign blockchain and return
|
|
|
|
|
// (by reference) the most recent common block hash along with up to
|
|
|
|
|
// BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT additional (more recent) hashes.
|
|
|
|
|
bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height) const
|
|
|
|
|
bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height, bool clip_pruned) const
|
|
|
|
|
{
|
|
|
|
|
LOG_PRINT_L3("Blockchain::" << __func__);
|
|
|
|
|
CRITICAL_REGION_LOCAL(m_blockchain_lock);
|
|
|
|
@ -2297,9 +2297,13 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc
|
|
|
|
|
|
|
|
|
|
m_db->block_txn_start(true);
|
|
|
|
|
current_height = get_current_blockchain_height();
|
|
|
|
|
const uint32_t pruning_seed = get_blockchain_pruning_seed();
|
|
|
|
|
start_height = tools::get_next_unpruned_block_height(start_height, current_height, pruning_seed);
|
|
|
|
|
uint64_t stop_height = tools::get_next_pruned_block_height(start_height, current_height, pruning_seed);
|
|
|
|
|
uint64_t stop_height = current_height;
|
|
|
|
|
if (clip_pruned)
|
|
|
|
|
{
|
|
|
|
|
const uint32_t pruning_seed = get_blockchain_pruning_seed();
|
|
|
|
|
start_height = tools::get_next_unpruned_block_height(start_height, current_height, pruning_seed);
|
|
|
|
|
stop_height = tools::get_next_pruned_block_height(start_height, current_height, pruning_seed);
|
|
|
|
|
}
|
|
|
|
|
size_t count = 0;
|
|
|
|
|
hashes.reserve(std::min((size_t)(stop_height - start_height), (size_t)BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT));
|
|
|
|
|
for(size_t i = start_height; i < stop_height && count < BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT; i++, count++)
|
|
|
|
@ -2316,7 +2320,7 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc
|
|
|
|
|
LOG_PRINT_L3("Blockchain::" << __func__);
|
|
|
|
|
CRITICAL_REGION_LOCAL(m_blockchain_lock);
|
|
|
|
|
|
|
|
|
|
bool result = find_blockchain_supplement(qblock_ids, resp.m_block_ids, resp.start_height, resp.total_height);
|
|
|
|
|
bool result = find_blockchain_supplement(qblock_ids, resp.m_block_ids, resp.start_height, resp.total_height, true);
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
|
|
|
|
cryptonote::difficulty_type wide_cumulative_difficulty = m_db->get_block_cumulative_difficulty(resp.total_height - 1);
|
|
|
|
|