酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(22):什么是分叉、软分叉、硬分叉?

软件开发中的分叉指的是在开源项目中如果有人fork了一个项目,这个项目分叉为两个或多个项目,各个开发者沿着不同的方向独立发展这个项目。

这一节以比特币为例讲讲区块链语境下的分叉。

比特币分叉,包括状态分叉(state fork)和协议分叉(protocol fork)。
state fork指的是由于各个节点当前状态不同从而产生的临时性分叉。比如两个或多个矿工同时找到挖矿的随机数获得记账权,都各自创建了区块并广播到比特币网络。这种情况下,哪个矿工发布的区块最先被更多节点接受,在它后面延伸的链最长,这个区块延伸下来的链就称为最长链,从而在竞争者胜出。

state fork是临时性的分叉,最终只有一条链活下来。state fork一般是由于矿工挖矿的竞争产生的,但有时也有人故意发起attack fork。比如A向B转了一笔钱之后,发起攻击,回到发起交易的那个区块,从这里分叉,重新发起一笔交易,把原本支付给B的钱转给他自己,如果这条链在竞争中胜出,转给B的钱就被他黑掉了。

我们一般所说的软分叉、硬分叉则是由于比特币协议的更新产生的。

软分叉指的是新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,从而产生的临时性分叉。这种情况下,新节点能识别旧节点的区块,旧节点也能识别新节点的区块,大家都是在同一条链上,只是各自的区块结构不同。软分叉没有分叉的链条,只有新区块旧区块之分。软分叉允许旧节点长期不更新软件,新旧区块可以长期并存。

硬分叉指的是区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。

硬分叉的新版本发布之后,已升级的节点可以识别未升级的旧节点产生的区块,但未升级的节点拒绝验证已经升级的节点生成的区块。新节点产生的区块被旧节点拒绝,旧节点在没有新区块的链条上延伸,新节点如果在这个链条上出块,则会被旧节点认为是无效区块,从而被抛弃。新节点只能在都是新区块的链条上发展。

在传统的中心化软件中,软件升级是很容易的事情。但在去中心化软件中,无法要求全部节点都更新软件,从而产生分叉。

未经允许不得转载:酸饼 » 区块链入门100问(22):什么是分叉、软分叉、硬分叉?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