Bitcoin-Core
為什麼兩個不同的完全同步的比特幣核心節點的區塊鏈大小不同?
執行
size_on_disk
時列印getblockchaininfo
的內容比其他節點同時報告的/塊小 1.2 GB。交易指數 = 1
會是什麼呢??我已經在 twitter 上詢問了其他同行,以檢查是否有其他人遇到相同的情況,並且每個人的分類帳中的數據都比我多。(<https://twitter.com/bitdov/status/1231915231368163328>)
這是在我的節點上使用 getblockchaininfo 列印的所有資訊:
{ "chain": "main", "blocks": 618824, "headers": 618824, "bestblockhash": "0000000000000000000a1fb0ec42e380215bb58698a1321d2953ee5d1b7b 685d", "difficulty": 15546745765529.37, "mediantime": 1582569829, "verificationprogress": 0.9999950821417113, "initialblockdownload": false, "chainwork": "00000000000000000000000000000000000000000cfea65b1b3c9262e87778b8 ", "size_on_disk": 299006763199, "pruned": false, "softforks": { "bip34": { "type": "buried", "active": true, "height": 227931 }, "bip66": { "type": "buried", "active": true, "height": 363725 }, "bip65": { "type": "buried", "active": true, "height": 388381 }, "csv": { "type": "buried", "active": true, "height": 419328 }, "segwit": { "type": "buried", "active": true, "height": 481824 } }, "warnings": "" }
大小的差異是由於您的節點儲存的陳舊塊的數量造成的。陳舊區塊是曾經構成主鏈一部分但現在不屬於主鏈的區塊。
例如,假設同時在高度 102 開採兩個區塊。當礦工通過八卦網路中繼區塊時,與礦工 2 (102b) 開采的區塊相比,更接近礦工 1 的網路將首先接收其區塊 (102a)。比特幣核心將第一個收到的有效塊添加到鏈的末端。之後在相同高度收到的塊不會被刪除,而是保留在數據庫中,以防發生重組。因此,如果下一個區塊 103 是在區塊 102b 之上開采的,那麼首先收到 102a 的節點會將其鏈重組為包含 102b 的鏈,如下所示。
101 -->102a \ \ 102b --> 103 -->104
比特幣核心不會刪除它從同行那裡收到的任何有效區塊。它永遠儲存在您的數據庫中的文件中
blocks/blk****.dat
(對於主鏈中的塊也是如此)。但是,該軟體不會中繼陳舊的塊。為了接收陳舊的塊,您需要在您的對等方從不同的鏈視圖向您廣播塊時線上。對等點只會從他們的角度廣播他們從目前活動鏈中查看的那些塊。因此,您只會擁有線上時收到的陳舊塊。這也意味著您將需要連接到查看與其他對等點不同的鏈尖端的對等點。由於這種可變性,許多節點對比特幣區塊鏈的大小會有不同的看法