Blockchain
blk.dat 文件中的微小 1 塊分叉
我剛剛完成了將 blk.dat 文件中儲存的 Testnet3 比特幣區塊鏈解析到數據庫中。由於我使用多處理同時解析多個文件,因此在解析時沒有將高度添加到區塊鏈中。相反,我是在解析整個區塊鏈之後才這樣做的。
在大部分情況下增加塊的高度時,一切都很順利。然而,在接近區塊鏈末端(最後 7%)時,我的程式碼開始崩潰,因為它開始找到 2 個具有相同前一個塊的不同塊(基本上是一個分叉),並且我已經限制了我的數據庫以避免有 2 個高度相同的方塊。我一直在尋找的所有這些小叉子只有一個街區長,看起來我越接近終點,最常見的是找到這些小叉子。
我不得不在區塊瀏覽器中查找兩個區塊 ID,以找出哪個是官方區塊,哪個是分叉(“假”區塊)。其中一個總是不存在的,我知道這不是 ID 錯位。我一直在手動刪除“假”塊的連結,這樣我的程式碼就可以繼續增加高度,但正如我之前所說,越接近區塊鏈的末端,找到這些小叉子變得越來越普遍。
我只是想知道這是否正常,或者我的 blk.dat 文件是否真的有問題。
這是正常的,尤其是在測試網上。您所看到的被稱為陳舊塊(或者也被錯誤地稱為孤立塊)。當礦工大約在同一時間完成一個區塊時,就會發生這種情況,因此一些節點以不同的順序接收這兩個區塊。當找到下一個塊時,衝突就解決了。
由於測試網的難度較低,您通常會在測試網上看到陳舊的塊。此外,您會在鏈尖看到這些,因為只有在您不嘗試進行初始同步時才能接收到這些。因此,在初始同步期間您不會收到陳舊的塊,但是一旦您退出並開始正常操作並且您的節點收到新的塊,您最終將收到陳舊的塊(但它們不一定是陳舊的)。
您將需要修改程式碼以處理陳舊的塊。