11 int nPeriod =
Period(params);
14 int64_t nTimeTimeout =
EndTime(params);
24 if (pindexPrev !=
nullptr) {
31 std::vector<const CBlockIndex *> vToCompute;
32 while (cache.count(pindexPrev) == 0) {
33 if (pindexPrev ==
nullptr) {
44 vToCompute.push_back(pindexPrev);
49 assert(cache.count(pindexPrev));
53 while (!vToCompute.empty()) {
55 pindexPrev = vToCompute.back();
56 vToCompute.pop_back();
75 for (
int i = 0; i < nPeriod; i++) {
79 pindexCount = pindexCount->
pprev;
81 if (count >= nThreshold) {
97 cache[pindexPrev] = state = stateNext;
110 if (pindex ==
nullptr) {
126 currentIndex = currentIndex->
pprev;
152 const int nPeriod =
Period(params);
164 ((pindexPrev->
nHeight + 1) % nPeriod));
169 while (previousPeriodParent !=
nullptr &&
170 GetStateFor(previousPeriodParent, params, cache) == initialState) {
171 pindexPrev = previousPeriodParent;
172 previousPeriodParent =
177 return pindexPrev->
nHeight + 1;
206 (pindex->
nVersion & Mask(params)) != 0);
223 return VersionBitsConditionChecker(pos).GetStateFor(pindexPrev, params,
230 return VersionBitsConditionChecker(pos).GetStateStatisticsFor(pindexPrev,
238 return VersionBitsConditionChecker(pos).GetStateSinceHeightFor(
239 pindexPrev, params, cache.
caches[pos]);
244 return VersionBitsConditionChecker(pos).Mask(params);
Display status of an in-progress BIP9 softfork.
CBlockIndex * pprev
pointer to the index of the predecessor of this block
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.
static const int32_t VERSIONBITS_TOP_MASK
What bitmask determines whether versionbits is in use.
virtual bool Condition(const CBlockIndex *pindex, const Consensus::Params ¶ms) const =0
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
ThresholdConditionCache caches[Consensus::MAX_VERSION_BITS_DEPLOYMENTS]
ThresholdState
BIP 9 defines a finite-state-machine to deploy a softfork in multiple stages.
uint32_t VersionBitsMask(const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
int threshold
Number of blocks with the version bit set required to activate the softfork.
BIP 9 allows multiple softforks to be deployed in parallel.
int period
Length of blocks of the BIP9 signalling period.
uint32_t nActivationThreshold
Minimum number of blocks within an activation window that must signal to activate the deployement...
int VersionBitsStateSinceHeight(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos, VersionBitsCache &cache)
int64_t nStartTime
Start MedianTime for version bits miner confirmation.
Abstract class that implements BIP9-style threshold logic, and caches results.
int count
Number of blocks with the version bit set since the beginning of the current period.
uint32_t nMinerConfirmationWindow
Parameters that influence chain consensus.
int64_t GetMedianTimePast() const
virtual int Threshold(const Consensus::Params ¶ms) const =0
int32_t nVersion
block header
BIP9Stats GetStateStatisticsFor(const CBlockIndex *pindex, const Consensus::Params ¶ms) const
Returns the numerical statistics of an in-progress BIP9 softfork in the current period.
int64_t nTimeout
Timeout/expiry MedianTime for the deployment attempt.
ThresholdState GetStateFor(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, ThresholdConditionCache &cache) const
Returns the state for pindex A based on parent pindexPrev B.
std::map< const CBlockIndex *, ThresholdState > ThresholdConditionCache
The block chain is a tree shaped structure starting with the genesis block at the root...
static const int32_t VERSIONBITS_TOP_BITS
What bits to set in version for versionbits blocks.
virtual int64_t BeginTime(const Consensus::Params ¶ms) const =0
int elapsed
Number of blocks elapsed since the beginning of the current period.
bool possible
False if there are not enough blocks left in this period to pass activation threshold.
virtual int Period(const Consensus::Params ¶ms) const =0
int nHeight
height of the entry in the chain. The genesis block has height 0
int bit
Bit position to select the particular bit in nVersion.
BIP9Stats VersionBitsStatistics(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.
ThresholdState VersionBitsState(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms, Consensus::DeploymentPos pos, VersionBitsCache &cache)
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]