比特币共识分叉的完整历史

摘要:在这篇文章中,我们列出了 19 个比特币共识规则的变化(或 18 个,有一个意外 “失败” 了),这呈现了几乎所有我们认为比特币历史上的重要事件。这些事件中至少有 3 次造成了可识别的区块链分叉,分别持续了大约 51 , 24 和 6 个区块,这些事件分别发生在 2010 年, 2013 年和 2015 年。

资料来源:gryb25

 

专用术语

名称 释义
区块链分叉 区块链分叉,导致原区块链分拆成两个各自独立的区块链。这可能由硬分叉,软分叉或其他原因造成。
共识规则变更
硬分叉 放宽区块有效性的共识规则,以致以前认为无效的一些区块现在被认为是有效的。

现有节点需要升级才能整合到新的硬分叉区块链。

软分叉 收紧区块有效性的共识规则,以致以前认为有效的一些区块现在被认为是无效的。

现有节点不一定需要升级也可以整合到新的软分叉区块链上。

备注:我们相信这些条款起源于 2012 年 4 月,并在 BIP99BIP123 中正式确定

 

比特币共识分叉列表

日期 启动区块 BIP  号或软件版本 注释 类别 结果
2010 年 7 月 28 日 不适用 1 0.3.5 OP_RETURN 被禁用。修复一个让任何人可以支出任何比特币的重大缺陷 软分叉 在升级过程中没有证据表明有出现任何问题
2010 年 7 月 31 日 不适用 1 0.3.6 禁用 3 OP_VER 和  OP_VERIF 软分叉 有些用户在升级时遇到了问题,建议在不能升级的情况下 关闭节点
添加 NO_NOP 函数,尽管在这之前可能没有使用过 NO_NOP 硬分叉
2010 年 8 月 1 日 不适用 1 0.3.7 分离 scriptSig 和 ScriptPubKey 的评估。修复一个让任何人可以支出任何比特币的重大缺陷 潜在非确定的硬分叉 在升级过程中没有证据表明有出现任何问题
2010 年 8 月 15 日 74,638 0.3.10 在 1,845 亿比特币支出事件发生后,修复过量支出程序错误

当初交易时输入的 0.5BTC 仍未被支出

软分叉 区块链分叉了。 事件发生后 5 个小时,解决方案客户端 0.3.10 出台。我们相信在 “好区块链“ 夺回 PoW 领先之前,”坏区块链“ 上产生了 51 个区块
禁用 OP_CAT , 删除了 DoS vector, 同时禁用了 14 个其他功能 软分叉
2010 年 9 月 7 日 不适用 1 0.3.12 以不正確的方式添加 20,000 簽名操作限制。這個不正確的限制今天依然存在 软分叉 在升级过程中没有证据表明有出现任何问题
2010 年 9 月 12 日 79,400 不适用 添加 1MB 区块大小限制。

在 2010 年 7 月 15 日认可的“MAX_BLOCK_SIZE = 1000000” 是源于 2010 年 7 月 19 日 0.3.1 rc1 的软件版本。 认可的 1MB 规则在 2010 年 9 月 7 日执行,从第 79,400 个区块开始启动。在 2010 年 9 月 20 日,中本聪删除了这个启动规则,但保留了 1MB 的限制规则。

