如前述文章所讨论,区块链通过分布式的节点网络,协作验证事务和存储信息。本质上,区块链上的信息不可更改,也就是说,一旦数据经过验证并添加到链中,任何人都不能更改或删除它。尽管如此,开发人员有时不得不对区块链的代码进行更改,要么是为了升级,要么是为了修复某些问题。这个复杂的过程,便是区块链分叉。它对区块链而言究竟意味着什么呢?
区块链百科No.51:区块链分叉
区块链分叉
分叉,并不是区块链的专有名词。
在软件工程中,当开发人员从一个软件包中获得一份源代码副本,并基于此开始独立开发,从而创建另一个软件程序时,就会出现一个独立的项目分支。
区块链分叉就像是应用程序的升级更新。
对于中心化的系统,其升级比较简单,可分为:服务器升级和终端升级。对于服务器升级来说,只要在后台部署好,即可一键升级;对于终端升级来说,可以选择在软件库或应用商店直接升级。并且,终端版本的不一致并不会影响客户使用其服务。
对于区块链这种去中心化的系统,其升级比较复杂。由于其没有中心机构,没有中心服务器,每次“代码升级”都需要获得网络参与者的一致认可,如果大家无法达成一致,区块链就会形成分叉,即终端版本不一致。这里需要注意的是:终端版本的不一致,可能会影响客户使用其服务。
简单来说,分叉会在以下情况下发生:
任何时候,两个“矿工”(记账权争夺者)几乎同时发现一个区块。
开发人员,试图改变决定交易是否有效的规则。
当然,并不是所有的分叉都会成功。不同矿工在大致相同的时间生产一个区块是很常见的,这就在区块链中创建了一个明显的分叉,如下图所示。但当新的替代块是由一个不可靠的矿工生成时,系统会一致认为这个块是无效的,并且这个“孤立块”很快就会被其他矿工抛弃。只有在新的协议得到部分人的一致认可时,这条分叉链才算真正形成。
本质上,区块链分叉是对协议的更改。因为区块链是建立在共同规则之上的,所以改进它们的最简单的方法,似乎就是引入新的规则或改变现有的规则。长期以来,这种机制被认为是危险的,或者至少是破坏性的,但对于升级区块链来说,它也是一种更直观的机制。
这就像我们走在一条路上,到达一个交叉路口,面前是两条分岔路。我们可以选择其中一条路,这并不会影响此前的旅程。由于两条分岔路的不同性质,不同选择将把我们带向不同的终点。
硬分叉与软分叉
尽管有相似的名称,但根据新旧版本是否可以交互,区块链分叉可分为两种类型:硬分叉和软分叉。
硬分叉
硬分叉是引入一套全新规则,它与旧的网络协议互不兼容。换句话说,硬分叉是一种向后不兼容的升级。所有网络参与者都必须升级到最新版本,遵循新的一致规则,以便继续验证和验证新的事务块。当然,在硬分叉的情况下,如果仍有人对旧版本持续支持,那么两个区块链可以同时存在:一个使用旧规则,另一个使用新规则。
硬分叉即可以是有计划的硬分叉:这通常是指在硬分叉出现之前,项目开发人员和社区已经达成了高度的共识,事先已经有明确的升级协议。例如Monero公司在2017年1月推出的“硬分叉”,它增加了一项新的隐私特性,即环机密交易(Ring Confidential Transactions, RingCT)。
它也可以是有争议的硬分叉:当项目中各参与方(包括:项目开发人员、网络用户和节点)之间存在严重分歧时,就会出现这种类型的硬分叉。著名例子是比特币现金硬叉,2017比特币被分成两个独立的链——最初的比特币(BTC)和新的比特币现金(BCH)。这是因为社区的部分人认为,将比特币的区块大小从1MB增加到8MB将使网络上的交易处理速度更快。
软分叉
通常来讲,软分叉是一种向后兼容的升级。这意味着软分叉不需要网络上的节点升级来维护一致性,它一般只是添加一个与旧规则不冲突的新规则。因此软分叉区块链上的所有块都遵循旧的一致性规则集以及新的一致性规则集。
例如,块大小(每个块中保存的数据量)变化可以通过软分叉来实现。如果你只想接受小于一定大小的块,那么只需要拒绝较大的块即可。
但实际上,符合旧规则集节点产生的块将会违反新规则集,因此很可能会随着新节点的增多而变得陈旧。这是因为,要让“软叉”发挥作用,大家会承认并执行一套新的共识规则。如果达到了这一比例,那么旧的区块链就会被淘汰,而新的区块链就会被认可为“真正的”区块链。
可以看出,无论是硬分叉还是软分叉,其持久性取决于规则变化的性质以及与资源的相对分配。但分叉自身所带来的创新突破,将助力于区块链技术的发展。