什麼是分叉?
在軟件開發領域,分叉是個很常見的術語,表示“複製並修改”。其主要針對軟件升級,即對舊版本軟件代碼進行複制修改,升級至新版本。新舊軟件會形成不同的版本號,具體功能也會存在一定差異。在區塊鏈領域,分叉一般又被稱為區塊鏈分叉,類同上述軟件分叉含義,區塊鏈分叉是指對區塊鏈軟件或協議進行升級。
分叉是怎樣運行的?
以比特幣為例,比特幣分叉就是指比特幣軟件或協議升級。我們都知道,比特幣協議實際上就是一個軟件,由複雜的代碼構建而成。各個節點要參與運行比特幣網絡,都需要下載比特幣客戶端。類似於微信、淘寶等軟件每隔一段時期就要升級一個版本,比特幣協議不定期也需要升級版本,以修補漏洞、提升系統性能、完善協議功能。
而不同於微信、淘寶等軟件升級只需騰訊和阿里公司團隊決定並實施,比特幣分叉,即比特幣協議升級則需要比特幣整個社區共同決定。具體而言,比特幣協議升級是由比特幣開發人員、比特幣礦工、比特幣全節點用戶共同參與決策和實施。
開發人員主要負責創建和更新代碼。如果沒有人創建更新代碼,用戶將無法參與軟件運行。不過,這裡需要注意的是,雖然比特幣是開源的,其代碼對所有人都是公開可用的,任何人都可以復制、創建和更新代碼,但創建更新代碼並不等同於協議升級。比特幣開發人員創建更新代碼均需提交其他開發人員審核,且最終代碼部署實施需要整個比特幣社區共同決策。
比特幣礦工主要負責維護比特幣網絡安全運行,並投入計算資源產出新區塊。比特幣全節點用戶則主要負責驗證、發送和接收區塊及交易,並儲存和維護比特幣區塊鏈完整的數據副本。比特幣礦工和比特幣全節點用戶是比特幣協議升級的主要參與者和實施者。開發人員提交或更改比特幣協議代碼,均需獲得礦工和全節點用戶的投票表決。
總而言之,比特幣分叉需要比特幣開發者、礦工和全節點用戶三方共同參與決策與執行,但凡一方未就升級達成一致,均可能導致分叉失敗,更有甚者可能造成區塊鏈的永久性分裂(這裡的分裂不等同於短暫性分叉)。
兩種常見的分叉方式
(一)硬分叉
硬分叉是指一種不支持向後兼容的軟件升級方式,升級後的節點不可以與未升級的節點進行交互。硬分叉升級要求所有節點均進行升級,如若不升級,節點將不能使用新版本軟件。一句話概括即為:舊區塊不兼容新區塊。
譬如,比特幣2017年圍繞區塊擴容的升級就是一次典型的硬分叉升級案例。
在該案例中,升級前,舊規則規定區塊容量最大為1MB,也就是說,所有礦工均接受和驗證上限為1MB的區塊。升級後,新規則規定區塊容量最大可為8MB。這意味著,升級後的礦工可接受和驗證上限為8MB的區塊。換句話說,如果有礦工生產出了8MB的區塊,在舊規則中是不會被承認的,但在新規則中則完全沒有問題。因此,如果一名礦工想要驗證來自其他礦工產出的8MB區塊,其必須升級到新規則。
理想情況下,硬分叉升級所有礦工應該在同一時刻升級軟件。但現實情況是,並非所有節點礦工都同意升級。於是,一部分選擇升級的礦工將按照新規則繼續挖礦;另一部分堅持不升級的礦工則不能參與到新規則中,仍繼續按照舊規則運行。這部分未升級節點所產出的區塊將被保留在原有的單獨的鏈上,和已升級節點產出區塊組成的新鏈分道揚鑣。至此,原區塊鏈一分為二,發生永久性分裂,也就是我們現在所看到的BTC鏈(舊鏈)和BCH鏈(新鏈)。
不過需要說明的是,並不是所有硬分叉都會造成一條鏈的永久性分裂。一般而言,只要硬分叉升級部署前已基本達成共識,由於網絡狀況差異等造成區塊鏈暫時性分叉,在未升級節點及時部署升級後,均可以得到修復(暫時性分叉的鏈由於未獲得多數節點支持將被廢棄)。
硬分叉的優缺點
硬分叉的優點主要表現在:對於區塊鏈整體而言,硬分叉升級可以增加更多系統性能、技術探索的可能性,促進區塊鏈升級優化,且在升級執行速率和系統性能提升上,有較為明顯的優勢。此外,硬分叉帶來區塊鏈潛在永久性分裂的風險對於一部分交易者而言,可能會是好事,這意味著交易者有可能會獲得分叉幣的收益。
與此同時,硬分叉的缺點主要表現在:升級過程中,不能保證所有節點都在一條鏈上運行,會增加系統的不穩定性和社區分裂的風險。此外,硬分叉所涉及的協議大改動可能會無形中增加節點的運行成本。
總體來說,硬分叉升級方式較為激進。因為一旦採用硬分叉升級,需要區塊鍊網絡全部節點就升級達成共識,才能保證最終升級成功。否則,可能會造成整個區塊鏈的永久性分裂。一般在涉及對區塊鏈協議或軟件做重大調整或更改時,譬如區塊鏈協議整體路線升級、協議軟件出現重大漏洞亟待修補等,會採用這種升級方式。不過也有些特例,人們會利用硬分叉直接創建新鍊和新幣。譬如LTC鏈。
(二)軟分叉
與硬分叉相反,軟分叉則是一種支持向後兼容的軟件升級方式,升級後的節點可以與未升級的節點進行交互。和硬分叉不同的是,採用軟分叉,用戶不升級,仍然可以使用新版本,只不過使用新版本中包含的新功能可能會受到限制。一句話概括即為:舊區塊兼容新區塊。當年的比特幣SegWit隔離見證升級則是典型的軟分叉案例。
軟分叉的優缺點
軟分叉的優點主要有以下兩點:
1.軟分叉可保證所有節點總是在同一條鏈上運行,可有效降低區塊鍊和社區分裂的風險。
2.軟分叉不要求所有節點同一時間升級,而是允許逐步升級,且不會影響分叉過程中的系統穩定性。
軟分叉的缺點主要集中在以下兩點:
1.為了實施軟分叉,有時會將簡單功能的設計複雜化,從而增加了系統bug風險。
2.軟分叉設計前提是舊版本節點總是能夠接受新版本節點,一些新功能或變化對於未升級的舊版本節點來說很難被感知,某種程度上違背了單點完整驗證的原則。
總體來講,軟分叉的升級方式較為平穩。新的升級規則不會和舊規則發生衝突,只是在原有的規則之上添加實現某些新限制。用戶可以按照兼容的方式實施升級,且升級過渡較為緩和,用戶一般不會有較為明顯的使用體驗變化。
分叉會產生什麼影響?
區塊鏈分叉意味著對區塊鏈協議規則做調整修改,目的多為提升區塊鍊網絡性能,維護整個網絡安全運行。其成功與否往往會對區塊鏈整體發展產生重大影響。若區塊鏈協議所有節點及社區成員均對分叉達成共識,分叉得以順利部署實施,則區塊鍊網絡將按預期提升性能,長遠來看將推動網絡整體發展。
同時,需要強調的是,硬分叉和軟分叉都是區塊鏈協議升級的方式,無論是選擇其中哪一種,部署分叉前,分叉方案均需要參與網絡運行的各方達成一致,並就升級過程中可能遭遇的各種問題做好準備,才能保證分叉順利實施。