This introduces a 'minimum chain work' chainparam which is intended to be the known amount of work in the chain for the network at the time of software release. If you don't have this much work, you're not yet caught up. This is used instead of the count of blocks test from checkpoints. This criteria is trivial to keep updated as there is no element of subjectivity, trust, or position dependence to it. It is also a more reliable metric of sync status than a block count.
106 lines
3.6 KiB
C++
106 lines
3.6 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_CONSENSUS_PARAMS_H
|
|
#define BITCOIN_CONSENSUS_PARAMS_H
|
|
|
|
#include "uint256.h"
|
|
|
|
namespace Consensus {
|
|
|
|
/**
|
|
* Index into Params.vUpgrades and NetworkUpgradeInfo
|
|
*
|
|
* Being array indices, these MUST be numbered consecutively.
|
|
*
|
|
* The order of these indices MUST match the order of the upgrades on-chain, as
|
|
* several functions depend on the enum being sorted.
|
|
*/
|
|
enum UpgradeIndex {
|
|
// Sprout must be first
|
|
BASE_SPROUT,
|
|
UPGRADE_TESTDUMMY,
|
|
UPGRADE_OVERWINTER,
|
|
UPGRADE_SAPLING,
|
|
// NOTE: Also add new upgrades to NetworkUpgradeInfo in upgrades.cpp
|
|
MAX_NETWORK_UPGRADES
|
|
};
|
|
|
|
struct NetworkUpgrade {
|
|
/**
|
|
* The first protocol version which will understand the new consensus rules
|
|
*/
|
|
int nProtocolVersion;
|
|
|
|
/**
|
|
* Height of the first block for which the new consensus rules will be active
|
|
*/
|
|
int nActivationHeight;
|
|
|
|
/**
|
|
* Special value for nActivationHeight indicating that the upgrade is always active.
|
|
* This is useful for testing, as it means tests don't need to deal with the activation
|
|
* process (namely, faking a chain of somewhat-arbitrary length).
|
|
*
|
|
* New blockchains that want to enable upgrade rules from the beginning can also use
|
|
* this value. However, additional care must be taken to ensure the genesis block
|
|
* satisfies the enabled rules.
|
|
*/
|
|
static constexpr int ALWAYS_ACTIVE = 0;
|
|
|
|
/**
|
|
* Special value for nActivationHeight indicating that the upgrade will never activate.
|
|
* This is useful when adding upgrade code that has a testnet activation height, but
|
|
* should remain disabled on mainnet.
|
|
*/
|
|
static constexpr int NO_ACTIVATION_HEIGHT = -1;
|
|
};
|
|
|
|
/**
|
|
* Parameters that influence chain consensus.
|
|
*/
|
|
struct Params {
|
|
uint256 hashGenesisBlock;
|
|
|
|
bool fCoinbaseMustBeProtected;
|
|
|
|
/** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */
|
|
int nSubsidySlowStartInterval;
|
|
/**
|
|
* Shift based on a linear ramp for slow start:
|
|
*
|
|
* MAX_SUBSIDY*(t_s/2 + t_r) = MAX_SUBSIDY*t_h Coin balance
|
|
* t_s + t_r = t_h + t_c Block balance
|
|
*
|
|
* t_s = nSubsidySlowStartInterval
|
|
* t_r = number of blocks between end of slow start and first halving
|
|
* t_h = nSubsidyHalvingInterval
|
|
* t_c = SubsidySlowStartShift()
|
|
*/
|
|
int SubsidySlowStartShift() const { return nSubsidySlowStartInterval / 2; }
|
|
int nSubsidyHalvingInterval;
|
|
int GetLastFoundersRewardBlockHeight() const {
|
|
return nSubsidyHalvingInterval + SubsidySlowStartShift() - 1;
|
|
}
|
|
/** Used to check majorities for block version upgrade */
|
|
int nMajorityEnforceBlockUpgrade;
|
|
int nMajorityRejectBlockOutdated;
|
|
int nMajorityWindow;
|
|
NetworkUpgrade vUpgrades[MAX_NETWORK_UPGRADES];
|
|
/** Proof of work parameters */
|
|
uint256 powLimit;
|
|
int64_t nPowAveragingWindow;
|
|
int64_t nPowMaxAdjustDown;
|
|
int64_t nPowMaxAdjustUp;
|
|
int64_t nPowTargetSpacing;
|
|
int64_t AveragingWindowTimespan() const { return nPowAveragingWindow * nPowTargetSpacing; }
|
|
int64_t MinActualTimespan() const { return (AveragingWindowTimespan() * (100 - nPowMaxAdjustUp )) / 100; }
|
|
int64_t MaxActualTimespan() const { return (AveragingWindowTimespan() * (100 + nPowMaxAdjustDown)) / 100; }
|
|
uint256 nMinimumChainWork;
|
|
};
|
|
} // namespace Consensus
|
|
|
|
#endif // BITCOIN_CONSENSUS_PARAMS_H
|