《区块链技术与应用》06 BTC 分叉

这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。

我整理了本篇主要回答的2个问题,大家可以在正文寻找答案:

1、分叉的原因是什么?

2、硬分叉和软分叉分别含义是什么?差异是什么?

分叉fork,有很多种原因

第一种,state fork,两个都挖到了区块,出现临时分叉 第二种,Forking attack,分叉攻击,蓄意的分叉攻击,Deliberate fork 第三种,protocol fork比特币协议发生了改变,升级软件的时候不能保证所有的节点升级了,来不及修改,或者拒绝更改

  • 硬分叉 hard fork

  • 软分叉 soft fork

硬分叉hard fork

有的节点不认可协议的修改会产生硬分叉 比如Block size limit 1M是100万字节,一个交易是250个字节,一个区块有4000个交易。10分钟出一个区块,每秒钟只能处理7笔交易。

一些节点比较保守,不同意扩充block size,因此扩充了的会被这些节点认为是非法的,因此这些节点会继续分叉下去;其他的同意分叉的,拥有更多算力的成为最长合法链,但是分叉的永久的,因为保守的节点不同意扩充size 变成社区分裂,并行的两条链,挖的币在自己的链上是认可的

后果:需要有一定的管理措施,需要有Chain ID,不然的话账户余额可能会在两条链上不一致

软分叉 soft fork

协议更新了,有的节点没有更新被抛弃了,会造成临时性的分叉,但是不会是永久的。

软硬分叉的差异

【软分叉:新的节点的内容旧节点是认的,是原来的子集】;硬分叉的话,旧节点不认新节点的内容,会出现永久分叉 举例:假如新的协议的被包括在旧的协议中的,旧的区块也会认可新挖出的区块,但是新的不认可旧的,旧的就会一直被抛弃。直到更新了协议

Coinbase tx中有个域,什么内容都可以写,可以作为extra nonce,前8个字节作为extra nonce 可以加入UTXO的根哈希值,coinbase本身的内容会算一个根哈希放在block header的哈希值里

分叉案例

P2SH:Pay to Script Hash 属于软分叉

Redeem Script赎回脚本的哈希 属于软分叉

验证分为两步 1、输入赎回脚本的哈希和来源的输出的脚本哈希是否一致;

2、执行脚本,验证签名合法【新加入的验证程序】 旧节点只做第一步,所以旧节点合法的新节点不一定合法,但是新节点合法的话旧节点一定合法,所以这个是软分叉

课程视频链接

https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c