第18课 软分叉与硬分叉(比特币的分叉:BCC与BTC)

有兴趣朋友也可以进一步关注公众号“架构之道与术”, 获取原文。 或扫描如下二维码: 这里写图片描述

在第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》