Bitcoincore系统的CChainParams类定义了区块链参数,并在bitcoind启动阶段完成初始化,参见bitcoind.cpp的AppInit()。
CChainParams包含如下主要数据成员。
1、CBlock genesis;
创世块。具体构建参见CreateGenesisBlock()。
2、Consensus::Paramsconsensus;
初始化共识参数。
3、CMessageHeader::MessageStartCharspchMessageStart;
消息头标识,识别消息所属网络,main网络模式为[0xf9,0xbe,0xb4,0xd9],testnet网络模式为[0x0b,0x11,0x09,0x07]。
4、std::vector
预置的DNS Seed服务器。Bitcoincore的main模式预置了7个DNS Seed服务器。
5、std::vector
Base58Check的前缀,存储了PUBKEY_ADDRESS、SCRIPT_ADDRESS、SECRET_KEY、EXT_PUBLIC_KEY、EXT_SECRET_KEY五种类别的Base58前缀。
6、int nDefaultPort;
默认端口号。main模式为8333,testnet模式为18333。
7、std::string bech32_hrp;
Bech32地址标识的human-readable part,main网络为“bc”,testnet为“tb”。Bech32是由BIP0173定义的比特币地址格式。详细介绍参考:
《https://en.bitcoin.it/wiki/Bech32_adoption》
《https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki》
8、uint64_tnPruneAfterHeight;
用于精简模式(prune mode)。若启动精简模式,则区块链的nPruneAfterHeight高度之后采用精简模式。main网络该值为100000,testnet网络为1000。
9、boolfMineBlocksOnDemand;
目前只用于regtest模式。main和testnet模式均为false。
10、ChainTxDatachainTxData;
存放交易验证的经验数据,用于评估验证进度时使用。
struct ChainTxData {
int64_t nTime;
int64_t nTxCount;
double dTxRate;
};
main模式下预置了截止到高度为506081区块的相关信息。
{
1516903077, //该块中交易的时间戳。
295363220, //截至到上述时间戳的交易总数量。
3.5 //该时间戳以后每秒交易数量(预测的)。
}
参见在GuessVerificationProgress()中的使用。
11、boolm_fallback_fee_enabled;
是否使用回滚费用。main模式下默认禁止,testnet模式默认开启。但运行时可由-fallbackfee参数修改。
12、CCheckpointDatacheckpointData;
预置可用于有效性检查的参考区块头数据,避免链接到不合适的区块链分支。
使用场景参见ContextualCheckBlockHeader()。