Blockchain-Fork

有沒有發生過硬分叉?

  • November 23, 2018

BIP 50描述了 2013 年的事件,其中區塊鏈分叉持續了幾個小時。它的第一段內容如下:

一個具有比以前看到的更多總交易輸入的塊被探勘和廣播。比特幣 0.8 節點能夠處理這個問題,但一些 0.8 之前的比特幣節點拒絕了它,導致了鏈的意外硬分叉[我的重點]。那時 0.8 之前的不兼容鏈擁有大約 60% 的雜湊算力,確保分裂不會自動解決。

我將其解釋為“硬分叉”一詞描述了網路的一種狀態。一些節點接受了一個塊,但其他節點拒絕了它。接受可疑塊的節點保留並擴展它。拒絕該塊的節點既不保留也不擴展它,而是建立自己的分支。由此產生的“分叉”僅對接受了可疑塊的節點可見。

但是,Wiki對硬分叉有這樣的說法:

硬分叉是對比特幣協議的更改,它使以前無效的塊/交易有效,因此需要所有使用者升級。

換句話說,硬分叉是對比特幣核心的一種更新(假設比特幣核心是協議)。在這個 SE question的最佳答案中重複了這個想法。

區別很微妙,但很重要。例如,考慮一個問題:曾經發生過硬分叉嗎?

至少一位 Core 開發人員表示,比特幣從未經歷過硬分叉,顯然是使用 Wiki 定義的。2013 分叉不是由軟體更新引起的(根據一些新的但未記錄的資訊),而是(由?)即使沒有更新也會發生的不確定性行為。

答案似乎取決於你如何定義硬分叉。如果硬分叉是網路的一個條件,那麼答案似乎是“是”。但如果硬分叉是一種軟體更新,答案似乎是否定的。

不難看出軟體更新如何導致一些節點看到的持久區塊鏈分叉。很明顯,這兩個想法是相互關聯的。但是圍繞硬分叉的不精確語言可能會導致混亂,更重要的是,會導致錯誤的結論。

那麼它是哪一個?“硬分叉”是描述網路狀況還是軟體更新?

那麼它是哪一個?“硬分叉”是描述網路狀況還是軟體更新?

任何一個都可以接受。你可以說某某版本導致了分叉,也可以說網路目前是分叉的。

2013 年 3 月的分叉是硬分叉嗎?

這取決於你的定義。2013 年 3 月的事件最初似乎是一次硬分叉,但後來的調查表明,即使所有節點都執行相同的版本,也有可能觸發該問題。

引自BIP50

即使整個網路執行的是 0.7.2 版,這也是一個問題。理論上,一個 0.7.2 節點可以創建其他人無法驗證的塊,或者 ​​0.7.2 節點創建對等方無法驗證的塊重組,因為每個節點的 blkindex.dat 數據庫的內容不是相同,並且所需的鎖數量取決於磁碟上 blkindex.dat 的確切排列(每頁獲取鎖)。

但是,從某種意義上說,這是一個硬分叉,新客戶端會創建和驗證舊客戶端認為無效的塊。

除了 2013 年 3 月的 bug,引入 CVE-2018-17144 的 bug 也是硬分叉,即使沒有鏈分裂。

修復是一個軟分叉,因為它恢復了舊的共識規則。

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