六、软分叉和硬分叉

266 阅读4分钟

1. 什么是分叉

1.1名词解释

state fork 状态分叉(临时性的分叉) :区块链系统中因状态分析导致的分叉,原因可能有软件版本不同、共识规则差异、或者区块发布时间紧凑的临时分叉。

protocal fork协议分叉:根据不同软件版本协议修改的内容的不同从而导致结果的不同,可以分成硬分叉和软分叉,可以是硬分叉也可以是软分叉

2. 为什么会产生分叉

共识协议不同,你有你的标准,我有我的标准,针对各自的标准,产生了不同的区块,又或者由于传播延时同一时间出块太多导致的分叉。

3. 什么是硬分叉

3.1 什么是硬分叉

硬分叉(永久性的):由于对比特币协议修改意见大小不 一导致的分叉,并且这个分叉是永久性的

3.2 硬分叉的案例

案例1:对比特币区块大小意见不一导致的分叉

首先看看目前比特币平均一个交易确认时间

一个区块1MB约等于1000 000字节,一个交易大约250个字节

1000/250=4000个交易,一个区块可以保存4000个区块

交易处理速率= 4000个交易/10min(出一个区块的平均时间) = 7个交易每秒,这个样交易处理速度远不如现如今的支付系统交易处理速度,于是有人便对比特币协议提出了这样的想法,提高比特币区块的大小,通过提高比特币区块的大小,可以让比特币一个区块交易量增多,而平均出一个区块的平均时间是10分钟,这样来看,交易处理速度会加快

假设将区块大小从1MB改为4MB(不超过4MB都认可)

new block | old block

4MB 1MB

image.png

只要旧节点不更新软件 协议(不接受4MB的节点),分叉就不会消失,这里硬分叉的硬指的就是不会消失。

案例2:ETC和ETH的分家

2016年,以太坊(Ethereum)因 "The DAO" 智能合约遭到黑客攻击,导致约360万ETH被盗。为应对这一问题,社区通过争议性决议对区块链进行硬分叉:

  • ETH(Ethereum) :实施硬分叉,将被盗资金回滚至黑客攻击前的状态,得到主流社区支持,延续为当前主链。
  • ETC(Ethereum Classic) :坚持“代码即法律”原则,反对回滚,保留原始区块链历史

4.什么是软分叉

4.1 什么是软分叉

软分叉:临时性的分叉,软分叉在新旧节点共存期间可能会导致暂时分叉,但最终会合并到一个统一的链上

4.2 软分叉的案例

案例1,缩小区块空间

修改比特币协议,比如将区块变小了,1MB->0.5MB(实际一般不会减小)可能导致旧节点白挖了,因为最终不会被认可上链

image.png

案例2(todo待补充脚本知识后完善):利用铸币交易的 coinbase 域,可作为extra nonce, coinbase域作为UTXO集合(写道Merkel树中)的根哈希值时,会导致软分叉,具体说明,为什么这是一个软分叉

因为新发布的节点,新旧协议都认可(coinbase域在旧协议中本来无用处),但是旧协议发布的新节点,新协议是不认可的,因为coinbase域没按要求写,所有这是一个软分叉。

p2sH:pay to script hash 比较著名的一个软分叉案例

redeem script :来自输入脚本

总结

硬分叉:必须是所有的节点都更新软件,系统才不会出现永久性的分叉,如果有小部分节点不愿意更新,那么系统就会被分为两条链。

软分叉:只要系统中,拥有半数以上算力的节点更新了软件,那么这个系统就不会出现永久性的分叉,可能会有临时性的分叉,但是不会有永久性的分叉。

总的来说,只要旧节点不认可(兼容)新协议,就会出现硬分叉,如果旧节点认可新协议,就是软分叉