天天看點

第18課 軟分叉與硬分叉(比特币的分叉:BCC與BTC)

本人新書出版,對技術感興趣的朋友請關注:

第18課 軟分叉與硬分叉(比特币的分叉:BCC與BTC)

https://mp.weixin.qq.com/s?__biz=MzU3NjU3NjYxMA==&tempkey=MTAwMV9kVTZyRytrVFBhdE1GNEhjTXhqU3dYS3dhU0ZEM013eHNoT2RvX2pmRXBvclV3WGJQZjE3WlpoM3VfZUFpQU5lRFZCVWxyTTVKQ19JMHBIal8tUjdPNDYzRFdBdXRBSDlRMUFPLVIwVzJtdGVySzB5Vi1vRVdzbnZfZlBLZGlSRVFDVDVxRXVvXy05WVI0dEpmd2YtVGxOWmF3U05WRFlLTGNFSjN3fn4%3D&chksm=7d108f6e4a67067869dce1d62c221751eb923428893abede4f92c52c436519fa6afd262182fb#rd

在第6課 分叉與51%算力攻擊中,我們提到了“分叉”的概念,分叉是比特币網絡裡面一個常識性的、而有非常重要的概念,是以在接下來将隔離見證之前,很有必要對“分叉”這個東西進行一個稍微深入的剖析。

臨時分叉(算法導緻的分叉)

在第6課中,我們說到多個節點可能同時挖出1個新區塊,然後各自向外廣播,這個時候整個區塊鍊就出現了臨時分叉。

不過由于POW算法的保證(或者說所有節點都遵守POW算法的協定),這種臨時分叉會很快消失掉,所有節點都會不斷監聽網絡,保證自己在最長的那條鍊上面來挖礦,避免自己挖出的區塊在一個短的鍊上,白浪費算力。

而下面要講的2種分叉,就不是臨時分叉了,不是POW算法能保證的。

軟分叉

我們知道比特币網絡是1個P2P網絡,每個節點部署了1個比特币網絡的用戶端,類似BT下載下傳軟體。

既然是軟體,就避免不了要更新,不管是釋出新Feature,還是說Bug Fix,軟體必然是要一版有一版的更新。

但問題就來了:全球那麼多節點,不可能所有節點的用戶端軟體都同時更新。必然有的節點在用老版本的,有的節點在用新版本的,這個時候,軟體相容性問題就來了。

所謂軟分叉,就是指這次更新是“前向相容”的(forward-compatiable)。有的用戶端更新到了新版本,有的用戶端還用老版本,老版本的用戶端可以正确處理新版本用戶端産生的資料。具體點就是,新版本産生的Block和Transaction,老版本的節點能正确處理;反過來,當然同樣可以。

是以大家可以看到:軟分叉其實并沒有分叉,還是1條鍊,隻是這條鍊上面的Block有不同的版本。 軟分叉這個詞,主要是相對接下來要講的“硬分叉”來說的。

軟分叉看起來很好,新舊版本一起工作,但它也有很多争議。

軟分叉的争議點:

(1)軟分叉加大了技術複雜度。我在設計新版本的一緻性協定的時候,還要考慮這個協定要被老版本的相容,因為曆史包袱,設計自然帶有折中妥協。導緻新版本的代碼可維護性變差,自然出Bug的概念變高,安全性變差。

(2)軟分叉更新不能復原

舉個例子:現在整個網絡所有節點的版本都是v1,然後某些節點更新到了v2,在v2這個版本上面成交了一些Block和Transaction。

但現在你發現v2這個版本有個安全的Bug,你要復原v2,讓所有節點都回到v1。那v2上面挖出的Block和Transaction,在v1版本上面雖然可以驗證通過,但其實是放松了限制的,這會導緻安全問題。是以這就意味着v2上面挖出的Block和Transaction要廢棄。

硬分叉

硬分叉就比較容易了解了,新釋出的版本和舊版本不相容。意味着:

要麼所有節點都更新到新版本,這樣整個網絡還是1條鍊;

要麼一部分節點用舊版本,一部分節點用新版本,大家互相不認可對方挖出的Block,整個網絡分裂成2條鍊,這相當于發行了一種新的貨币!!!

而這就要說到比特币的2大門派:隔離見證派 與 礦池派的撕逼大戰,也正是這場撕逼大戰,導緻現在的比特币出現了1次硬分叉,搞出了2種貨币:舊的BTC(Bitcoin Core) 與 新的BCC(Bitcoin Cash)。

關于這場撕逼大戰,後面将詳細講述,敬請期待。

下面這張示意圖,可以很形象的看出硬分叉與軟分叉2者的差别:

相關連結:

《第17課 交易延展性(Malleability)攻擊 – 門頭溝(前世界第1大比特币交易所)倒閉之罪魁禍首》

《第16課 閃電網絡(Lightning Network) 之 HTLC》

繼續閱讀