深入比特币原理(十三)硬分叉与软分叉

不像传统软件的升级,一个分布式共识系统的升级是非常困难的,需要协调好所有的系统参与者。每次升级可能会伴随着区块链的共识规则改变,这会导致整个网络中升级了软件的节点与未升级软件的节点运行在不同的规则下,于是分叉就产生了。

硬分叉

如果区块链软件的共识规则被改变,并且这种规则改变无法向前兼容,旧节点无法认可新节点产生的区块,即为硬分叉。

这时候旧节点会拒绝新规则的区块,于是新节点和旧节点会开始在不同的区块链上运行(挖矿、交易、验证等),由于新旧节点可能长期存在,这种分叉也可能会长期持续下去。

上图中Block 4a与Block 4b是自然分叉的结果,最终在Block 5整个区块链达成了最终一致性(详细可见《深入比特币原理(十二)》)

假设当区块链扩展到Block 6时发布了改变共识规则的新客户端版本,于是运行不同客户端的节点出现分歧:

运行新版本的矿工将接受新规则下产生的区块Block 7b;
运行旧版本的矿工由于不能认可新规则,将拒绝Block 7b,并挖出基于旧规则的Block 7a;
此时区块链即发生了硬分叉,新旧矿工将在各自的区块链上进行挖矿,他们的去留将决定两条链的生死和价值。

硬分叉的过程

1.开发者发布新的客户端,新的客户端改变了区块链的共识规则且不被旧客户端兼容,于是客户端软件出现了分叉(software fork)。
2.区块链网络中部分节点开始运行新的客户端,在新规则下产生的交易与区块将被旧节点拒绝,旧节点开始短暂的断开与这些发送被自己拒绝的交易与区块新节点的连接,于是整个区块链网络出现了分叉(network fork)。
3.运行新客户端的矿工开始基于新规则挖矿,并会接受新规则下的交易与区块,于是运行不同客户端版本的矿工算力出现了分叉(mining fork)。
4.运行新客户端的矿工开始挖出基于新规则的区块,而旧客户端的矿工仍然会挖掘基于旧规则的区块,于是整个区块链出现了分叉(chain fork)。

硬分叉的两面性

在没有得到几乎所有生态中的参与者同意的情况下,硬分叉很可能会分裂整个比特币生态,所以这是一种极具争议和危险的区块链升级技术。整个比特币社区对于硬分叉非常谨慎,到目前为止,比特币一共发生过两次软件升级造成的硬分叉,但都是意外情况(软件BUG)引起,最终矿工们通过回退或全体升级达成了一致使事态影响没有扩大。

但我认为硬分叉在未来关键的时刻将发挥巨大的作用,是比特币可以长期发展的根基。

可以预见当比特币即将遭遇重大风险,甚至灭顶之灾时,这时候整个比特币生态由于利益相关很容易就会达成共识,对比特币客户端进行升级以避免危机。

举个形象的例子,如果有一天人类可以移民火星生活,一定会有人站会出来说人类不应该移民火星,因为那样分裂了人类社会。但如果有一天地球资源枯竭,无法满足人类生存的时候,相信几乎所有人都会达成要移民的共识。

现在经常会听到各种比特币死亡论,比如量子计算机的发展,比特币密码算法被破解等等,很多专家信誓旦旦的宣称“如果发生XXX情况,比特币就死亡了,所以比特币没有未来”。

现在你了解了硬分叉的存在,相信你可以理解要解决这些问题在技术上并不困难,在一个去中心化的系统中困难的是达成共识。要达成共识大部分时候可能很困难,但有时候也可能很简单。

软分叉

如果区块链的共识规则改变后,这种改变是向前兼容的,旧节点可以兼容新节点产生的区块,即为软分叉。

实际上,软分叉通常刚开始并不会产生两条区块链,因为新规则下产生的块会被旧节点接受,旧节点只是无法识别新规则的真实意义。所以新旧节点仍然处于同一条区块链上,对整个系统的影响也就较小。

软分叉在比特币历史上发生过多次,这里以BIP-34举例:

我们在《深入比特币原理(十)》中说过Coinbase交易的输入中有一个字段coinbase data内容可以任意定制。BIP-34就是要求在coinbase data中必须包含块高度(Block Height)信息且将块版本(Block version)从“1”修改为“2”。

