学习笔记《区块链技术与应用》第五天 分叉
state fork: 对区块链当前的状态存在分歧
forking attack: 分叉攻击
deliberate fork: 人为分叉
protocol fork: 协议不同造成分叉
hard fork: 硬分叉
soft fork: 软分叉
hard fork
对比特币协议增加新特性,没有升级的旧节点不任何这些新特性,协议内容产生分歧导致。
- 1MB区块大小限制 block size limit
1000000/250≈40001000000/250≈40001000000/250≈4000
4000/60/10≈7tx/sec4000/60/10≈7 tx/sec4000/60/10≈7tx/sec 每秒7笔交易
如果大多数算力节点更新了size为<4MB,少数旧节点<1MB。新节点较多算力,会沿着上面最长链挖掘,旧节点认为最长合法链是不认可的,会一直沿着下面链挖掘,因此为hard fork。
soft fork
block size limit: 1M -> 0.5M
new nodes 0.5M
old nodes 1M
分叉是临时性的,新旧节点都认为上分叉是合法的,系统不会有永久性的分叉。
coinbase
extra nonce | nonce只有4 bytes 2322^{32}232
复杂度不够使用额外的nonce空间8 bytes |2962^{96}296
UTXO 当前还没花掉的交易输出,为了快速查找,保存内存中。
Merkle proof,保存已交易的记录,因此比特币无法计算指定的钱包余额。
因此有人提出将UTXO也计算Hash保存到coinbase header,最终会更新到root hash。如果这样做,大多数节点带有这个UTXO hash,少数没更新的old node不会检查hash旧认为新老block都是合法的,最终导致soft fork。
P2SH
Pay to Script Hash
redeem script
原来是没有的,也是通过软分叉更新到区块链的。
旧节点只验证第一段redeem script, 新节点会验证一二阶段。因此旧节点认为合法的新节点可能不合法。
总结
soft fork: 半数以上算力更新,就不会有永久性分叉
hard fork: 必须所有节点更新,否则会有永久性分叉