在这篇文章中,我们了解了硬分叉以及改变区块链中共识规则的影响。
目录:
- 简介
- 硬分叉
- 软件、网络、采矿和链式分叉
- 摘要
- 参考文献
引言
在区块链中,共识规则被用于验证交易和区块。这些规则被所有全节点采用来验证区块时,通常会产生类似的结果,这意味着如果一个节点突变了交易或区块从而破坏了共识规则,其结果将与其他节点不同,使其无效。
共识规则在短期内可能会有所不同,但从长远来看,所有网络节点必须始终保持一致,以产生类似的结果。
与改变代码本身相比,升级或改变共识规则非常困难,因为它需要所有参与者同意。
当新的规则在区块链中实施时,会有一个时期,一些节点采用新的规则,而其他节点继续使用旧的规则。在这种情况下,有两种已知的方式可以打破共识。
- 第一,使用新规则的区块被使用同样新规则的节点接受,而被使用旧规则的节点拒绝。
- 第二,违反新规则的区块被升级的节点拒绝,而被未升级的节点接受。
硬分叉
在关于区块链分叉的文章中,我们了解到分叉是指由于网络延迟或两个矿工同时解决加密难题等原因,主链分裂成两个或三个(非常不可能)。我们还学习了网络如何重新转换,以形成一个具有最多累积工作证明的单一链。
除了将网络分割成两条链之外,硬分叉也会导致共识规则的改变。与让网络节点向后兼容的软分叉不同,硬分叉要求网络的所有节点进行升级,否则它们将被废止,不能再参与区块链。
请看下面的图片,演示一个有分叉的区块链。

上面我们有两个分叉,一个在区块4,另一个在区块6。在前者的区块高度,我们看到由区块5带来的重新融合,现在分叉已经解决。随着链的继续增长,我们在区块高度6有另一个分叉。这里我们假设一个新的比特币客户端被实施。现在,所有节点都需要升级他们的客户端软件,以便参与。升级软件的矿工现在用这个新的共识协议挖掘交易,可以和客户端一起,我们有结果的区块7b有这样的交易。
任何拒绝升级其客户端的矿工将无法处理这样的交易。
这些矿工继续开采并产生区块7a
,这里所有的交易都是有效的,因为它们是基于矿工使用的旧共识规则。
在这种情况下,不存在重新转换。链b中的矿工接受并使用新的共识规则开采区块,而链a中的矿工则拒绝这些区块并开采交易以形成链a。每一组矿工都将其对应的其他区块视为孤儿区块。
软件、网络、采矿和链的分叉
在软件开发术语中,分叉*(software fork*)是指当一群开发者在一个开源项目的原始软件开发路线图上开辟出一条非常不同的道路时发生的。在区块链中,硬分叉可能是由于在旧的共识规则中发现的错误或故意改变现有的共识规则。
对于由于故意改变规则而产生的硬分叉,需要一个新的软件实现,同意的矿工必须适应并改变他们现有的客户端。
在比特币中,该软件包括比特币经典和比特币无限等。请注意,这些并没有导致硬分叉的发生。对于硬分叉的发生,新的实施方案必须被矿工、钱包、节点和所有其他形成区块链的现有基础设施采用并激活新的规则。尽管如此,我们可以有多个比特币核心的实现或软件分叉,不改变共识规则,并共存而不引起硬分叉。
共识规则可以在很多方面有所不同,例如,如何验证交易或区块,以及如何应用于比特币脚本和数字签名等等。
硬分叉的发展分为四个阶段,分别是软件分叉、网络分叉、采矿分叉和链式分叉。硬分叉是在有一个具有不同规则的客户端的替代实现时开始的。当部署时,一些矿工、钱包用户和中间节点可能会采用并执行它。由此产生的分叉取决于规则是否适用于交易、区块和数字签名等网络方面。
例如,如果分叉适用于区块,那么当一个新区块在新规则下被开采时,分叉过程就开始了。如果分叉涉及到网络上的交易,那么创建交易的钱包就会催生网络分叉,然后在交易被开采成区块时进行硬分叉。
一开始,网络会分叉,然后基于以前的共识规则的节点拒绝任何以新规则创建的交易。同时,在旧规则下工作的节点禁止并使执行新规则的节点无效。
在这种情况下,网络分裂成两条链。在这里,旧节点连接到使用旧规则的旧节点,新节点连接到使用新规则的新节点。
当使用新规则的矿工挖出一个区块时,矿权和链也分叉。由此产生的分区网络确保了按照旧规则操作的矿工不会收到使用新规则开采的区块,而按照新规则操作的矿工不会收到使用旧规则的矿工的区块。
总结
共识规则用于验证交易和区块。当链上的每个节点使用时,预计所有节点都会得出相同的结论。如果一个节点没有得出相同的结论,那么它就会被其他节点拒绝。
软分叉是向后兼容的,这意味着新旧节点仍然可以参与并相互通信,硬分叉要求网络中的所有节点进行升级,否则那些不升级的节点将被废止,不能再参与区块链。
由于故意改变规则而产生的硬分叉需要新的软件实现,同意的矿工会改变他们现有的客户端软件。