区块链/等级 III · 网络/3.3 共识与治理/课程 3
软分叉与硬分叉
有效性的不对称:为何收紧规则是安全的,而放宽规则会使链分裂
材料具备历史链数据的区块浏览器用于查看提案状态的 GitHub 上的 BIP 仓库
好奇
- 为什么网络可以实施更严格的规则,而无需强制所有节点同时升级?
- 2017年8月,究竟是哪种具体的结构变化导致了比特币现金从比特币中分裂出来?
- 2013年3月的一个软件漏洞,是如何造成两条无人有意制造的相互竞争的链的?
探索
- 软分叉收紧共识规则。在新的、更严格的规则下有效的区块和交易,在旧的、较宽松的规则下依然有效。这种向后兼容性意味着未升级的节点会继续接受这条链,而已升级的节点则执行新的约束。只要大多数算力执行新规则,网络就会保持在一条链上;否则,即使是软分叉也可能导致分裂,2015年7月就发生过这种情况。
- 硬分叉放宽或改变规则,使原本无效的结构变为有效。例如,提高区块大小上限后,更大的区块就可以被接受。如果并非所有节点都升级以接受这些新结构,网络就会分裂为两条历史互不兼容的竞争链。2017年8月1日,比特币现金采用了比比特币更大的区块大小,这种分裂随之发生。
- 软分叉需要谨慎激活,因为执行新规则的矿工必须占据多数算力。如果矿工忽视信号或执行过时的规则,链仍有分裂的风险。BIP9(2015-2016年)通过矿工信号将激活方式标准化:一旦某个2,016区块周期内有95%的区块发出就绪信号,软分叉即被锁定;此后再经过一个周期,已升级的节点便开始执行新规则。
- 2013年3月的意外分叉源于一个较大的区块被0.8版本接受,却因数据库限制被0.7版本拒绝。网络因此分裂,而解决的方式并非让更长的链胜出,而是矿工有意切换回0.7版本,使兼容0.7的分支超越了另一条分支。这一事件表明,版本之间的意外差异可能导致网络分裂;而在紧急情况下,解决办法可能是一项经过协调的人为决定,它推翻了当时哪条分支拥有更多工作量的结果。
- 历史案例展示了这些机制。P2SH(支付到脚本哈希)于2012年以软分叉方式激活,在允许使用复杂脚本的同时保持了与旧节点的兼容。SegWit(隔离见证)于2017年8月24日在第481,824个区块激活,它将签名数据移出交易中用于计算交易ID的部分,从而修复了交易延展性问题并提升了容量。Taproot随后于2021年11月在第709,632个区块激活。
- 在两个区块浏览器上查看比特币现金的分叉。第478,558号区块是两条链共有的最后一个区块。分别在比特币浏览器和比特币现金浏览器上查找第478,559号区块:它们是不同的区块,而比特币现金的那个区块大于1 MB,这是旧的比特币规则所禁止的。从这个高度开始,每条链都将对方的区块视为无效。
关键事实
- 软分叉收紧规则;新的有效结构在旧规则下依然有效,从而确保向后兼容。
- 硬分叉放宽规则;新的有效结构在旧规则下是无效的,若未被普遍采用,就有网络分裂的风险。
- 由于在区块大小限制问题上存在分歧,比特币现金于2017年8月1日从比特币分裂出来。
- 2013年3月的分叉是Bitcoin-Qt/bitcoind 0.7与0.8版本之间的一次意外分裂,起因是0.7版本中一个未被记录在文档中的数据库限制。
- 2017年8月24日,在第481,824个区块时,通过软分叉方式启用了SegWit。
- BIP9(2015-2016年)让矿工为软分叉发出就绪信号;锁定需要一个2,016区块周期内95%的区块发出信号。
练习 九、六、三、一
9收集列出2009年至2023年间比特币历史上9次重大的共识变更。对于每一次变更,需注明发生年份以及属于软分叉还是硬分叉。
6归类根据影响,将这9项变更分为6类:容量提升、安全增强、功能新增、漏洞修复、意外分叉和失败的提案。
3提炼将这些分组归纳为3个核心原因,说明为何一项变更会以软分叉而非硬分叉的方式实施。
1凝结用一句话解释软分叉与硬分叉在有效性集合上的根本区别。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。