bitget最新消息:2019年12月23日凌晨,国产公链项目NULS团队账户遭遇黑客攻击,丢失了200万枚NULS。于是NULS团队决定在878000区块高度进行硬分叉处理。硬分叉之后,未进入市场的NULS将会被永久冻结,也就是相当于被销毁了。
大家熟知的以太坊曾发生过著名的TheDAO合约漏洞攻击事件,应对是采用硬分叉,最终分叉出ETC(以太经典)和ETH,最终这两个币种都成为了全球前20的加密币种,堪称经典的硬分叉案例。
那么,什么是区块链的分叉呢?什么是软分叉?什么是硬分叉?他们的区别又是什么呢?本文就带大家看看这些问题。
为什么会分叉?
软件升级大家肯定也遇到过,比如APP。有些应用要求你强制升级,否则没法继续使用。有些则是可以选择性升级,只是没法使用一些最新的功能。
普通的APP比如微信、支付宝,数据都保存在腾讯、阿里的服务器,也就是有一个中心保管数据,所以他们可以让你强制升级APP,不升级就让你没法使用APP,这些都是可以做到的。
区块链的最大特点就是去中心化,区块之间相连构成一条链,分布式记账,没有中心。这些特性的存在会导致不同的区块之间的版本没法保持一致。
比如如图,区块2发布了新的版本,增加了一些新的数据,有些用户升级了版本,部分没有,此时软件依然在不断的打包,导致出现两条不同的区块链,这就是分叉。
总结下来,区块链分叉是因为版本不一致和区块链的去中心化特性共同导致的结果。
分叉的情况
程序员在开发的时候,比如微信的服务器程序员,给大家写了一个接口(你可以理解为拿数据的一个源),用在用户获取头像、ID信息等的地方。
后面为了开发新的需求,比如圣诞节加个圣诞帽啥的,需要增加一个圣诞帽的图片网络地址。
关于接口的实现可能会有两种方案。第一种是兼容模式,在原接口上加了一个字段,客户端只需判断这个字段是否是空,然后去显示圣诞帽。第二种是非兼容模式,开发了一个新的接口,不维护原来的接口了,导致APP不升级的用户进入个人主页就闪退,因为拿了废弃的接口。
在区块链领域,也可以根据新版本节点和老版本节点的兼容性细分分叉的情况。
1、新版本节点认可老版本节点发出的区块/交易合法
新版本节点认可老版本节点,也就是兼容了老版本,能接受老版本发出的区块数据。
但是反过来,老版本一定不能兼容新版本吗?答案是不一定。比如开发老版本的时候就预料到这个情况,于是留了一个备用的字段,只是没用到,后面新版本就使用了这个字段,也就是两者的数据结构依然一致,这种情况是能兼容的。这种场景会导致区块链中节点的数据同时含有新老区块。
2、新版本节点认为老版本节点发出的区块/交易不合法
从上面的的分析可以知道,老节点依然可能接受新节点的区块,但是新节点不接受老节点的区块信息。
这样导致的结果就是老节点可能包含新节点的信息,但是新节点完全和老节点没有关系了,相当于是新开了一条链。
软、硬分叉
以上关于新版本节点和老版本节点的关系,换个角度其实也就是老节点能否认识新节点产生的区块信息。
1、软分叉
老节点能接受新节点挖出的新区块,矿工继续原来的操作,链还是同一条。简单来讲,软分叉向前兼容。
2、硬分叉
新版本的软件,无法兼容老版本。老节点无法接受新节点挖出的区块链,导致新区块链产生,一条链成了不相干的两条链,一条是新的,一条是旧的。简单来讲,硬分叉不向前兼容。
问答
看了上面的概念,我们来回答几个问题加深理解。
1、为什么TheDAO事件和NULS被黑客攻击之后都采用了硬分叉?
软分叉向前兼容,也就是新的区块还会接受老的区块信息,老版本的资产可以在新版本上消费,这就达不到冻结黑客资产的目的了。而如果采用硬分叉,可以把被盗资产转到一个新的地址,夺回被攻击的币。
2、分叉的优缺点
区块链本身具有去中心化,不可篡改的特性,分叉其实是添加新的方案,有悖于区块链本身的特性。这其实也是TheDAO事件,ETH变成了ETC和ETH的原因,因为双方各执一词。有人觉得要尊重区块链本身,攻击属于智能合约的漏洞,已经发生了,就不应该再修改。有人觉得攻击是违法的,应该遵守法规。
从另外一个角度来看,区块链的发展也比较初级,很多东西需要完善,分叉是一个很好完善方式,也无可厚非。
一撇认为分叉有时候是必要的,也没必要死磕、神话区块链的不可篡改性,应该灵活一些。