比特币开发--链初始化

简介

比特币开发--链初始化_第1张图片
每一个块都会包含前一个区块的哈希(Hash Of Previous Block Header),并包含这次所含交易的信息(Merkle Root),最终形成一个链。块的哈希只是针对区块的头部来做,哈希的时候并不直接对所有交易来做,但是Merkle Root会包含交易信息的哈希,具体后面交易章节会做详细介绍。

初始化

bitcoind支持三种链,在src/chainparams.cpp中,分别对应三种class:
1. 主链:CMainParams
2. 测试链:CTestNetParams
3. 本地测试链:CRegTestParams

创世区块(Genesis Block)

链上的第一个区块,这个块没有Previous Block。

        genesis = CreateGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();

P2P种子

其中主链跟测试链都是线上的链,都需要初始化种子DNS,以便获取最新的区块链,以及广播交易、挖矿等信息。
而本地测试链,是本地的,不需要初始化种子。

        vSeeds.emplace_back("seed.bitcoin.sipa.be"); // Pieter Wuille, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("dnsseed.bluematt.me"); // Matt Corallo, only supports x9
        vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org"); // Luke Dashjr
        vSeeds.emplace_back("seed.bitcoinstats.com"); // Christian Decker, supports x1 - xf
        vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch"); // Jonas Schnelli, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("seed.btc.petertodd.org"); // Peter Todd, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("seed.bitcoin.sprovoost.nl"); // Sjors Provoost

共识初始化

        consensus.nSubsidyHalvingInterval = 210000;
        // 挖矿奖励减半时间间隔,用以控制整体币的数量
        consensus.BIP16Exception = uint256S("0x00000000000002dc756eebf4f49723ed8d30cc28a5f108eb94b1ba88ac4f9c22");
        consensus.BIP34Height = 227931;
        // 区块高度,也就是说一共有多少个块
        consensus.BIP34Hash = uint256S("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8");
        consensus.BIP65Height = 388381; // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0
        consensus.BIP66Height = 363725; // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931
        consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
        // 用以挖矿时,工作量的证明,这个会根据出块的速度而自动调整,以保证出块的速度恒定
        consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks
        // 区块难度调整时间,默认两周,以控制整体出块速度
        consensus.nPowTargetSpacing = 10 * 60;
        // 区块平均产生时间,默认10分钟
        consensus.fPowAllowMinDifficultyBlocks = false;
        // 默认不允许最低难度
        consensus.fPowNoRetargeting = false;
        consensus.nRuleChangeActivationThreshold = 1916; // 95% of 2016
        consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
        // 两周期望产生的块数,意味着每产生2016个块,会检查这2016个块产生的时间是否达到两周,如果高于或低于两周,会去调整powLimit
        // 意味着挖矿的人越多,就越难挖到矿

你可能感兴趣的:(区块链)