区块链公司谈的硬分叉和软分叉是什么

编程术语中的“fork”是一个开源代码修改。通常,分叉代码与原始代码相似,但有重要的修改,并且两个“叉”舒适地共存。有时使用分支来测试流程,但使用加密货币时,它通常用于执行根本性更改,或创建与原始特征具有相似(但不相同)特征的新资产。

并非所有的叉子都是故意的。在广泛分布的开源代码库中,当并非所有节点都复制相同的信息时,叉会偶然发生。然而,通常会识别并解决这些叉子,并且大多数加密货币叉是由于对嵌入特征的分歧。

有一点要紧记的是,他们有一个“共同的历史”。在拆分之前,每个链(旧的和新的)上的交易记录是相同的,weixin:xiandakeji。

硬叉子

有两种主要类型的编程叉:硬和软。

硬分叉是对旧版本无效的协议的更改。如果旧版本继续运行,它们将以不同于新版本的协议和数据结束。这可能会导致严重的混淆和可能的错误。

使用比特币,需要硬分叉来改变定义参数,例如块大小,需要解决的密码难题的难度,限制可以添加的额外信息等。对这些规则中的任何一个的改变将会导致块被新协议接受但被旧版本拒绝并可能导致严重问题 - 甚至可能导致资金损失。

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

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

这是一个艰难的分支,它可能是混乱的。这也是有风险的,因为有可能比特币花费在一个新的区块上,然后再花在旧区块上(因为商家,钱包和运行以前代码的用户不会检测到他们认为无效的新代码的花费)。

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

或者,比特币分裂,已经发生(你好,比特币现金)。

数字货币交易所场内场外上币落地app项目白皮书区块链浏览器对接主流交易所跨境支付主链开发基金会发起海内外数字货币牌照等一整套技术解决方案,131-6131-9707。

软叉子

软叉仍然可以使用旧版本。

例如,如果一个协议被改变的方式是收紧规则,实现一个外观变化或者添加一个不会以任何方式影响结构的函数,那么新版本块将被旧版本节点接受。不过相反,更新的“更严格”版本会拒绝旧版本块。

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

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

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

软叉不会承担困扰叉车的双重花费风险,因为运行旧节点的商家和用户将同时读取新版本和旧版本块。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4658
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3955
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3035
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4507
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6588
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2517
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4798
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2667
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7

扫码关注云+社区