软分叉 在升级过程中没有证据表明有出现任何问题
2012 年 3 月 15 日 171,193 BIP30 不允许使用相同的 TXID 进行交易,除非较旧的交易完全用完。  2012 年 9 月,该规则已在所有区块中实行,除了 91,842 和 91,880 区块违反了该规则 软分叉 这是软分叉公布日,没有证据表明有出现任何问题
2012 年 4 月 1 日 173,805 BIP16 支付 Script Hash (P2SH)- 这允许交易发送到 script hash (地址开头为 3 )而不是公匙哈希(地址开头为 1 ) 软分叉 在 2012 年 2 月 1 日之前的 7 天内,激活率达到 55% 。矿工们升级的速度不够快,所以评估时间推迟到 3 月 15 日。运行 0.6.orc1 的用户延迟升级,当他们的无效交易节点被挖掘时,导致过早启动软分叉,卡在了区块 170,060 。 45% 的矿工生产无效区块形成的启动问题在软分叉后延续了几个月。
2013 年 3 月 24 日  227,835 BIP34 需要在 coinbase 交易中包括区块高度 软分叉 95% 的激活率。完成成功部署。
2013 年 3 月 11 日 225,430 0.8.0 这是由 Berkeley DB 迁移到 Level DB 引起的一个意外硬分叉,它意外的删除了未知的 10,000 BDB 数据库锁定限制。这导致了在 2013 年 3 月 1 日发生的一个区块链分拆,尽管导致错误的程序是在 20 天前发布的,也就是 2013 年 2 月 20 日。当比特币经济和矿工用回 0.7.2 规则,该变更也被切换了。 共识规则没有发生变化 发生了至少涉及 24 个区块的区块链分叉, 0.8.0 区块链上起码领先了 13 个区块。同时发生了成功重复支出的情况。初始规则的区块链最终重新取得领先 PoW
2013 年 3 月 18 日 不适用 1 0.8.1 这是一个临时的软分叉,导入了一个新的规则,要求区块中的输入引用不超过 4,500 个 TXID ,这个规则要比 10,000 BDB 锁定限制更严格。该规定于 2013 年 5 月 15 日过期,一个硬分叉发布日。 软分叉 没有证据表明有任何问题
2013 年 5 月 15 日 或 2013 年 8 月 16 日  252,451 或之前 BIP50 在 2013 年 8 月,可能产生了一个违反了原先 10,000 BDB 锁定限制规则的区块,该规则在 2013 年 5 月 15 日放宽了。 硬分叉 没有证据表明有任何问题
2015 年 7 月 4 日  363,731 BIP66 严格的 DER 签名 – 这种升级意味着比特币不再依赖于 OpenSSL 的签名解 软分叉 在 1.000 个区块的区间内达到 95% 的采用率。由于一些矿工表示支持 BIP66 ,但还没有升级,而且用 SPY 开采,所以发生了区块链分拆,持续了 6 个区块。最终新的软分叉规则夺回主动权。
2015 年 12 月 14 日  388,380 BIP65 检查锁定时间认证 – 这可以锁定资金直到将来的某个指定时间。这是比特币的一个新功能 软分叉 成功推出达到 95% 采用率
2016 年 7 月 4 日  419,328 BIP68
BIP112
BIP113
相对锁定时间

取消使用未来的时间戳来抓取过去交易时间中位数激励

软分叉 成功推出获得 95% 采用信号
2017 年 7 月 23 日   477,800 BIP91 这个临时软分叉标识出了 SegWit 升级的必要性 软分叉 尽管只有极少数用户采用了 BIP91 规则,但软分叉在 336 个区块区间内达到了 80% 的采用率。因此区块链分拆的风险在这段时间内更高了。
2017 年 8 月 1 日  478,479 BIP148 此临时软分叉在 2017 年 8 月 1 日之后的两周时间内标识出 SegWit 升级必要性 软分叉 尽管只有极少数用户采用了 BIP91 规则,软分叉公布日似乎成功且没有问题。因此区块链分拆的风险在这段时间内更高了。
2017 年 8 月 24 日  481,824 BIP141
BIP143
BIP147
隔离见证升级 软分叉 成功推出获得 95% 采用信号
2262年 13,440,000 BIP42 修正了 21 万个加密货币供应上限的错误。该软件已于 2014 年 4 月升级,以解决这个错误,但新的规则在到 23 世纪前都不适用。 软分叉 软分叉仍然不适用

资料来源:BitMEX 研究,Github,比特币区块链

 

