比特币源码解析(8)

来源:互联网 发布:深入浅出数据分析 下载 编辑:程序博客网 时间:2024/05/24 01:01

0x00 摘要

共识机制一直以来都是区块链研究领域的热点,比特币采用的是POW机制,通过大量的算力来解决一个困难性问题从而产生新的区块,而正因为产生新的区块需要大量的算力,网络中的节点才相信最长的链是最可靠的,这种最长链原则也是比特币中共识的原理。

0x01 Consensus

// src/consensus/params.hnamespace 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