From 73d4a706393e6dbd6b6d6b6428f8d3233ac0a2d8 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sat, 6 Mar 2021 18:18:49 +1000 Subject: versionbits: Add support for delayed activation --- src/versionbits.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/versionbits.cpp') diff --git a/src/versionbits.cpp b/src/versionbits.cpp index af07c67ccf..11da729596 100644 --- a/src/versionbits.cpp +++ b/src/versionbits.cpp @@ -9,6 +9,7 @@ ThresholdState AbstractThresholdConditionChecker::GetStateFor(const CBlockIndex* { int nPeriod = Period(params); int nThreshold = Threshold(params); + int min_activation_height = MinActivationHeight(params); int64_t nTimeStart = BeginTime(params); int64_t nTimeTimeout = EndTime(params); @@ -78,8 +79,10 @@ ThresholdState AbstractThresholdConditionChecker::GetStateFor(const CBlockIndex* break; } case ThresholdState::LOCKED_IN: { - // Always progresses into ACTIVE. - stateNext = ThresholdState::ACTIVE; + // Progresses into ACTIVE provided activation height will have been reached. + if (pindexPrev->nHeight + 1 >= min_activation_height) { + stateNext = ThresholdState::ACTIVE; + } break; } case ThresholdState::FAILED: @@ -170,6 +173,7 @@ private: protected: int64_t BeginTime(const Consensus::Params& params) const override { return params.vDeployments[id].nStartTime; } int64_t EndTime(const Consensus::Params& params) const override { return params.vDeployments[id].nTimeout; } + int MinActivationHeight(const Consensus::Params& params) const override { return params.vDeployments[id].min_activation_height; } int Period(const Consensus::Params& params) const override { return params.nMinerConfirmationWindow; } int Threshold(const Consensus::Params& params) const override { return params.nRuleChangeActivationThreshold; } -- cgit v1.2.3