如何对比特币等应用程序进行代码更改(例如新功能)以及如何维护兼容性?

How are code changes (e.g. new features) to applications such as Bitcoin deployed and how is compatibility mainted?

比特币如何部署新功能和管理不同版本的兼容性?

例如,如果向比特币添加了一项新功能,那么如何部署和管理它?即,当有新版本可用时,网络上的每个人如何不被强制升级?

如果不强制upgrade/update,比特币如何管理网络上不同版本的比特币?是否有最低要求的版本以某种方式分布在网络中?

有两种不同的更改,必须以不同的方式部署:

  • 软分叉:进一步限制什么是有效的,什么不是。
  • 硬分叉:使之前无效的内容变为有效。

为了保持向后兼容性,即允许人们在他们觉得舒服的时候升级,并且不受变化的影响,比特币目前限制自己只执行软分叉。在新规则下有效的交易和区块在旧规则下也有效,因此未升级的节点也将其视为有效,并且版本之间没有持久分叉。

在硬分叉中,网络的升级部分接受一些对未升级节点来说无效的东西,所以我们有一个持久分叉,其中升级节点有自己的区块链,未升级节点也有自己的区块链.这是一个危险的场景,因为现在有两个网络,来自一个初始网络,并且它们之间可能存在一些干扰(例如,重放攻击)。这就是 Ethereum vs Ethereum Classic 分叉中发生的事情。

软分叉的一个例子是 segwit 提议:交易对于未升级的节点仍然有效,并且它们将能够更新它们的本地账本视图(尽管它们可能无法完全更新)验证交易的有效性)并且升级后的节点强制遵守扩展的有效性规则。另一方面,块大小的增加是硬分叉,因为未升级的节点不会接受更大的块,留在小块分叉上,而升级的节点会接受它们,创建大块分叉。

这是最基本的两种更新,虽然有一些混合版本,而且分类往往不是很清楚(由于系统的复杂性)。

引入新功能的另一种方法是在基本区块链之上分层附加功能,例如闪电网络或侧链。在这些中,我们不会尝试修改区块链,这需要大部分社区的选择加入,相反,功能是在较小的上下文中实现的,只需要参与者选择加入,允许感兴趣的各方使用它与否。

(免责声明:我是闪电协议的实施者)