比特币如何部署新功能并管理不同版本的兼容性?代码如何更改(例如新功能)以部署比特币等应用程序,以及兼容性如何维持?
例如,如果将新功能添加到比特币,那么如何部署和管理它?也就是说,当新版本可用时,网络上的每个人都不会被迫升级?
如果不强制升级/更新,比特币如何在网络上管理不同版本的比特币?网络中是否有最低要求的版本?
比特币如何部署新功能并管理不同版本的兼容性?代码如何更改(例如新功能)以部署比特币等应用程序,以及兼容性如何维持?
例如,如果将新功能添加到比特币,那么如何部署和管理它?也就是说,当新版本可用时,网络上的每个人都不会被迫升级?
如果不强制升级/更新,比特币如何在网络上管理不同版本的比特币?网络中是否有最低要求的版本?
有两种不同类型的变化,有以不同的方式进行部署:
为了保持向后兼容性,即允许人们在感觉舒适时升级并且不受变化的影响,比特币目前仅限于执行软叉。在新规则下有效的事务和块在旧规则下也是有效的,因此未升级的节点也将它们视为有效,并且在版本之间没有持久分支。
在硬分叉中,网络的升级部分接受对未升级的节点看起来无效的东西,所以我们有一个持久分叉,其中升级的节点拥有自己的区块链,未升级的节点将拥有它们。这是一种危险的情况,因为从一个初始网络有两个网络,并且它们之间可能会有一些干扰(例如重放攻击)。这就是在以太坊对以太坊经典之叉发生的事情。
软叉的一个例子是segwit的建议:交易对非升级的节点仍然有效,他们将能够更新他们本地的分类账视图(虽然他们可能无法完全验证一个事务的有效性),升级后的节点强制执行扩展的有效性规则。另一方面,块增加是一个硬分叉,因为未升级的节点不会接受更大的块,停留在小块分叉上,而升级的节点会接受它们,从而创建一个大块分叉。
这些是基本的两种更新,虽然有一些混合版本,并且分类往往不那么清楚(由于系统的复杂性)。
引入新功能的另一种方法是在基本区块链(例如Lightning或Sidechains)上层叠附加功能。在这些方面,我们并不试图修改区块链,这需要大部分的社区参与,相反,功能是在较小的范围内实施的,只需要参与者选择参与,允许感兴趣的各方使用它或不。
(免责声明:我是闪电协议的实施者)