mirror of
https://github.com/monero-project/monero.git
synced 2024-12-27 01:19:26 -05:00
Merge pull request #3802
a66f152f
Use median timestamp if current time renders a block invalid. (Thaer Khawaja)
This commit is contained in:
commit
b2dd94bcc0
@ -1195,6 +1195,12 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m
|
||||
b.prev_id = get_tail_id();
|
||||
b.timestamp = time(NULL);
|
||||
|
||||
uint64_t median_ts;
|
||||
if (!check_block_timestamp(b, median_ts))
|
||||
{
|
||||
b.timestamp = median_ts;
|
||||
}
|
||||
|
||||
diffic = get_difficulty_for_next_block();
|
||||
CHECK_AND_ASSERT_MES(diffic, false, "difficulty overhead.");
|
||||
|
||||
@ -3165,10 +3171,10 @@ uint64_t Blockchain::get_adjusted_time() const
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
//TODO: revisit, has changed a bit on upstream
|
||||
bool Blockchain::check_block_timestamp(std::vector<uint64_t>& timestamps, const block& b) const
|
||||
bool Blockchain::check_block_timestamp(std::vector<uint64_t>& timestamps, const block& b, uint64_t& median_ts) const
|
||||
{
|
||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||
uint64_t median_ts = epee::misc_utils::median(timestamps);
|
||||
median_ts = epee::misc_utils::median(timestamps);
|
||||
|
||||
if(b.timestamp < median_ts)
|
||||
{
|
||||
@ -3186,7 +3192,7 @@ bool Blockchain::check_block_timestamp(std::vector<uint64_t>& timestamps, const
|
||||
// true if the block's timestamp is not less than the timestamp of the
|
||||
// median of the selected blocks
|
||||
// false otherwise
|
||||
bool Blockchain::check_block_timestamp(const block& b) const
|
||||
bool Blockchain::check_block_timestamp(const block& b, uint64_t& median_ts) const
|
||||
{
|
||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||
if(b.timestamp > get_adjusted_time() + CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT)
|
||||
@ -3211,7 +3217,7 @@ bool Blockchain::check_block_timestamp(const block& b) const
|
||||
timestamps.push_back(m_db->get_block_timestamp(offset));
|
||||
}
|
||||
|
||||
return check_block_timestamp(timestamps, b);
|
||||
return check_block_timestamp(timestamps, b, median_ts);
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
void Blockchain::return_tx_to_pool(std::vector<transaction> &txs)
|
||||
|
@ -1293,10 +1293,12 @@ namespace cryptonote
|
||||
* false otherwise
|
||||
*
|
||||
* @param b the block to be checked
|
||||
* @param median_ts return-by-reference the median of timestamps
|
||||
*
|
||||
* @return true if the block's timestamp is valid, otherwise false
|
||||
*/
|
||||
bool check_block_timestamp(const block& b) const;
|
||||
bool check_block_timestamp(const block& b, uint64_t& median_ts) const;
|
||||
bool check_block_timestamp(const block& b) const { uint64_t median_ts; return check_block_timestamp(b, median_ts); }
|
||||
|
||||
/**
|
||||
* @brief checks a block's timestamp
|
||||
@ -1309,7 +1311,8 @@ namespace cryptonote
|
||||
*
|
||||
* @return true if the block's timestamp is valid, otherwise false
|
||||
*/
|
||||
bool check_block_timestamp(std::vector<uint64_t>& timestamps, const block& b) const;
|
||||
bool check_block_timestamp(std::vector<uint64_t>& timestamps, const block& b, uint64_t& median_ts) const;
|
||||
bool check_block_timestamp(std::vector<uint64_t>& timestamps, const block& b) const { uint64_t median_ts; return check_block_timestamp(timestamps, b, median_ts); }
|
||||
|
||||
/**
|
||||
* @brief get the "adjusted time"
|
||||
|
Loading…
Reference in New Issue
Block a user