硬分叉与软分叉


编程术语中的“fork”是一种开源代码修改。通常,分叉代码与原始代码类似,但经过重要修改,两个“分支(硬分叉与软分叉)”终可顺利共存。但当使用加密算法,它通常用于更改基本事项,或创建具有与原始类似(但不相等)特征的新资产。

并非所有的”叉子”都是刻意安排的。在使用广泛分布的开源代码库,当并非所有节点都复制相同的信息时,叉子可能会意外发生,产生错误。然而,通常这些叉子也会被识别并解决,并且大多数加密货币叉子是由于对嵌入特征产生分歧。

要认识分叉的第一件事是他们有一个“共享的历史”。在拆分之前,每个链(旧的和新的)上的交易记录是相同的。

硬分叉

编程分支有两种主要类型:硬和软。

硬分叉是对旧版本无效的协议的更改。如果旧版本继续运行,它们最终将使用与新版本不同的协议和不同的数据。这可能导致严重的混淆和发生错误的可能。

使用比特币,需要硬分叉来更改定义参数,例如区块大小,需要解决的加密拼图的难度,对可添加的其他信息的限制等。对这些规则中的任何一个的更改,都将会导致区块被新协议接受但被旧版本拒绝的情况发生,甚至可能引致资金损失。

例如,如果区块大小限制从1MB增加到4MB,则运行新版本的节点将接受2MB区块,但运行旧版本的节点拒绝该区块。

假设这个2MB块区由更新的节点验证并添加到区块链中。如果下一个块由运行旧版本协议的节点验证怎么办?它会尝试将其区块添加到区块链中,但它会检测到最新的区块并令其无效。因此,它将忽略该区块并将其新验证附加到前一个区块。突然间,您有两个区块链,一个包含较旧版本块和较新版本块,另一个版块仅包含较旧版本块。哪个链增长更快将取决于哪些节点率先验证的下一个区块,并且最终可能会有额外的分裂。两条(或更多条)链无限地平行生长是可能发生的。

这也是有风险的,因为在新区块中花费的比特币可能会再次花在旧区块上(因为商家,钱包和运行前面代码的用户不会检测到他们认为无效的新代码的支出)。

唯一的解决方案是将一个分支放弃而支持另一个分支,这涉及一些矿工问题(交易本身不会丢失,他们只是被重新分配)。或者,所有节点都需要同时切换到较新版本,这在分散且广泛传播的系统中很难实现。

软分叉

软分叉仍然适用于旧版本。

例如,如果以收紧规则的方式更改协议,实现外观修改或添加不以任何方式影响结构的功能,则旧版本节点将接受新版本区块。不过,较新的“更严格”版本将拒绝旧版本区块。

在比特币中,旧版本的矿工会意识到他们的区块被拒绝了,并且会进行升级。随着越来越多的矿工升级,主要是新区块的链条变得更长,这将进一步孤立旧版本区块,导致更多矿工升级,系统进行自我纠正。由于旧版本和升级节点都接受新版区块,因此新版区块最终会获胜。

例如,社区决定将区块大小从目前的1MB限制减少到0.5MB。新版本节点将拒绝1MB块,并将构建在前一个区块上(如果它是使用更新版本的代码进行挖掘),这将导致出现临时分叉。

而软分叉已经发生了好几次。最初,比特币没有区块大小限制。因为新规则比旧规则“更严格”,所以通过软分叉引入1MB的限制。还通过软分叉成功添加了pay-to-script-hash函数,该函数在不改变结构的情况下增强了代码。这种类型的修正案通常只需要大多数矿工进行升级,这使得它更可行,破坏性更小。

本文链接地址:https://www.wwsww.cn/qkl/1566.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。