比特币开发者的“老难题”:如何升级整个网络?

一场经年未决的争论又在比特币开发者社区内重现,矛头指向了去中心化系统所面临的一大关键性挑战:如何在没有负责人的情况下升级软件。
这次的导火索是 Taproot/Schnorr 。这是一项聚焦于隐私性和可扩展性的升级,已经持续开发了多年,近期取得了巨大的进展,其代码也以“pull request(合并请求)”的形式进行过审查和测试,让几年前关于代码更改的讨论更加接近现实。
目前为止,代码更改本身并未在开发者之间引起争议。引发讨论的是,该如何激活这部分代码,使之改变比特币交易的发送方式,才是最佳方案。
之所以会出现这样的问题,其关键的原因在于,比特币没有领导者,而且分布在全世界各地。整个网络如何以向后兼容的方式平稳升级,让那些运行旧版本软件的用户继续参与?怎样才能让比特币在更改代码的过程中不造成中断?
需要明确的一点是:比特币是一个开源项目,拥有一个遍布全球的开发者网络,几乎每天都会更新其代码。但是,如果“共识”代码被更改,就会触及比特币更深层次的部分,需要进行“软分叉”,需要一定程度上的协作才能平稳进行。
Bitcoin Core 的贡献者马特·科拉罗(Matt Corallo)上周写了一份邮件群发给了比特币的开发者,再度引发了这场争论。他在邮件中写道:“近期,有一系列软分叉设计在具体实现和未来采用方面取得了良好的进展。然而,由于种种原因,关于激活方式的讨论却不多。”
有两种方式可以进行软分叉。一种是通过 BIP 9(比特币改进提案),之前就有一些软分叉是通过这种方式进行的。它可以确保矿工在软分叉之前做好准备,确保软分叉在整个网络中平稳推进。关于这种方法,最常见的反对意见是,它给予了矿工太多权力。
另一种方式是 BIP 8 ,也称为用户激活式软分叉(UASF)。无论矿工是否发出了准备就绪的信号,软分叉都会被激活。科拉罗警告说,这种方式会引发其他问题,具体取决于执行情况。
历史教训
该讨论始于 2017 年,当时 BIP 9 被用于激活隔离见证(Segregated Witness,SegWit),成为了比特币可扩展性之争的重要一节。为避免矿工挖出无效块并遭受损失,只有当 95% 的矿工表示准备就绪之时,隔离见证才会被激活。
大多数矿池(由一群将算力聚集起来的矿工组成)表示不会支持(实际上是禁止)隔离见证,除非在激活隔离见证的同时增加区块大小参数。(那位神秘的比特币之父将区块大小的上限设定为 1 兆字节,从而限制了区块内可容纳的交易数量。每 10 分钟出一个块。)
这一需求引发了不小的争议,许多人相信这会导致网络中心化(无论如何,除非比特币成为中心化的网络,否则隔离见证不可能成功施行)。
简而言之,这场争议表明了,矿池可以利用 95% 这一阈值来推动符合其预期目的更改:帮助他们完成过渡,以免造成损失。
许多比特币支持者并不喜欢这样,认为这是矿工在试图利用他们的权力来推动有违部分用户意愿的改变。
随着争议不断加剧,一位匿名开发者 Shaolinfry 指出,比特币支持者们依然可以促成升级。从根本上来说,他的想法是,应该让比特币用户和交易所来决定是否进行更改,并让矿工遵从他们的意愿——而非反其道行之。这个方法已经被用来激活其它更改。Shaolinfy 在 BIP 8 中正式提出了这一想法,也被称为用户激活式软分叉。
有大量用户在社交媒体上表示了对用户激活式隔离见证软分叉的大力支持,并开始运行该软件。此举似乎达到了预期的效果。在这个软分叉激活的前一天,矿工就开始发出信号来支持隔离见证。
值得注意的是,在争论不休的这段时间内,出现了多个用户激活式软分叉,一个比一个更为谨慎(且更为保守),而且争议性更小。但是,如果不陷入困境的话,对于一些比特币开发者来说,通过用户激活式软分叉,可以更好地实施改变。
当时,比特币创业公司 Blockstream 的开发者罗斯提·拉塞尔(Rusty Russell)甚至还为参与构建 BIP 9 而道歉。
拉塞尔在 Medium 上的一篇文章中写道:“我没想到 BIP 9 会被用来绑架整个网络。这极大地改变了风险模型;目前,BIP 8 是一种更好地促成网络升级的方法,矿工只能加快进程,无法阻止它。”
前车之鉴
有了前车之鉴,一些开发者对于再次使用 BIP 9 促成 Schnorr/Taproot 或是其他更改之举非常谨慎。
Bitcoin Core 的开发者卢克·达什希尔(Luke Dashjr)在回应科拉罗时表示:“我认为 BIP 9 已经被证实是一个失败的方案了。”之后,他又提出了技术上的理由。在这场关于可扩展性的争论中,有很多人支持通过用户激活式软分叉来实现隔离见证,达什希尔是其中呼声最高的一个。
创业公司 Lightning Labs 的开发者亚历克斯·博斯沃思(Alex Bosworth)表达了相似的观点,还拿 BCH (2017 年从比特币分叉出的加密货币)举了例子。
最近,很多 BCH 矿池联合提议,应从区块奖励中拨出一部分 BCH 给开发者基金。博斯沃思认为这又是一个矿池滥用权力的例子,不利于加密货币的去中心化。
博斯沃思在推特上说:“我知道,部署软分叉通常是为了尝试对矿工友好的方法。但是,我们目前的算力有很大一部分(1/3)形成了垄断,用于通过窃取区块奖励的提议。”他主要从事可扩展型闪电网络基础设施的搭建。
这就是为什么他支持用户激活式软分叉的原因,虽然后者需要消耗更多时间。
博斯沃思补充说:“慢节奏的用户激活式软分叉是最适合我的。”
混合式方案
然而,有些人发出了警示,担心将用户激活式软分叉作为唯一的激活方式可能会促成有害比特币的更改。
举例来说,最开始的时候,开发者喜欢 BIP 9 的一个原因是,95% 这一阈值会提供一道安全保障。如果矿池在升级软件之时发现了问题,他们就会阻止更改。一旦用户激活式软分叉启动,就很难停止激活。
这就是为什么科拉罗老调重弹,提出了一个将 BIP 8 和 BIP 9 相结合的方案。先是按照 BIP 9 来激活软分叉,如果因为“不合理的反对理由”导致软分叉未在一年之内成功激活,那么接下来的 6 个月里用户可以再次提出争议。之后,如果社区确实想要做出更改的话,可以在下一年尝试 BIP 8 。
一些开发者可能会争辩说,如果不存在“不合理的反对理由”,那么推行一项更改所花的时间就太久了。但是科拉罗表示要有耐心。
要辨认这些反对理由是否“不合理”可能需要一些时间。科拉罗说:“如果更改未能成功推行,那么通过 BIP 9 流程可以很好地了解社区的民意。”
科拉罗说:“比特币开发并不是一场竞赛。如果有些事不得不为,等待 42 个月可以确保我们不会开出一个负面的先例。否则随着比特币的发展,我们将追悔莫及。”
虽然拉塞尔在 2017 年似乎很反对 BIP 9 ,但他已向 CoinDesk 表示,他现在同意采用这种混合式方法。
拉塞尔说:“由于矿工未能成功阻止更改,我们也没有因拖延而遭受巨大损失,我不介意激活 BIP 9 。”不过,他提议缩短时间线。
拉塞尔说:“对于 BIP 9 来说,一年的激活期限似乎太久了, 6 个月或许更好。这样一来,如果超出 BIP 9 的激活期限,并且被认定是遭遇矿工阻挠的缘故,用户就可以组织一个用户激活式软分叉。”
工程师正在认真审查 Taproot/Schnorr 的代码,从而解决一切遗留问题。因此,开发者依然有时间来讨论激活方案。不过,先要等社区做出决定之后,才能对比特币协议进行更改,增强网络的隐私性。