提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
二、硬分叉?
三、软分叉?
总结
前言
? ? 今天看了北大肖臻老师《区块链技术与应用》公开课,有很大收获,在此写博客以做笔记,加深印象,若有不当之处,欢迎斧正。
一、什么是分叉(fork)?分叉有哪几种?
分叉就是原来是一条链,在变成了两条链
- 分叉可能是多种原因造成的,比如说两个节点同时发布一个区块,这个时候区块链就会出现临时性的分叉,我们把这种情形叫做state fork,分叉攻击也属于state fork,不过这种攻击是故意的、人为的,所以又称作deliberate fork;
- 除了state fork以外还有一种产生分叉情况的是比特币的协议发生了改变,要修改比特币的协议,需要软件升级,在一个去中心化系统中,升级软件的时候,没有办法保证所有节点都升级了软件,当大部分节点升级了软件,剩下小部分可能由于各种原因或者不同意对协议的修改没有升级软件时,这个时候也会产生分叉,这种分叉叫做protocol fork
根据对协议修改的内容的不同我们又可以分为硬分叉和软分叉?
二、硬分叉?
如果修改比特币的协议,增加一些新的特性,拓展一些新的功能,那么那些没有升级软件的节点,它是不认可这些新特性的,认为这些特性是非法的,就会导致硬分叉
- ?例如对比特币这区块大小限制将它从1M增加到4M,大多数节点更新了软件(新节点),少数节点没有更新(旧节点),如果新节点发布一个区块,这个区块会在新节点之中进行传播,而旧节点会认为这个区块是非法的,旧节点产生的区块仍会接着上一个区块,而不是跟在新节点发布的这个区块后面,而旧节点发布的区块新节点会认为是合法的,因为区块大小限制只是要求你的区块不要超过这个大小就行,那么这里会产生一个硬分叉,由于新节点的算力占了大多数,新节点的链为最长链,他们会沿着新节点的链不断挖,而旧节点认为新节点的链是非法的,就算新节点挖的链再长对旧节点也没用,旧节点只会沿着原来旧节点的链挖矿
这种分叉是永久性的,只要那一部分旧节点不更新软件,这个分叉就不会消失?
三、软分叉?
如果我们对比特币协议加一些限制,使得原来合法的区块变得不合法,那么就会产生临时性的分叉,这就是软分叉?
示例:如果我们把区块大小由1M缩小到0.5M,同样是大部分节点更新,小部分旧节点不更新。当新节点挖出一个0.5M的区块,新、旧节点都认可,而旧节点挖出的区块为1M,新节点不认可,旧节点认可,这时产生了分叉,由于大部分算力在新节点,最长链就是新节点挖出的链,旧节点就会放弃当前所在分叉的链,跟在最新的新节点挖出的区块后挖矿,但由于旧节点挖出的区块是非法的,旧节点就得不到出块奖励
总结
分叉是比特币系统不可避免的,区块链会因为各种原因产生分叉
|