10 int nPeriod =
Period(params);
13 int64_t nTimeTimeout =
EndTime(params);
21 if (pindexPrev !=
nullptr) {
26 std::vector<const CBlockIndex*> vToCompute;
27 while (cache.count(pindexPrev) == 0) {
28 if (pindexPrev ==
nullptr) {
38 vToCompute.push_back(pindexPrev);
43 assert(cache.count(pindexPrev));
47 while (!vToCompute.empty()) {
49 pindexPrev = vToCompute.back();
50 vToCompute.pop_back();
69 for (
int i = 0; i < nPeriod; i++) {
73 pindexCount = pindexCount->
pprev;
75 if (
count >= nThreshold) {
91 cache[pindexPrev] = state = stateNext;
104 if (pindex ==
nullptr)
117 currentIndex = currentIndex->
pprev;
140 const int nPeriod =
Period(params);
152 while (previousPeriodParent !=
nullptr &&
GetStateFor(previousPeriodParent, params, cache) == initialState) {
153 pindexPrev = previousPeriodParent;
158 return pindexPrev->
nHeight + 1;
190 return VersionBitsConditionChecker(pos).GetStateFor(pindexPrev, params, cache.
caches[pos]);
195 return VersionBitsConditionChecker(pos).GetStateStatisticsFor(pindexPrev, params);
200 return VersionBitsConditionChecker(pos).GetStateSinceHeightFor(pindexPrev, params, cache.
caches[pos]);
205 return VersionBitsConditionChecker(pos).Mask(params);
Abstract class that implements BIP9-style threshold logic, and caches results.
virtual bool Condition(const CBlockIndex *pindex, const Consensus::Params ¶ms) const =0
virtual int Period(const Consensus::Params ¶ms) const =0
BIP9Stats GetStateStatisticsFor(const CBlockIndex *pindex, const Consensus::Params ¶ms) const
Returns the numerical statistics of an in-progress BIP9 softfork in the current period.
ThresholdState GetStateFor(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, ThresholdConditionCache &cache) const
Returns the state for pindex A based on parent pindexPrev B.
virtual int64_t EndTime(const Consensus::Params ¶ms) const =0
int GetStateSinceHeightFor(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, ThresholdConditionCache &cache) const
Returns the height since when the ThresholdState has started for pindex A based on parent pindexPrev ...
virtual int64_t BeginTime(const Consensus::Params ¶ms) const =0
virtual int Threshold(const Consensus::Params ¶ms) const =0
The block chain is a tree shaped structure starting with the genesis block at the root,...
CBlockIndex * pprev
pointer to the index of the predecessor of this block
int64_t GetMedianTimePast() const
int32_t nVersion
block header
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.
int nHeight
height of the entry in the chain. The genesis block has height 0
@ MAX_VERSION_BITS_DEPLOYMENTS
Display status of an in-progress BIP9 softfork.
int count
Number of blocks with the version bit set since the beginning of the current period.
int elapsed
Number of blocks elapsed since the beginning of the current period.
int threshold
Number of blocks with the version bit set required to activate the softfork.
bool possible
False if there are not enough blocks left in this period to pass activation threshold.
int period
Length of blocks of the BIP9 signalling period.
int bit
Bit position to select the particular bit in nVersion.
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
int64_t nTimeout
Timeout/expiry MedianTime for the deployment attempt.
int64_t nStartTime
Start MedianTime for version bits miner confirmation.
Parameters that influence chain consensus.
uint32_t nMinerConfirmationWindow
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]
uint32_t nRuleChangeActivationThreshold
Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period,...
BIP 9 allows multiple softforks to be deployed in parallel.
ThresholdConditionCache caches[Consensus::MAX_VERSION_BITS_DEPLOYMENTS]
uint32_t VersionBitsMask(const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
BIP9Stats VersionBitsStatistics(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
int VersionBitsStateSinceHeight(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos, VersionBitsCache &cache)
ThresholdState VersionBitsState(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos, VersionBitsCache &cache)
std::map< const CBlockIndex *, ThresholdState > ThresholdConditionCache
static const int32_t VERSIONBITS_TOP_BITS
What bits to set in version for versionbits blocks.
static const int32_t VERSIONBITS_TOP_MASK
What bitmask determines whether versionbits is in use.
ThresholdState
BIP 9 defines a finite-state-machine to deploy a softfork in multiple stages.