diff options
author | Sjors Provoost <sjors@sprovoost.nl> | 2024-08-20 10:45:04 +0200 |
---|---|---|
committer | Sjors Provoost <sjors@sprovoost.nl> | 2024-08-20 18:51:37 +0200 |
commit | 59ff17e5af4e382cbe16f183767beef1bdcd9131 (patch) | |
tree | b0680f22dfb41f8fba0139b23ef7e55e8e368924 /src | |
parent | e929054e12210353812f440c685a23329e7040f7 (diff) |
miner: adjust clock to timewarp rule
Diffstat (limited to 'src')
-rw-r--r-- | src/consensus/consensus.h | 7 | ||||
-rw-r--r-- | src/node/miner.cpp | 8 | ||||
-rw-r--r-- | src/validation.cpp | 7 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 384f70bc10..cffe9cdafd 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -27,4 +27,11 @@ static const size_t MIN_SERIALIZABLE_TRANSACTION_WEIGHT = WITNESS_SCALE_FACTOR * /** Interpret sequence numbers as relative lock-time constraints. */ static constexpr unsigned int LOCKTIME_VERIFY_SEQUENCE = (1 << 0); +/** + * Maximum number of seconds that the timestamp of the first + * block of a difficulty adjustment period is allowed to + * be earlier than the last block of the previous period (BIP94). + */ +static constexpr int64_t MAX_TIMEWARP = 600; + #endif // BITCOIN_CONSENSUS_CONSENSUS_H diff --git a/src/node/miner.cpp b/src/node/miner.cpp index fa2d979b86..5c476e154f 100644 --- a/src/node/miner.cpp +++ b/src/node/miner.cpp @@ -33,6 +33,14 @@ int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParam int64_t nOldTime = pblock->nTime; int64_t nNewTime{std::max<int64_t>(pindexPrev->GetMedianTimePast() + 1, TicksSinceEpoch<std::chrono::seconds>(NodeClock::now()))}; + if (consensusParams.enforce_BIP94) { + // Height of block to be mined. + const int height{pindexPrev->nHeight + 1}; + if (height % consensusParams.DifficultyAdjustmentInterval() == 0) { + nNewTime = std::max<int64_t>(nNewTime, pindexPrev->GetBlockTime() - MAX_TIMEWARP); + } + } + if (nOldTime < nNewTime) { pblock->nTime = nNewTime; } diff --git a/src/validation.cpp b/src/validation.cpp index 8c80e35c01..8f75b2e30a 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -107,13 +107,6 @@ const std::vector<std::string> CHECKLEVEL_DOC { * */ static constexpr int PRUNE_LOCK_BUFFER{10}; -/** - * Maximum number of seconds that the timestamp of the first - * block of a difficulty adjustment period is allowed to - * be earlier than the last block of the previous period (BIP94). - */ -static constexpr int64_t MAX_TIMEWARP = 600; - GlobalMutex g_best_block_mutex; std::condition_variable g_best_block_cv; uint256 g_best_block; |