第七章 去中心化自治组织(DAO)

1.5 什么是分叉

区块链里面有三种形式的分叉。

第一种是经常发生但大家都熟视无睹的。这种分叉是去中心化共识的副产物,只要两个矿工几乎同时完成记账的区块就会发生分叉。当后续的多个区块链接到其中一个区块,使这个链最长,另一个区块或其小分叉就会被网络“孤立”以至“抛弃”掉。这种形式的分叉是常见而且正常的,一般我们在讨论分叉时很少提及它。

另外两种分叉则是基于共识层面而产生的,它们需要社区谨慎处理,因为它们在社区无法达成共识时,有可能造成社区和项目的分裂。

软分叉

软分叉是在原有的规则范围内强化既有规则。譬如新规则单纯将区块的大小由1MB 减小到500K,因原有的规则为区块的大小未超过1MB就是有效的区块,所以未升级的节点会继续将新交易视为有效。然而未升级节点继续挖出的1MB区块将被已升级节点视为无效区块而被拒绝。这也就是说,旧节点无法觉察到协议的变化,不能发现软件已升级,从而继续参与新节点用新协议所挖出的区块的验证工作,但旧节点矿工将无法在新区块上继续添加新节点矿工视为无效的区块,旧节点矿工无法获得对应工作的收益——如果社区未达成共识,多数节点(实质为多数算力)拒绝升级,那么其分叉方案就可能对社区造成伤害。

那么部署一个成功的软分叉,因为需要网络的大部分算力的支持,最好是在达成社区共识的前提下进行。缺乏充分共识的软分叉并不可取。

硬分叉

硬分叉是改变原有的规则,引入不兼容旧软件的新规则。譬如将区块的大小上限由1MB 增加到8MB,没升级的节点会将新区块视为无效,因此未升级节点无法协同已升级节点的工作,和软分叉不同的是矿工马上会发现这一问题!从这个角度说,硬分叉更透明更清晰些。

业界有一种认识上的误区,认为只有软分叉是向后兼容的。实际上无论哪种分叉,都是必须是向后兼容的。“向后兼容性”是指新的软件或协议接受原有的旧格式的数据,只是软分叉到了分叉的哪个时间点后,新的软件或协议将不一定接受旧格式的数据。

比特币此前就曾因代码bug被利用等情况而经历多次的软硬分叉。以太坊也曾经几次硬分叉,并且它现在正在通过硬分叉解决其交易拥堵等诸多问题。