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

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

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

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

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

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

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

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

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

  除了 1MB 区块大小的限制之外,在 2012 BIP16 软分叉之前,没有任何的激活方法,因此如果分叉可以平稳的发生而不导致区块链分拆,则不一定有特定的共识分叉区块高度或发生日期。

  “如果你不能立即升级到 0.3.6 ,最好在那之前关闭你的比特币节点。” – 中本聪(资料来源)

  在删除 OP_VER 之前,每个软件升级都有可能被认为是一个非确定性的硬分叉,而这些情况已经被排除在这个清单之外。如果硬分叉的定义包括上述的情况,那么它的定义便太过迂腐了。

  在上表中我们没有使用一致的定义,因为例如,根据具体情况,分叉的发生日期在每个事件中的定义根据该事件的情况都有所不同。

  其他人也提到, P2P 协议的改变也可以被认为是硬分叉的一种,如果它们使以前的软件版本无法继续使用,使之前软件版本不再连接到网络。但严格来说,这些规则并没有放宽任何区块的有效规则,而是可以通过建立软件过度版本来同步旧节点。这些更改不包括在上面的列表中。

  有些人认为 BIP90 是硬分叉的一种,然而由于它只是放松了过去发生的与软分叉激活相关的规则,所以它并不具备许多与共识分叉相关的特征或风险。

  在 2010 年 7 月,区块链选择规则被改变了,由区块的数量转移到的累积工作量。从技术上讲,这不是区块有效性规则的变化,但是这种变化的确存在一些与共识规则变化相关的风险。

  我们认为,总的来说,发生在 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 锁定限制从未被突破。因此,由于透过非常严格的定义,要求硬分叉是确定性的,甚至可能与比特币数据(如交易或区块头)直接相关的,人们可以做出比特币“从来没有硬分叉过”的声明。

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

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

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

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

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

  您投送的稿件违反了金色财经的投稿协议,现已关闭您的投稿功能,如有异议请发邮件至进行申诉。

分享: