enum DeploymentPos { DEPLOYMENT_TESTDUMMY, DEPLOYMENT_CSV, // Deployment of BIP68, BIP112, and BIP113. DEPLOYMENT_SEGWIT, // Deployment of BIP141, BIP143, and BIP147. // NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp MAX_VERSION_BITS_DEPLOYMENTS };
/** * Struct for each individual consensus rule change using BIP9. */ struct BIP9Deployment { /** Bit position to select the particular bit in nVersion. */ int bit; /** Start MedianTime for version bits miner confirmation. Can be a date in the past */ int64_t nStartTime; /** Timeout/expiry MedianTime for the deployment attempt. */ int64_t nTimeout;
/** Constant for nTimeout very far in the future. */ static constexpr int64_t NO_TIMEOUT = std::numeric_limits<int64_t>::max();
/** Special value for nStartTime indicating that the deployment is always active. * This is useful for testing, as it means tests don't need to deal with the activation * process (which takes at least 3 BIP9 intervals). Only tests that specifically test the * behaviour during activation cannot use this. */ static constexpr int64_t ALWAYS_ACTIVE = -1; };
/** * Parameters that influence chain consensus. * 影响共识的参数 */ struct Params { uint256 hashGenesisBlock; //创世区块的哈希 int nSubsidyHalvingInterval; //奖励减半的时间间隔 /** Block height at which BIP16 becomes active */ int BIP16Height; //区块高度 /** Block height and hash at which BIP34 becomes active */ int BIP34Height; //区块Hash uint256 BIP34Hash; /** Block height at which BIP65 becomes active */ int BIP65Height; /** Block height at which BIP66 becomes active */ int BIP66Height; /** * Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period, * (nPowTargetTimespan / nPowTargetSpacing) which is also used for BIP9 deployments. * Examples: 1916 for 95%, 1512 for testchains. * 在2016个区块中至少要有多少个区块被矿工确认,规则改变才能生效 * 在BIP9上线时还使用(nPowTargetTimespan / nPowTargetSpacing)值 */ uint32_t nRuleChangeActivationThreshold; uint32_t nMinerConfirmationWindow; BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]; /** Proof of work parameters */ // POW参数 uint256 powLimit; //难度 bool fPowAllowMinDifficultyBlocks;//是否允许最低难度 bool fPowNoRetargeting; //不调整难度 int64_t nPowTargetSpacing; //区块产生平均时间 int64_t nPowTargetTimespan; //难度调整时间 int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; } uint256 nMinimumChainWork; //当前难度最小值 uint256 defaultAssumeValid; //在此区块之前的区块都认为是有效的 }; } // namespace Consensus