Blockchain-Fork

如何使用 bitcoin-cli 檢測分叉?

  • July 13, 2016

我保留了一個簡單的塊日誌,並將它們儲存在一個數組中。當一個新塊到達時,我將它添加到數組中。

假設這是我的區塊鏈數組:

E    <- tip
D
C
B
A

現在,假設一個新塊到達,擴展了一個分支:

    Z    <- new tip
E    Y
D    X    <- new branch start
    C
    B
    A

現在塊CD已在主鏈中被X和替換Y

問題:

  1. 有沒有辦法檢測到最新的塊已經擴展了一個分支?
  • 換句話說,如何檢測陣列中較低的塊是否需要更換?
  1. 這種情況發生的頻率如何?

**編輯:**初始解決方案是檢查previousblockhash新塊的 是否等於數組中提示的雜湊值。如果不是,請更新舊提示,並繼續通過數組更新每個塊,直到它們與previousblockhash.

您可以使用getchaintipsRPC,它將列出已知塊樹的所有提示,包括從未活動的分支。

例如,您可能會看到:

{
   "height": 420561,
   "hash": "000000000000000001cb02590846299c91794e9b9f422513cff4b9c1dd5c62a",
   "branchlen": 0,
   "status": "active"
},
{
   "height": 419698,
   "hash": "000000000000000004a3a78750438d0491b6335cbbe9c15099a6e55b6943e51a",
   "branchlen": 1,
   "status": "valid-headers"
},
{
   "height": 418868,
   "hash": "000000000000000000ba1d7d93ad1c7f04fb4a430fdee67c44fbdd3236f2b805",
   "branchlen": 1,
   "status": "valid-fork"
},

在這裡你可以看到我們所知道的目前最佳有效鏈在高度 420561。還有兩個分叉:

  • 一個分支在高度 419697 並延伸到高度 419698。它的狀態為“valid-headers”,這意味著我們聽說過這個塊的標題,但是當它們被驗證時,我們已經有一個等效或更好的塊可用,所以我們沒有嘗試下載高度為 419698 的分叉塊。
  • 一個分支在高度 418867 並延伸到高度 418868。它的狀態為“valid-fork”,這意味著我們實際上是在它是最好的塊的時候聽說過這個塊,然後繼續下載並驗證它,它是成功的. 後來該分支被通向我們目前提示的分支所取代。

因此,這不僅可以讓您檢測重組,還可以提供有關您的節點觀察和/或經歷的所有歷史記錄的資訊。

引用自:https://bitcoin.stackexchange.com/questions/44437