备注:

  1. 除了 1MB 区块大小的限制之外,在 2012 BIP16 软分叉之前,没有任何的激活方法,因此如果分叉可以平稳的发生而不导致区块链分拆,则不一定有特定的共识分叉区块高度或发生日期。
  2. “如果你不能立即升级到 0.3.6 ,最好在那之前关闭你的比特币节点。” – 中本聪(资料来源
  3. 在删除 OP_VER 之前,每个软件升级都有可能被认为是一个非确定性的硬分叉,而这些情况已经被排除在这个清单之外。如果硬分叉的定义包括上述的情况,那么它的定义便太过迂腐了。
  4. 在上表中我们没有使用一致的定义,因为例如,根据具体情况,分叉的发生日期在每个事件中的定义根据该事件的情况都有所不同。
  5. 其他人也提到, P2P 协议的改变也可以被认为是硬分叉的一种,如果它们使以前的软件版本无法继续使用,使之前软件版本不再连接到网络。但严格来说,这些规则并没有放宽任何区块的有效规则,而是可以通过建立软件过度版本来同步旧节点。这些更改不包括在上面的列表中。
  6. 有些人认为 BIP90 是硬分叉的一种,然而由于它只是放松了过去发生的与软分叉激活相关的规则,所以它并不具备许多与共识分叉相关的特征或风险。
  7. 2010 年 7 月,区块链选择规则被改变了,由区块的数量转移到的累积工作量。从技术上讲,这不是区块有效性规则的变化,但是这种变化的确存在一些与共识规则变化相关的风险。

 

2013 年事件算是硬分叉吗?

我们认为,总的来说,发生在 2013 年 3 月 11 日之后几个月, BDB 锁定限额的添加算是一个硬分叉。有争议的规则是 10,000 BDB 的锁定限制,这是添加。该规则于 2013 年 5 月 15 日2013 年 3 月 18 日发布的软件版本 0.8.1 中放宽。超过此限制的区块可能最终于 2013 年 8 月 16 日生产。因此,该硬分叉的日期可以是 2013 年 5 月 15 日或 8 月 16 日,取决于您如何定义它。

 

虽然有些人认为这可能不算是一个硬分叉,原因可以有很多,包括觉得这个规则是 “半非确定性” 的,或者可以由手动改变 BDB 配置的设置。事实上,由于锁定限制的非确定特性,理论上有可能存在一个本地系统设置,使得旧的 BDB 锁定限制从未被突破。因此,由于透过非常严格的定义,要求硬分叉是确定性的,甚至可能与比特币数据(如交易或区块头)直接相关的,人们可以做出比特币“从来没有硬分叉过”的声明。

 

在讨论这个事件时,比特币开发者 Gregory Maxwell 说:

 

那里有一个混合包,实际上你可以拿一个 BIP-50 节点,并且完全同步区块链,我最近几个月前用 0.3.24 做了这个尝试。它只是不会可靠地处理涉及大区块的,除非您更改 BDB 配置。所以,如果这到底是不是一个硬分叉还是有争议的,因为它是非确定性的。之前有一些错误修复,旧版本会被卡住,并在此之前停止同步链接。所以我认为如果给予一个非常强大的定义,就是以创建一个违反了先前版本规定的规则的区块链来看的话,我们从来没有硬分叉过。

 

资料来源:https://bitcointalk.org/index.php?topic=702755.msg8116032#msg8116032

 

2015 年 7 月区块链分拆事件

在上述共识规则变化清单中,有三次事件造成了可识别的区块链分拆。最近一次发生在 2015 年 7 月 4 日,在 BIP66 软分叉升级期间发生。

在 BIP66 激活之后,立即产生了一个 6 的区块的孤儿链,因为矿工产生了无效区块,而其他矿池并没有被认定该为无效区块,因为它们并没有在验证新区块。

在这种情况下,一些矿工表示支持 BIP66 软分叉,但实际上并没有升级他们的节点来验证这些区块,可以说矿工是 “假表态”。如果矿工已经开始验证区块,他们会发现区块无效且拒绝这些区块,然而一些建立无效区块的矿工和一个无效区块分支却出现了。

下图显示说明了这 6 个区块和区块分叉的图表。

 

2015 年区块链分拆图表

资料来源: Blockchain.info (http://archive.is/WqGRp,http://archive.is/LHlF7)

 

免责声明

虽然在这篇文章中提出了许多说法,但我们并不保证准确性。我们可能犯了错误或者意外地忽略了列表中的共识规则更改。我们欢迎更正。

 

备注

在这篇文章发表之后,比特币维基上发布了另一个共识版本清单。

 

 

欢迎转载,请注明文章来自

BitMEX (www.bitmex.com)