Blockchain-Fork
如何使用 bitcoin-cli 檢測分叉?
我保留了一個簡單的塊日誌,並將它們儲存在一個數組中。當一個新塊到達時,我將它添加到數組中。
假設這是我的區塊鏈數組:
E <- tip D C B A
現在,假設一個新塊到達,擴展了一個分支:
Z <- new tip E Y D X <- new branch start C B A
現在塊
C
和D
已在主鏈中被X
和替換Y
。問題:
- 有沒有辦法檢測到最新的塊已經擴展了一個分支?
- 換句話說,如何檢測陣列中較低的塊是否需要更換?
- 這種情況發生的頻率如何?
**編輯:**初始解決方案是檢查
previousblockhash
新塊的 是否等於數組中提示的雜湊值。如果不是,請更新舊提示,並繼續通過數組更新每個塊,直到它們與previousblockhash
.
您可以使用
getchaintips
RPC,它將列出已知塊樹的所有提示,包括從未活動的分支。例如,您可能會看到:
{ "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”,這意味著我們實際上是在它是最好的塊的時候聽說過這個塊,然後繼續下載並驗證它,它是成功的. 後來該分支被通向我們目前提示的分支所取代。
因此,這不僅可以讓您檢測重組,還可以提供有關您的節點觀察和/或經歷的所有歷史記錄的資訊。