显然在旧规则下,节点并不关心coinbase data是什么内容,完全可以兼容包含块高度信息的区块,所以不会就此产生分叉。

BIP-34的升级过程如下:

1.刚开始矿工将块版本号变为“2”以表示准备好进行升级,此时并不要求coinbase data必须包含块高度信息。
2.当最近1000个区块中超过75%的版本号为“2”时,整个系统开始强制要求版本号为“2”的区块coinbase data中必须包含块高度信息。但版本号为“1”的区块仍然被所有节点接受。
3.当最近1000个区块中超过95%的版本号为“2”时,版本号为“1”的区块开始被认为无效,节点会拒绝版本号为“1”的区块,于是会逼迫最后一小部分节点进行升级。(否则完成挖矿获得的奖励将失去价值)。

软分叉提供了一种逐步升级比特币的方式,除了BIP-34,还有BIP-65、BIP-66、BIP-9等特性进行了软分叉升级,它们的升级方式也有一定的区别,有兴趣的朋友可以去文首提供的BIP链接中查看具体的升级内容和方法。

软分叉的争议

软分叉相比硬分叉虽然“温和”了不少,但由于软分叉必须向前兼容,也就是说不能增加新字段,只能在已有结构下做修改,所以升级空间有限。且软分叉同样也存在着一些争议,比如:

技术债务

软分叉相比硬分叉技术实现要复杂很多,会使区块链的代码变得更复杂,这不利于未来的代码维护,也更容易出现BUG。

验证放松

未升级的客户端视新规则下的区块为有效,但是对新规则并不进行验证,对于旧节点而言它不再能做完整的验证,似乎有悖去中心化的理念。

不可逆转

硬分叉通常是扩展共识规则,而软分叉是收紧共识规则,所以一旦进行了软分叉,想要回退就非常困难了,很可能造成硬分叉而导致资金损失。

分叉的博弈

最后我们聊一下在比特币的升级(分叉)中存在的不同“角色”,大家可以自己思考下他们各自的博弈关系。

社区开发者:这是比特币最核心的团体,没有他们孜孜不倦的贡献高质量的代码,比特币可能早就不存在了,任何的比特币核心客户端升级都需要由他们发起。可以说比特币的未来主要靠这些开发者决定。

矿工:比特币主要的既得利益者,矿工的算力支持对于比特币升级(分叉)至关重要,如果没有矿工的支持,任何升级都不可能成功。矿工越多,算力越大,去中心化程度就越高,安全性越强,往往矿工的数量与规模和数字货币的价值是呈正相关的。

交易所:早期并没有交易所的存在,但是现在交易所对于数字货币的发展越来越重要,对于一项区块链分叉,如果没有交易所的支持,矿工获得的数字货币将难以兑现,价值会大大缩水,所以交易所的支持对于分叉币或山寨币是非常关键的。

商家:也是早期不存在的“角色”,但是商家的支持对于比特币的商用化进程非常重要,如果没有任何商家愿意支持比特币,比特币要成为货币的理想将无法实现,所以商家的支持度也是未来数字货币生死的关键因素。

最终用户:一种数字货币的推广,离不开广大最终用户的支持,如果一种数字货币没有人愿意使用,那它最终也会消亡。

目前比特币分叉的博弈中前三者的影响力较大,比如社区开发者和矿工长期存在扩容的争议,BCH就是矿工单方面的分叉行为,我理解矿工是希望扩大区块的,这样他们可以收取更多的交易费,而且区块的增大会淘汰一些小矿工(需要更大的存储和更好的带宽条件);而社区开发者却希望通过二层协议(闪电网络我们将在后面单独讲解)的方式去解决扩容问题,将一些交易从链上放到链下,让比特币主网络作为一种“清算网络”,显然这对于矿工来说没有什么好处。

后两者目前的影响力有限,但是一旦数字货币技术等各方面条件成熟,商家与最终用户的选择会变得极其重要,互联网的“网络效应”会开始发挥作用,不同领域的数字货币可能出现赢者通吃的局面。


温馨提示:
1、本站所有内容皆转载自网络。2、本站所有转载内容只代表原作者观点,不代表本站立场。
3、本站所有转载内容仅供学习参考,不构成任何投资建议。
4、本站与项目方没有任何利益关系,不接受捐赠,不接受打赏。

Subscribe to nobody
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.