[学习笔记] 比特币共识的升级

共识规则决定了什么样的交易和区块是有效的,是比特币网络中的节点能互相独立工作并达成一致的基础。

上篇文章介绍了当区块链发生暂时分叉时,整个网络如何在短时间内自动达成一致。

长期来看,为了演进比特币系统,添加新特性,修复 bug,共识规则并不总是一成不变的。

与传统的软件升级不同,比特币没有官方机构,其软件的升级,需要协调和考虑多数系统参与者的意见。

这篇文章,介绍升级共识规则的两种方式,软分叉(Soft fork)和硬分叉(Hard fork)。

兼容性

在开始之前,先介绍两个软件开发中的概念,向后兼容(Backward Compatibility)和向前兼容(Forward Compatibility)。

这里的“前”和“后”,是根据英语的习惯描述的,以现在的软件为基准:

  • “后”(Backward)指的是向后退,是过去
  • “前”(Forward)指的是向前进,是未来

Office Word 2007 可以打开 Office Word 2003 创建的 doc 文档,是向后兼容。

Office Word 2007 可以打开 Office Word 2010 创建的 docx 文档,是向前兼容。

一般来说,软件做到向后兼容,比做到向前兼容要容易。

软分叉

软分叉的意思是,比特币协议发生了一些变化,但旧节点却不能发现这个变化,从而继续接受新节点用新协议挖出的区块。

新版本软件产生的交易或区块,可以被旧版本软件验证通过并接受,反过来也成立。

旧节点将会在他们不能完全理解的新区块上继续添加区块。

软分叉不是真正的分叉,如果有节点没有升级软件,软分叉后的区块链看起来就像下面的样子。

软分叉很好理解,就像你使用 Office Word 2007 和 Office Word 2010 一样。

  • 你能用 Word 2007 打开和编辑 Word 2010 创建的 docx 文档,反过来也一样
  • 但你不能在 Word 2007 中使用 Word 2010 提供的新功能,就像软分叉后,旧版本软件无法知道新的共识规则一样

还记得CLTV时间锁么,由 BIP-65 通过软分叉激活。

新版本软件因为知道新的共识规则,会在验证交易时验证时间锁是否已经释放,但运行旧版本软件的节点并不会这样做。

这正是软分叉被诟病的地方,软分叉放松了验证

Imgur

一家公司里有一些审计人员,还有一些交易员。交易员想开展一项当前不被公司认可的新业务,审计人员会拒绝这种新交易。有一天,某个机智的交易员想出了一个方法,“我要做一些衍生品合约交易,但会在交易记录上写成买入土地。当你们看到的时候,就在脑子中把土地替换为衍生品合约,一切照常,审计人员不会发现的”。

这里的审计人员就是拥有算力的全节点(运行着旧版本软件),而交易员的行为就是软分叉。

硬分叉

硬分叉会带来区块链的永久分叉。

新版本软件产生的交易或区块,旧版本软件无法识别或验证通过,就像你使用 Word 2003 无法打开 Word 2007 创建的 docx 文档一样。

对某次硬分叉升级,如果绝大多数人都同意(都会使用新版本的软件),硬分叉后的区块链形如下图。

因为不存在分歧,所以旧链不会被继续延长(没有算力支持),硬分叉后仍只有一条链。

但如果双方矛盾不可调和且都有算力支持,硬分叉后便会有两条链存活下来。

  • 因为区块大小的争论无法调和,Bitcoin Cash(BCH)从 Bitcoin(BTC)的区块高度 478558 硬分叉诞生
  • 因为发展理念的不同,Bitcoin SV(BSV)从 Bitcoin Cash(BCH)的区块高度 556767 硬分叉诞生

请注意,“学习笔记”系列文章,一般使用 bitcoin 来指代协议,使用“比特币”来泛指 Bitcoin(BTC)、Bitcoin Cash(BCH)和 Bitcoin SV(BSV)这些不同版本的比特币(同一协议的不同实现)

总结

软分叉和硬分叉是改变共识的两种方法,它们都是“向后兼容”的,否则新版本的软件将“不认识”过去的区块,无法从头验证整个区块链。

软分叉还是“向前兼容”的,旧版本软件会接受新版本软件产生的区块,只是不能完全“理解”而已,这在某种程度上放宽了共识的验证。

硬分叉不是“向前兼容”的,没有分歧的硬分叉升级不会产生两条链(不会产生新的币)

一个自由的社区,会在发展过程中不可避免的产生分歧。当分歧实在无法调和时,相较于陷入无尽的争吵和诋毁,停滞不前,通过硬分叉分道扬镳(获得算力支持并存活下来)可能是更好的选择。毕竟,各自按路线图好好发展,构建完整生态赢得更多用户才是最重要的,虽然这样的硬分叉会带来社区的割裂和短暂的混乱,但这是自由的代价。

参考