简介

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

文件名 pramas.h

1
class Consensus

Consensus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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;

/** 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