Blockchain
哪些區塊會成為檢查點?
哪些塊成為檢查點,為什麼選擇一個塊作為檢查點,而不是另一個塊?我在哪裡可以找到檢查點塊的列表?
至少在比特幣核心中,沒有。檢查點是遺留的,可能會在某個時候被刪除。
檢查點最初是作為一種允許跳過歷史鏈中的簽名的方式引入的,而不會容易接受替代歷史。這個角色現在已經被這個
assumevalid
概念所取代(一個已知好的區塊雜湊,但不會阻止接受另一個鏈)。檢查點也被用作一種啟發式方法,以在驗證整個塊之前了解哪些塊頭是可接受的。該角色在 0.10 中通過 headers-first 同步刪除。我們現在只在我們已經知道它的工作證明和難度是可接受的之後才下載一個塊。
它們還被用作驗證進度的衡量標準(因此 Bitcoin-Qt 可以在驗證期間顯示進度條)。該角色已被僅不影響驗證的統計數據取代。
檢查點仍然服務的唯一事情是防止低難度標頭攻擊,您的節點被大量長而低難度的鏈分支發送垃圾郵件,使其記憶體不足。由於現有的檢查點(高達 295000 高度),這已經是一次非常昂貴的攻擊。
您可以在比特幣原始碼中找到該列表。這些是目前的檢查點(來自 git revision
c091b99
):checkpointData = (CCheckpointData) { { { 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")}, { 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")}, { 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")}, {105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")}, {134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")}, {168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")}, {193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")}, {210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")}, {216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")}, {225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")}, {250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")}, {279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")}, {295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")}, } };
如何選擇它們並不重要,但請注意原始碼中的以下評論:
/** * What makes a good checkpoint block? * + Is surrounded by blocks with reasonable timestamps * (no blocks before with a timestamp after, none after with * timestamp before) * + Contains no strange transactions */
無論如何,只要它們定期插入,一切都很好。這個答案暗示了他們的目的是什麼。