aboutsummaryrefslogtreecommitdiff
path: root/src/versionbits.cpp
diff options
context:
space:
mode:
authorAnthony Towns <aj@erisian.com.au>2021-03-06 18:18:49 +1000
committerAnthony Towns <aj@erisian.com.au>2021-04-12 11:14:49 +1000
commit73d4a706393e6dbd6b6d6b6428f8d3233ac0a2d8 (patch)
treed187f08c276e57a617c3e9eee6c635890e3873a6 /src/versionbits.cpp
parent9e6b65f6fa205eee5c3b99343988adcb8d320460 (diff)
downloadbitcoin-73d4a706393e6dbd6b6d6b6428f8d3233ac0a2d8.tar.xz
versionbits: Add support for delayed activation
Diffstat (limited to 'src/versionbits.cpp')
-rw-r--r--src/versionbits.cpp8
1 files changed, 6 insertions, 2 deletions
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; }