在这篇文章中,BitMEX研究院列出了19个比特币共识规则的变更(或者说18个,因为其中一个意外的变更“失败了”),这基本上包含了比特币历史上所有的共识规则分叉。至少有三次共识规则的变更导致了链的分裂,分别在2010年、2013年和2015年发生,分别持续了大约51、24和6个区块。
硬分叉和软分叉
首先,我们来介绍一下硬分叉和软分叉的定义。
硬分叉:共识规则在区块链有效性方面的放松,将使得一些以前被认为是无效的区块变为有效区块。现有的节点需要进行升级来跟随硬分叉出来的链。
软分叉:共识规则在区块链有效性方面的收紧,将使得一些以前被认为是有效的区块变为无效区块。现有节点不一定要进行升级。
比特币共识分叉表
注释
1. 除了1MB区块大小限制之外,在2012 BIP16 软分叉之前,没有激活方法,因此如果分叉在没有链分裂的情况下顺利发生,则不一定有特定的区块高度或日期来确定共识分叉的发生。
2.“如果你不能马上升级到0.3.6,最好关闭你的比特币节点,直到你升级了。” ——中本聪
3.在移除OP_VER之前,每次软件升级都可能被视为非确定性硬分叉,并且这些已被排除在此列表之外。如果硬分叉的定义确实包含了这个,那么它就是一个有点迂腐的定义。
4.上表中没有使用一致的定义,因为,根据具体情况,对每个事件中分叉发生日期的不同定义可能会更相关性。
5.其他人已经提到,如果P2P协议的更改使以前的软件版本无法使用,也可以将其视为硬分叉,因为它们无法再连接到网络。然而,严格地说,这些更改不会放松关于区块有效性的规则;而且,可以通过建立软件的中间版本的中继来同步旧节点。这些更改不包括在上面的列表中。
6.有些人认为BIP90是一个硬分叉,但由于它只放宽了与过去发生的软件激活相关的规则,因此它不具备通常与共识分叉相关的许多特征或风险。根据相同的逻辑,区块检查点方案也可以被视为软分叉。
7.2010年7月,链选择规则从区块数的多少改为工作量证明完成量的多少。从技术上讲,这不是对有效性规则的修改;但是,这种变化确实存在与共识规则变更相关的一些风险。
2013年的事件是硬分叉吗?
在我们看来,总的来说,在2013年3月11日的链分裂几个月后的BDB锁定限制的增加是一个硬分叉。该规则于2013年5月15日在软件版本0.8.1(2013年3月18日发布)中放宽。超过此限制的区块最晚可于2013年8月16日生产,因此可以将硬分叉的日期定义为2013年5月15日或2013年8月16日。
有些人认为,由于各种原因,这可能并不是一次硬分叉。有人认为,这条规则是“准非确定性的”,或者可以手动更改BDB配置设置。实际上,由于锁定限制的非确定性特性,也许理论上可能可以设置本地系统,从而不违反旧的BDB锁定限制。因此,如果遵循严格的定义,即要求硬分叉是确定性的,或者可能与比特币数据(如交易或区块头)直接相关,那么大家都可以说比特币中“从来没有硬分叉”了。
在讨论这一事件时,比特币开发人员Gregory Maxwell说:
“你实际上可以采用一个预先的BIP-50节点并完全同步区块链,我几个月前用0.3.24做了这个。除非你也更改了BDB配置,否则它将无法可靠地处理涉及大区块的重组。因此,这是否是一个硬分叉还有争议,因为它是准非确定性的。以前旧版本会被卡住并且在此之前停止同步区块链的bug已经修复了…所以我认为如果通过一个非常强大的定义来创建一个违反先前版本规定的规则的区块链,我们就不会有硬分叉了。”
2015年7月的链分裂事件
在上面的共识规则更改列表中,有三个事件导致明确的链分裂。最近的一次发生在2015年7月4日,即BIP66 软分叉升级期间。
在激活BIP66之后,立即创建了一条有六个区块的孤链,因为矿工生成了一个无效区块,但其他一些矿池没有将其识别为无效,因为它们没有在验证新的区块。
在这种情况下,一些矿工表示支持BIP66软件,但实际上没有升级他们的节点进行验证。如果矿工一直在验证区块,他们会发现区块无效并拒绝了。相反,一些矿工建立在无效区块之上并且发生了链分裂。
下面图表解释了这个6个区块以及链分裂。