什麼是硬分叉Hardfork?

在區塊鏈技術中,分叉是經常出現的詞語。
其實在前文何謂區塊鏈(一)中,大家已經接觸到分叉的概念:

blockchain

上面是一個很常見,幾乎每天都會發生的分叉例子。這種分叉是因為幾乎同時掘出區塊導致。但這種分叉不造成任何影響,在中本聰設計區塊鏈就已經知道會發生這種分叉。

本文想討論的是一種特殊的分叉: 硬分叉Hardfork/軟分叉softfork

留意過比特幣一段時間的讀者對hardfork應該不感陌生:2017年中bitcoin 就hardfork 成bitcoin 和bitcoin cash、2017年11月掀起討論熱潮的segwit2x 幾乎造成另一次硬分叉、2016年ethereum 的DAO hack 令Ethereum hardfork 出Ethereum classic。

用一句說話來解釋硬分叉:舊機制下不被認可的區塊在新機制下認可

比如說: 本來必須要身高180cm以上才可以加入高登(香港一個有名的討論區)。但是有部份用家不同意這規舉,於是便hardfork 出新高登,開放接收身高180cm以下的用戶。所以身高180cm以下的不可以玩舊高登,只可以玩新高登。

用Bitcoin 和Bitcoin Cash 舉例:Bitcoin 是舊機制,只容許block size 為1MB 的區塊。Bitcoin Cash 是新機制,block size 上限為8MB。在舊機制中,如果礦工試圖加入8MB區塊,是不被承認的。但在新機制中8MB區塊則沒問題。

Bitcoin Hardfork

作為礦工,如果想繼續正確處理來自其他礦工的區塊,在hardfork當刻必須要升級挖礦程式,否則無法處理來自其他礦工的8MB區塊。這是hardfork與softfork的重大區別:舊礦工處理不了新礦工的區塊, 並不backward compatible。在理想情況下,所有礦工應該同一刻升級軟件。

但是礦工本身有自由選擇,就正如高登仔可以堅持身高180cm的標準,堅持不接受放寛了的規舉留在舊高登。所以上圖是ideal case, 假設所有礦工一致同意接受8MB區塊。在bitcoin cash的hard fork之中,就有大部份礦工不同意放寛block size limit,堅持以1MB為限,留在本來的區塊鏈上。如下圖:

Hardfork to Bitcoin Cash

新礦工堅持在新區塊鏈上挖礦,舊礦工堅持留在原鏈,結果是永久永裂。

分叉前你在錢包有1個比特幣,分叉後你的錢包變成1個比特幣+1個比特幣現金。該1個比特幣現金好象憑空出現,從天上掉下(airdrop)一樣。有關分叉的經濟學將有另文詳細解釋。

至於軟分叉softfork的影響則沒這麼嚴重(也是它被稱為「軟」分叉的原因),因為softfork是指向後兼容的改動,就算小部份舊礦工不更新自己的軟件,最多只會出現少量孤兒區塊。例如區塊大小上限從1MB降低到500KB,新礦工挖出來的500KB區塊在舊礦工看來沒甚麼問題,反而是舊礦工挖出來的1MB區塊在新礦工看來不太妥當。只要新礦工佔超過50%,最長區塊鏈依然是500KB的區塊,舊礦工依舊會基於500KB鏈挖下一個區塊。

New rules after Hardfork

所以無論分叉是硬是軟,提議分叉的人通常會在分叉前盡量取得礦工之間的共識。如果談判失敗,新機制未能獲得大多數礦工支持而強行上馬,在最壞的情況下可能與硬分叉一樣,分裂出另一種coin。

所有Bitcoin內升級都是透過軟分叉實行,例如Pay-to-script-hash(P2SH), segregated witness (Segwit)。兩者都經歷過一個階段:部份礦工已經更新,部份礦工仍在用舊版。由於事前己有共識,未能趕及在升級日前升級礦工軟工的只佔少數,不至於影響整個網絡運作。所以一般人很少聽到soft fork, 通常是直接聽到bitcoin新加的功能/規舉。暫時只有Bitcoin鏈外的大改動,例如Bitcoin Cash才會用到hard fork。


延伸閱讀