硬分叉与软分叉是什么

区块链为何及如何分裂?

分叉(fork),或是分叉的威胁,似乎是加密货币领域的公认特征。但分叉是什么?为什么分叉会有这么大的影响?硬分叉与软分叉的差异在哪?

“分叉”从编程术语来讲,是一个开源代码的修改。通常,分叉代码与原始代码类似,但经过重要的修改,两个“叉”(prongs)和平共存。有时,分叉被用来测试过程,但在加密货币里,它通常被用来实行基本面的更改,或使用与原有资产相似的(但不相等的)特征来创造新资产。
 
并非所有分叉的发生都是刻意的。使用广泛分散的开源代码库(open-source codebase),一旦当不是所有节点都能复制相同信息时,分叉有可能意外地产生。然而,通常这些分叉都能被识别并解决,主要的加密货币分叉都源于对植入哪些特性所产生的意见分歧。
 
记住一点,这些分叉有着“共享的历史”。每个链(旧的或新的)上在分叉之前的交易记录都是完全相同的。

硬分叉

编程分叉主要有两种类型:硬分叉与软分叉。
 
硬分叉是对旧版本的无效协议进行更改。假如旧版本持续运行,它们最终将使用与新版本不同的协议与数据。这会导致严重的混淆与可能的错误。
 
比特币里,需要硬分叉来更改像是区块大小、解决加密难题的难度、新增额外信息之限制等定义参数。任何对这些规则的更改,都可能造成区块被新协议接受但被旧版本拒绝,并可能导致严重问题──甚至有可能造成资金的损失。
 
举例来说,假如区块的大小限制由 1 MB 增加到 4 MB,一个 2 MB 大小的区块将能被运行新版本的节点所接受,但会被运行旧版本的节点所拒绝。
 
也就是说,2 MB 大小的区块通过某一更新后节点的验证并新增到区块链中。假若下一个区块是需要被运行旧版协议的节点所验证的呢?该节点会试图新增这个区块,但它会侦测到最新的这个区块并没有通过验证。因此,它将忽视该区块,并将新验证结果附加到前面一区块。突然间,你有了两个区块链,其中一条同时含有旧与新版本协议的区块,另一条仅包含旧版本协议的区块。哪条链的增长较快取决于哪些节点可以获得下一区块的验证,并且最终可能还会有额外的分裂。两条(或更多的)链是可以无限平行增长的。
 
这是一个硬分叉,它可能是混乱的,也可能充满着风险,因为在新区块中花费的比特币可能会再次花费在旧区块里(因为运行旧版本协议的商户、钱包与用户无法侦测到无效的新代码支出)。
 
唯一的解决方法是放弃其中一个分支转而支持某一分支,这涉及一些矿工的损失(交易本身是不会丢失的,它们只会被重新分配)。或者,所有节点都需要在同时切换到较新的版本,而这在分散的、广泛传播的系统内是不容易达到的。
 
或者,比特币会分裂,这已经发生了。(哈啰,比特币现金)

软分叉

软分叉仍然可以与旧版本一同运行。
 
举例来说,假如以限缩规则的方法更改协议,实现表层修改或添加不影响结构的功能,则旧版本的区块将能接受新版本区块。但反过来则行不通:新的、较为严格的版本将拒绝旧版本的区块。
 
在区块链中,理想状态下,矿工发现它们的区块被拒绝,就会自行升级。随着越来越多矿工完成升级动作后,拥有主要新区块协议的链会变得越来越长,会更加孤立旧版本的区块,这又能让更多矿工进行升级动作,并且系统会自动纠正。由于旧的和更新后的节点都接受新区块,因此新版本的区块协议最终将获胜。
 
举例来说,当社区决定将区块大小从现有的 1 MB 限制缩限到 0.5 MB。运行新版本区块协议的节点将拒绝 1 MB 大小的区块,并且会建构在前一个区块上(如果它是使用新版本的代码进行挖矿),可能会导致暂时的分叉。
 
这是一个软分叉,并且已经发生过好多次。最初,比特币并没有区块小的限制,是通过软分叉将 1 MB 的大小限制引入的,因为新规则比旧规则更为“严格”。而可以在不改变结构的情况下强化代码的 pay - to - script - hash 功能,也是通过软分叉成功增加的。这类型的修正通常仅需要大部分的矿工进行升级,便可以让该分叉变得更可行,也降低了破坏性。
 
软分叉并不会带来困扰硬分叉的双花风险(double-spend risk),因为运行旧节点的商家与用户将能同时读取新旧版本的区块协议。

来源: CoinDesk中文 

作者:Noelle Acheson

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信