區塊鏈簡介

簡介

這裏寫圖片描述 
每一個塊都會包含前一個區塊的哈希(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
        // 意味着挖礦的人越多,就越難挖到礦
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章