blockchain: fix long term weight addition on pop/init

This commit is contained in:
moneromooo-monero 2019-02-18 12:44:52 +00:00
parent a8e752d383
commit 1d62855044
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
2 changed files with 5 additions and 10 deletions

View file

@ -512,7 +512,8 @@ bool Blockchain::init(BlockchainDB* db, const network_type nettype, bool offline
const uint64_t nblocks = std::min<uint64_t>(m_long_term_block_weights.capacity(), db_height); const uint64_t nblocks = std::min<uint64_t>(m_long_term_block_weights.capacity(), db_height);
while (m_long_term_block_weights.size() < nblocks) while (m_long_term_block_weights.size() < nblocks)
{ {
m_long_term_block_weights.push_front(db_height - 1 - m_long_term_block_weights.size()); uint64_t weight = m_db->get_block_long_term_weight(db_height - 1 - m_long_term_block_weights.size());
m_long_term_block_weights.push_front(weight);
} }
m_long_term_block_weights_height = db_height; m_long_term_block_weights_height = db_height;
@ -3646,7 +3647,8 @@ void Blockchain::pop_from_long_term_block_weights()
if (m_long_term_block_weights_height + 1 > m_long_term_block_weights.capacity()) if (m_long_term_block_weights_height + 1 > m_long_term_block_weights.capacity())
{ {
uint64_t block_height = m_long_term_block_weights_height - m_long_term_block_weights.capacity() + 1; uint64_t block_height = m_long_term_block_weights_height - m_long_term_block_weights.capacity() + 1;
m_long_term_block_weights.push_front(block_height); uint64_t weight = m_db->get_block_long_term_weight(block_height);
m_long_term_block_weights.push_front(weight);
} }
} }
//------------------------------------------------------------------ //------------------------------------------------------------------

View file

@ -167,16 +167,9 @@ static void test(test_t t, uint64_t blocks)
if (!bc->update_next_cumulative_weight_limit()) if (!bc->update_next_cumulative_weight_limit())
{ {
fprintf(stderr, "Failed to update cumulative weight limit 2\n"); fprintf(stderr, "Failed to update cumulative weight limit\n");
exit(1); exit(1);
} }
if(0)if (!bc->update_next_cumulative_weight_limit())
{
fprintf(stderr, "Failed to update cumulative weight limit 2\n");
exit(1);
}
uint64_t last = bc->get_db().get_block_long_term_weight(bc->get_db().height() - 1);
if (last != ltw) std::cout << "Inconsistency at " << h << std::endl;
std::cout << "H " << h << ", BW " << w << ", EMBW " << effective_block_weight_median << ", LTBW " << ltw << std::endl; std::cout << "H " << h << ", BW " << w << ", EMBW " << effective_block_weight_median << ", LTBW " << ltw << std::endl;
} }
} }