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

By [Minna Yu](https://paragraph.com/@minna-yu) · 2022-06-16

---

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

**我整理了本篇主要回答的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](https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c)

---

*Originally published on [Minna Yu](https://paragraph.com/@minna-yu/06-btc)*
