跟大家一起學習區塊鏈技術系列之一 比特幣之分叉的檢測

不管是軟分叉還是硬分叉,沒有更新版本的節點或礦工都可能會使用或傳播不正確的信息,這將會造成一定的經濟損失。特別的,未更新版本的節點會傳播和接受一些新版本節點認為無效的交易,這樣它永遠沒有辦法成為大家公認的最好的一條鏈。未更新的節點可能還會拒絕傳播已經加入到最好的鏈或即將成為最好的鏈中的區塊或交易,所以它無法提供完整的信息。

比特幣核心有檢測硬分叉的代碼,是通過觀察區塊鏈的工作量證明實現的。如果一個沒有更新的節點收到的區塊頭比它認為的最好的一條鏈的工作量大至少六個塊或更多的工作量,節點會通過RPC getnetworkinfo的結果給出一個警告,並且執行 –alertnotify命令,如果設置了的話。這警告操作者未更新的節點無法切換到最好的一條鏈上了。

全節點也會檢查區塊和交易的版本號。如果最近收到的區塊或交易的版本號比節點用的版本高的話,就可以假定它沒有使用現在的共識規則。比特幣核心相同的通過RPC getnetworkinfo報告這個情況,並且執行 –alertnotify命令,如果設置了的話。

不管是哪種情況,區塊和交易數據如果來自很明顯的沒有使用最新規則的節點的話,那麼這個數據就是不可信賴的。

SPV客戶端通過連接幾個全節點可以檢測出可能的硬分叉,確保這些節點都在一個鏈上,擁有相同的區塊高度,當然由於傳輸延時和可能存在過時的塊,也可以加減幾個區塊來判斷。如果存在偏離,客戶端可以從這些節點斷開。

SPV客戶端也可以監視區塊或交易的版本號的增加,確保他們處理的或創建的都是符合最新規則的交易。


分享到:


相關文章: