目录
您在使用智能手机上的电子银行应用程序时,一定遇到过系统提示您进行更新,这个时候您通常要考虑之后并同意更新,系统才能进行升级。或许您的手机也会在不通知您的前提下,自动进行更新。毕竟,软件升级是一个必要的过程,如果您未安装该软件的最新版本,则可能无法继续使用相关的服务。
而在
开源的
加密货币体系中,情况就大不相同。您无需阅读支撑
比特币运行的每一行代码,但是如果能这样做也是十分有帮助的。因为您会发现,在去中心化的环境中没有管理的层次结构,也没有银行可以随便的向您推送更新和内容修改。所以,在区块链网络中实现某项新功能的更新是一项挑战。
在本文中,我们将探讨如何在没有中心化授权管理的前提下,升级加密货币网络。因此,随之出现了两种不同的机制:即硬分叉和软分叉。
要了解分叉的工作原理,首先必须了解参与区块链网络决策过程(或
治理)的参与者。
在比特币中,您可以大致将参与者划分为三个不同的子集:开发人员、矿工和
完整节点用户。他们实际上是参与网络并做出贡献的各方节点。而像广泛使用的
轻节点(例如,手机、笔记本电脑等钱包),他们对于网络来说,并不是真正的“参与者”。
开发人员
开发人员负责创建和更新代码。对于您所熟知的传统代币,任何人都可以为该流程贡献代码。该代码是公开可用的,因此他们可以将更改提交给其他开发人员进行审核。
矿工
矿工是保护网络安全的参与者。他们运行加密货币的代码,并投入计算资源向区块链添加新区块。例如,在比特币网络中,他们通过
工作量证明来实现这一点。矿工会通过集体奖励的形获取相应的
挖矿收益。
完整节点用户
完整节点是加密货币网络的骨干。他们负责验证、发送和接收
区块和交易,并维护
区块链的数据副本。
在这几类不同的身份中,您可能会发现存在重叠。例如,您可以同时成为开发人员和完整节点,或者成为矿工和完整节点。你也可以同时拥有以上全部三个身份。但实际上,我们认为许多加密货币用户并没有担任这些角色。相反,他们选择使用轻型节点或集中式服务。
通过上面的介绍,您现在对开发人员和矿工在网络中的职责也有了深入了解。开发人员负责创建代码,如果没有代码,您将无法运行相关软件,也没有人可以修复bug以及升级新功能。矿工负责确保网络安全,如果没有良性的
挖矿竞争,区块链可能会被劫持,或者会陷入停顿。
但是,如果开发人员和矿工试图通过暴力方式使网络按照他们的意愿运行,那么就会造成一定不良影响。对大多数用户来说,真正的控制权都集中在完整节点上。他们能够维持网络的正常运行,支持用户选择他们想要运行的软件。
开发人员不会破门而入闯到您家里,拿着枪威胁您下载
比特币的核心二进制文件。如果矿工采取了强硬的态度,拿出一副顺我者昌逆我者亡的态度,强迫客户选择不必要的更改,那么,用户大多可能不会买账。
实际上矿工和开发人员都不是强大的霸主,而是服务提供商。如果用户决定不再使用网络,那么
代币将失去价值。代币价值的损失将直接影响到矿工(以美元计价时,他们的报酬价值较低)。同样,对于开发人员而言,他们也只能被用户所忽略。
您会发现,这些软件都不是专有的。您可以进行任何想要的修改,而且,如果有其他人也运行您修改后的软件,你们之间是可以进行交互的。在这种情况下,您实际上就是通过分叉该软件的方式,创建了一个新的网络。
软分叉是通过复制和修改软件代码的方式实现。而原来的项目继续存在,只是单独产生了一个新的项目,新的项目沿着不同的方向发展。我们假设您最喜欢的加密货币内容网站的团队对如何发展存在重大分歧。团队的一部分可能会将站点复制到其他领域中。但是,我们展望未来,他们也将会发布与原来内容所不同的文章。
这些项目都是建立在一个共同的基础上,拥有相同的历史数据。就像是一条道路后来分成两条一样,它们的道路从现在开始发生了分歧。
请注意,此类事件在
开源项目中时常发生,并且在
比特币或
以太坊出现之前就已经存在了很长时间。但是,只有在区块链领域里,存在硬分叉和软分叉之间的区别。下面我们将展开详细的讨论。
尽管名称相似,并且具有相同的用途,但硬分叉和软分叉却有很大差别。让我们详细介绍他们。
什么是硬分叉?
硬分叉是一种不支持向后兼容的软件升级方式。通常,这些情况发生在节点以与旧节点的规则冲突的方式添加新规则时。新节点只能与运行新版本的软件节点进行交互。结果,区块链发生了分裂,生产出两个单独的网络:一个按照旧规则运行,一个则按照新规则运行。
节点在升级后变为蓝色。之前的黄色节点拒绝蓝色节点的连入,而蓝色的节点之间可以相互连接。
因此,现在有两个网络并行运行。他们将继续产生
区块和交易,但不再在同一
区块链上工作。在区块链网络达到分叉区块之前,所有节点都具有相同的区块链(并且历史记录仍然存在),但是这之后它们将具有不同的区块和交易。
由于存在相同的历史记录,因此如果您在分叉之前持有代币,那么您将在这两个网络上同时获得代币。假设在600,000区块高度发生分叉时,您手里有5 BTC。您可以选择在区块高度到达600,001时,在原始区块链上将这5 BTC花费掉,但是在新产生的区块链上并不会记录这笔在600,001区块高度的消费。假设加密方式没有发生变化,那么在新的分叉网络上您的
私钥中仍然会存在这5个代币。
硬分叉的另一个案例是2017年发生的分叉,当时比特币分成了两个独立的链,原始的比特币(BTC)和新的比特币现金(BCH)。在社区对区块容量的
缩放展开了诸多争论之后,出现了分叉。比特币现金(BCH)支持者希望增加
区块大小,而比特币(BTC)支持者则反对这一改变。
区块大小的增加需要修改规则。这是在
SegWit软分叉之前(稍后会详细介绍)完成的,因此节点将只接受小于1MB的区块。如果您创建了一个2MB的区块,其他节点会拒绝进行验证。
只有已升级软件并支持区块大小超过1MB的节点才能接受这些区块。当然,这会使它们和之前的版本不兼容,因此只有具有相同协议的节点才能互相进行通信。
什么是软分叉
软分叉是支持向后兼容的软件升级方式,升级后的节点仍可以与未升级的节点进行交互。软分叉的升级方式通常是向程序中新添加了一条规则,该规则也不会与之前的旧规则发生冲突。
例如,可以通过软分叉来实现区块大小的下调。让我们再次以比特币为例,说明这一点:比特币网络中对区块大小的上限是有限制的,但对区块大小的下限是没有限制的。如果您只想接受特定大小以下的区块,则只需拒绝大于该数值的区块即可。
但是,这样做并不会让您与网络自动断开连接。您仍然可以与未执行这些规则的节点进行交互,但是会过滤掉它们传递给您的一些信息。
前面提到的
隔离见证(SegWit)就是一个很充分的案例,它是在比特币和比特币现金拆分之后不久发生的。隔离见证是一种更改了区块和事务格式的更新,而且它的设计方式较为巧妙。旧节点仍然可以验证区块和交易(格式不违反规则的),但对于某些字段来说,他们无法读取。只有当节点升级到较新的版本后,某些字段才可读,才能够正确解析其他数据。
甚至在隔离见证激活后的两年多时间里,也没有完成所有节点的升级。这样做也是有很多好处的,比如网络不会发生中断的情况、升级也没有那么紧迫。
从本质上说,这两种类型的分叉作用各不相同。具有争议的硬分叉升级,会将社区一分为二,但是有计划的硬分叉升级可以让所有参与者自由的选择是否修改程序。
软分叉则是较为平稳的选择。一般来说,由于新的升级不会与之前的规则发生冲突,因此您只能实施某些限制。也就是说,如果您可以按照兼容的方式实施升级,就无需担心网络碎片化的风险。
硬分叉和软分叉对于区块链网络的长久成功至关重要。尽管缺乏中心权威机构,但它们能够在去中心化系统中进行更改和升级。
分叉能够让区块链和加密货币在开发时集成更多的新功能。如果没有这些机制,我们就需要一个具有自上而下控制权的中心化系统。否则,我们只能在软件协议的生命周期内遵守一成不变的规则。