共识机制一直以来都是区块链研究领域的热点,比特币采用的是POW机制,通过大量的算力来解决一个困难性问题从而产生新的区块,而正因为产生新的区块需要大量的算力,网络中的节点才相信最长的链是最可靠的,这种最长链原则也是比特币中共识的原理。
// src/consensus/params.h
namespace Consensus {
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;
};
/** * 影响共识的参数 */
struct Params {
uint256 hashGenesisBlock; // 创世区块的hash
int nSubsidyHalvingInterval; // 奖励减半时间间隔
/** Block height and hash at which BIP34 becomes active */
int BIP34Height; // 区块高度
uint256 BIP34Hash; // 区块hash
/** Block height at which BIP65 becomes active */
int BIP65Height;
/** Block height at which BIP66 becomes active */
int BIP66Height;
/** * 在2016个区块中至少要有多少个区块被矿工确认,规则改变才能生效 * 在BIP9上线时还使用(nPowTargetTimespan / nPowTargetSpacing)值 * Examples: 1916 for 95%, 1512 for testchains. */
uint32_t nRuleChangeActivationThreshold;
uint32_t nMinerConfirmationWindow;
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS];
/** 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