Merge pull request #377

378d004 blockchain: mark two places where the new code differs from the old (moneromooo-monero)
73d42a7 blockchain: update cumulative size after block addition (moneromooo-monero)
4a44377 blockchain: remove dead code (moneromooo-monero)
3f9089a blockchain: do not try to add a tx the pool when it was nor taken out (moneromooo-monero)
769d5ef blockchain: fix off by 1 in timestamp median calculations (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-08-17 10:19:25 +02:00
commit 7aec568e6d
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD

View file

@ -2218,7 +2218,7 @@ bool Blockchain::check_block_timestamp(const block& b) const
} }
// if not enough blocks, no proper median yet, return true // if not enough blocks, no proper median yet, return true
if(m_db->height() < BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW + 1) if(m_db->height() < BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW)
{ {
return true; return true;
} }
@ -2227,9 +2227,7 @@ bool Blockchain::check_block_timestamp(const block& b) const
auto h = m_db->height(); auto h = m_db->height();
// need most recent 60 blocks, get index of first of those // need most recent 60 blocks, get index of first of those
// using +1 because BlockchainDB::height() returns the index of the top block, size_t offset = h - BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW;
// not the size of the blockchain (0-indexed)
size_t offset = h - BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW - 1;
for(;offset < h; ++offset) for(;offset < h; ++offset)
{ {
timestamps.push_back(m_db->get_block_timestamp(offset)); timestamps.push_back(m_db->get_block_timestamp(offset));
@ -2367,8 +2365,11 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
uint64_t t_pool = 0; uint64_t t_pool = 0;
uint64_t t_dblspnd = 0; uint64_t t_dblspnd = 0;
uint64_t t_cc; uint64_t t_cc;
bool add_tx_to_pool = false;
TIME_MEASURE_FINISH(t3); TIME_MEASURE_FINISH(t3);
// XXX old code adds miner tx here
int tx_index = 0; int tx_index = 0;
// Iterate over the block's transaction hashes, grabbing each // Iterate over the block's transaction hashes, grabbing each
// from the tx_pool and validating them. Each is then added // from the tx_pool and validating them. Each is then added
@ -2380,6 +2381,7 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
uint64_t fee = 0; uint64_t fee = 0;
TIME_MEASURE_START(aa); TIME_MEASURE_START(aa);
// XXX old code does not check whether tx exists
if (m_db->tx_exists(tx_id)) if (m_db->tx_exists(tx_id))
{ {
LOG_PRINT_L1("Block with id: " << id << " attempting to add transaction already in blockchain with id: " << tx_id); LOG_PRINT_L1("Block with id: " << id << " attempting to add transaction already in blockchain with id: " << tx_id);
@ -2432,6 +2434,7 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
add_block_as_invalid(bl, id); add_block_as_invalid(bl, id);
LOG_PRINT_L1("Block with id " << id << " added as invalid because of wrong inputs in transactions"); LOG_PRINT_L1("Block with id " << id << " added as invalid because of wrong inputs in transactions");
bvc.m_verifivation_failed = true; bvc.m_verifivation_failed = true;
add_tx_to_pool = true;
break; break;
} }
} }
@ -2447,6 +2450,7 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
add_block_as_invalid(bl, id); add_block_as_invalid(bl, id);
LOG_PRINT_L1("Block with id " << id << " added as invalid because of wrong inputs in transactions"); LOG_PRINT_L1("Block with id " << id << " added as invalid because of wrong inputs in transactions");
bvc.m_verifivation_failed = true; bvc.m_verifivation_failed = true;
add_tx_to_pool = true;
break; break;
} }
} }
@ -2469,7 +2473,6 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
} }
TIME_MEASURE_FINISH(vmt); TIME_MEASURE_FINISH(vmt);
block_extended_info bei = boost::value_initialized<block_extended_info>();
size_t block_size; size_t block_size;
difficulty_type cumulative_difficulty; difficulty_type cumulative_difficulty;
@ -2480,8 +2483,6 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
if(m_db->height()) if(m_db->height())
cumulative_difficulty += m_db->get_block_cumulative_difficulty(m_db->height() - 1); cumulative_difficulty += m_db->get_block_cumulative_difficulty(m_db->height() - 1);
update_next_cumulative_size_limit();
TIME_MEASURE_FINISH(block_processing_time); TIME_MEASURE_FINISH(block_processing_time);
if(precomputed) if(precomputed)
block_processing_time += m_fake_pow_calc_time; block_processing_time += m_fake_pow_calc_time;
@ -2505,7 +2506,7 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
// if we failed for any reason to verify the block, return taken // if we failed for any reason to verify the block, return taken
// transactions to the tx_pool. // transactions to the tx_pool.
if (bvc.m_verifivation_failed || !add_success) if ((bvc.m_verifivation_failed && add_tx_to_pool) || !add_success)
{ {
// return taken transactions to transaction pool // return taken transactions to transaction pool
for (auto& tx : txs) for (auto& tx : txs)
@ -2521,6 +2522,8 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
TIME_MEASURE_FINISH(addblock); TIME_MEASURE_FINISH(addblock);
update_next_cumulative_size_limit();
LOG_PRINT_L1("+++++ BLOCK SUCCESSFULLY ADDED" << std::endl << "id:\t" << id << std::endl << "PoW:\t" << proof_of_work << std::endl << "HEIGHT " << new_height << ", difficulty:\t" << current_diffic << std::endl << "block reward: " << print_money(fee_summary + base_reward) << "(" << print_money(base_reward) << " + " << print_money(fee_summary) << "), coinbase_blob_size: " << coinbase_blob_size << ", cumulative size: " << cumulative_block_size << ", " << block_processing_time << "(" << target_calculating_time << "/" << longhash_calculating_time << ")ms"); LOG_PRINT_L1("+++++ BLOCK SUCCESSFULLY ADDED" << std::endl << "id:\t" << id << std::endl << "PoW:\t" << proof_of_work << std::endl << "HEIGHT " << new_height << ", difficulty:\t" << current_diffic << std::endl << "block reward: " << print_money(fee_summary + base_reward) << "(" << print_money(base_reward) << " + " << print_money(fee_summary) << "), coinbase_blob_size: " << coinbase_blob_size << ", cumulative size: " << cumulative_block_size << ", " << block_processing_time << "(" << target_calculating_time << "/" << longhash_calculating_time << ")ms");
if(m_show_time_stats) if(m_show_time_stats)
{ {