这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。
我整理了本篇主要回答的2个问题,大家可以在正文寻找答案:
1、分叉的原因是什么?
2、硬分叉和软分叉分别含义是什么?差异是什么?
第一种,state fork,两个都挖到了区块,出现临时分叉 第二种,Forking attack,分叉攻击,蓄意的分叉攻击,Deliberate fork 第三种,protocol fork比特币协议发生了改变,升级软件的时候不能保证所有的节点升级了,来不及修改,或者拒绝更改
硬分叉 hard fork
软分叉 soft fork
有的节点不认可协议的修改会产生硬分叉 比如Block size limit 1M是100万字节,一个交易是250个字节,一个区块有4000个交易。10分钟出一个区块,每秒钟只能处理7笔交易。
一些节点比较保守,不同意扩充block size,因此扩充了的会被这些节点认为是非法的,因此这些节点会继续分叉下去;其他的同意分叉的,拥有更多算力的成为最长合法链,但是分叉的永久的,因为保守的节点不同意扩充size 变成社区分裂,并行的两条链,挖的币在自己的链上是认可的
后果:需要有一定的管理措施,需要有Chain ID,不然的话账户余额可能会在两条链上不一致
协议更新了,有的节点没有更新被抛弃了,会造成临时性的分叉,但是不会是永久的。
【软分叉:新的节点的内容旧节点是认的,是原来的子集】;硬分叉的话,旧节点不认新节点的内容,会出现永久分叉 举例:假如新的协议的被包括在旧的协议中的,旧的区块也会认可新挖出的区块,但是新的不认可旧的,旧的就会一直被抛弃。直到更新了协议
Coinbase tx中有个域,什么内容都可以写,可以作为extra nonce,前8个字节作为extra nonce 可以加入UTXO的根哈希值,coinbase本身的内容会算一个根哈希放在block header的哈希值里
P2SH:Pay to Script Hash 属于软分叉
Redeem Script赎回脚本的哈希 属于软分叉
验证分为两步 1、输入赎回脚本的哈希和来源的输出的脚本哈希是否一致;
2、执行脚本,验证签名合法【新加入的验证程序】 旧节点只做第一步,所以旧节点合法的新节点不一定合法,但是新节点合法的话旧节点一定合法,所以这个是软分叉
课程视频链接
