十分鐘區塊鏈系列09:軟分叉和硬分叉

買賣虛擬貨幣

2019年12月23日凌晨,國產公鏈專案NULS團隊賬戶遭遇駭客攻擊,丟失了200萬枚NULS。於是NULS團隊決定在878000區塊高度進行硬分叉處理。硬分叉之後,未進入市場的NULS將會被永久凍結,也就是相當於被銷燬了。

大家熟知的以太坊曾發生過著名的TheDAO合約漏洞攻擊事件,應對是採用硬分叉,最終分叉出ETC(以太經典)和ETH,最終這兩個幣種都成為了全球前20的加密幣種,堪稱經典的硬分叉案例。

那麼,什麼是區塊鏈的分叉呢?什麼是軟分叉?什麼是硬分叉?他們的區別又是什麼呢?本文就帶大家看看這些問題。

為什麼會分叉?

軟體升級大家肯定也遇到過,比如APP。有些應用要求你強制升級,否則沒法繼續使用。有些則是可以選擇性升級,只是沒法使用一些最新的功能。

普通的APP比如微信、支付寶,資料都儲存在騰訊、阿里的伺服器,也就是有一箇中心保管資料,所以他們可以讓你強制升級APP,不升級就讓你沒法使用APP,這些都是可以做到的。

區塊鏈的最大特點就是去中心化,區塊之間相連構成一條鏈,分散式記賬,沒有中心。這些特性的存在會導致不同的區塊之間的版本沒法保持一致。



比如如圖,區塊2釋出了新的版本,增加了一些新的資料,有些使用者升級了版本,部分沒有,此時軟體依然在不斷的打包,導致出現兩條不同的區塊鏈,這就是分叉。

總結下來,區塊鏈分叉是因為版本不一致和區塊鏈的去中心化特性共同導致的結果。

分叉的情況

程式設計師在開發的時候,比如微信的伺服器程式設計師,給大家寫了一個介面(你可以理解為拿資料的一個源),用在使用者獲取頭像、ID資訊等的地方。

後面為了開發新的需求,比如聖誕節加個聖誕帽啥的,需要增加一個聖誕帽的圖片網路地址。

關於介面的實現可能會有兩種方案。第一種是相容模式,在原介面上加了一個欄位,客戶端只需判斷這個欄位是否是空,然後去顯示聖誕帽。第二種是非相容模式,開發了一個新的介面,不維護原來的介面了,導致APP不升級的使用者進入個人主頁就閃退,因為拿了廢棄的介面。

在區塊鏈領域,也可以根據新版本節點和老版本節點的相容性細分分叉的情況。

1、新版本節點認可老版本節點發出的區塊/交易合法

新版本節點認可老版本節點,也就是相容了老版本,能接受老版本發出的區塊資料。

但是反過來,老版本一定不能相容新版本嗎?答案是不一定。比如開發老版本的時候就預料到這個情況,於是留了一個備用的欄位,只是沒用到,後面新版本就使用了這個欄位,也就是兩者的資料結構依然一致,這種情況是能相容的。這種場景會導致區塊鏈中節點的資料同時含有新老區塊。

2、新版本節點認為老版本節點發出的區塊/交易不合法

從上面的的分析可以知道,老節點依然可能接受新節點的區塊,但是新節點不接受老節點的區塊資訊。

這樣導致的結果就是老節點可能包含新節點的資訊,但是新節點完全和老節點沒有關係了,相當於是新開了一條鏈。

軟、硬分叉

以上關於新版本節點和老版本節點的關係,換個角度其實也就是老節點能否認識新節點產生的區塊資訊。

1、軟分叉



老節點能接受新節點挖出的新區塊,礦工繼續原來的操作,鏈還是同一條。簡單來講,軟分叉向前相容。

2、硬分叉

新版本的軟體,無法相容老版本。老節點無法接受新節點挖出的區塊鏈,導致新區塊鏈產生,一條鏈成了不相干的兩條鏈,一條是新的,一條是舊的。簡單來講,硬分叉不向前相容。

問答

看了上面的概念,我們來回答幾個問題加深理解。

1、為什麼TheDAO事件和NULS被駭客攻擊之後都採用了硬分叉?

軟分叉向前相容,也就是新的區塊還會接受老的區塊資訊,老版本的資產可以在新版本上消費,這就達不到凍結駭客資產的目的了。而如果採用硬分叉,可以把被盜資產轉到一個新的地址,奪回被攻擊的幣。

2、分叉的優缺點

區塊鏈本身具有去中心化,不可篡改的特性,分叉其實是新增新的方案,有悖於區塊鏈本身的特性。這其實也是TheDAO事件,ETH變成了ETC和ETH的原因,因為雙方各執一詞。有人覺得要尊重區塊鏈本身,攻擊屬於智慧合約的漏洞,已經發生了,就不應該再修改。有人覺得攻擊是違法的,應該遵守法規。

從另外一個角度來看,區塊鏈的發展也比較初級,很多東西需要完善,分叉是一個很好完善方式,也無可厚非。

一撇認為分叉有時候是必要的,也沒必要死磕、神話區塊鏈的不可篡改性,應該靈活應對。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;