10.BTC-分叉-北大肖臻老师客堂笔记

北京大学肖臻老师《区块链技术与应用》公开课第 10 讲的主题是**"比特币的分叉:硬分叉与软分叉"**。这节课非常重要,因为它解释了在去中心化系统中,当协议(规则)发生升级时,网络是如何达成共识(或分裂)的。

以下是本课程内容的结构化详细总结:

一、 分叉的背景 (Background)

在中心化系统中(如 Windows 更新),软件升级很简单:厂商发布补丁,用户强制或选择更新。但在去中心化 的比特币网络中,没有中心权威,节点升级是自愿的。如果一部分节点升级了软件(接受新规则),而另一部分没有,就会产生协议不兼容,从而导致分叉

二、 硬分叉 (Hard Fork)

定义 :当比特币协议发生改变,且**新节点产生的区块被旧节点视为"非法"**时,就会发生硬分叉。这通常是因为新协议收紧了规则,或者改变了区块结构,导致旧节点无法认可。但更常见的硬分叉定义场景是:扩大了区块限制(例如从 1MB 扩大到 4MB)。

  • 场景举例(区块扩容)

  • 旧规则:区块大小上限 1MB。

  • 新规则:区块大小上限 4MB。

  • 结果

  • 新节点:挖出了一个 2MB 的大区块。

  • 旧节点 :看到这个 2MB 的区块,认为它违反了"1MB 上限"规则,直接拒绝,并在原来的链上继续挖矿。

  • 新节点:认可这个 2MB 区块,并在其后面继续挖矿。

  • 最终结局:由于旧节点永远不会接受新节点挖出的大区块,网络永久分裂成两条链(一条旧链,一条新链)。这两条链上的币在分叉后虽然各自独立,但共享分叉前的历史。

  • 社区分裂 :硬分叉往往伴随着社区的分裂。例如,BCH (Bitcoin Cash) 就是比特币的一次硬分叉,支持大区块的人去挖 BCH,坚持 1MB 的人留在 BTC。

三、 软分叉 (Soft Fork)

定义 :当比特币协议发生改变,新节点产生的区块能够被旧节点认可(视为合法) ,但这通常意味着新协议收紧了规则(限制更多)。

  • 场景举例(区块大小限制缩小 - 假设)

  • 旧规则:区块大小上限 1MB。

  • 新规则:区块大小上限 0.5MB(新节点自愿只挖小区块)。

  • 结果

  • 新节点:挖出的 0.5MB 区块,完全符合旧节点的"1MB 以内"标准。

  • 旧节点:欣然接受新节点的区块,并在其后继续挖矿。

  • 问题点 :如果旧节点挖出了一个 0.8MB 的区块(符合旧规则,但不符合新规则)?

  • 新节点:会拒绝这个 0.8MB 区块。

  • 关键 :只要新节点的算力超过 50%,新链就会比旧链长。根据"最长合法链"原则,旧节点最终会放弃自己挖出的 0.8MB 分叉,转而认可新节点的最长链。

  • 最终结局:不会产生永久分叉。旧节点虽然不知道新规则,但只要跟着最长链走,依然能在同一个网络中工作(尽管它们挖出的不符合新规则的块会被孤立)。

四、 实际案例:P2SH (Pay to Script Hash)

这是一个典型的软分叉案例。

  • 背景:最初比特币只有 P2PK (Pay to PubKey) 等简单形式。为了支持多重签名等复杂功能,引入了 P2SH。
  • 旧节点眼中的 P2SH:看起来像是一笔简单的转账,只要哈希对得上就放行(旧节点验证规则很简单)。
  • 新节点眼中的 P2SH:不仅哈希要对得上,还需要执行后面复杂的赎回脚本(Redeem Script),验证通过才放行。
  • 结论:新节点加了更严的检查,但旧节点觉得也没毛病(只是检查得松),所以兼容性得以保持。

五、 软分叉中的"假阳性"风险

对于旧节点来说,软分叉其实是一种"欺骗"。

  • Coinbase 域的利用:在某些软分叉中(如隔离见证 SegWit),新规则的数据被藏在旧节点不检查的区域(如 Coinbase 交易的输入域)。
  • 安全性:旧节点没有验证这部分新规则的安全性,所以理论上它的安全性降低了(变成了"半个轻节点")。但只要大多数算力掌握在升级后的新节点手中,系统整体依然是安全的。

六、 总结对比

特性 硬分叉 (Hard Fork) 软分叉 (Soft Fork)
规则变化方向 通常是放宽规则(如 1MB -> 4MB) 通常是收紧规则(限制更多)
旧节点反应 拒绝新节点的区块(认为非法) 接受新节点的区块(认为合法)
兼容性 向下不兼容(必须全网升级) 向下兼容(旧节点可暂不升级)
结果 如果有人坚持旧规则,会产生两条永久存在的链 只要新算力 > 50%,只会有一条链
典型案例 ETH / ETC 分叉,BTC / BCH 分叉 P2SH, SegWit (隔离见证)

💡 核心逻辑链

  1. 去中心化升级难 部分升级,部分不升级。
  2. 新旧规则冲突
  • 如果是旧节点不认新块 硬分叉(路断了,各走各的)。
  • 如果是旧节点认新块 (但可能反过来新不认旧) 软分叉(只要新算力够强,旧节点被迫跟随)。
相关推荐
voidmort8 小时前
Web3 中的 DEX 流程详解:从原理到实现
web3·区块链
lsrsyx9 小时前
SUNX交易所好用吗?第一视角清晰完整版介绍
区块链
devmoon9 小时前
如何使用 Web3.py 与 Polkadot Hub 进行交互
web3·区块链·智能合约·交互·web3.py·solidity·polkadot
China_Yanhy12 小时前
我的区块链运维日记 · 第 7 日:影子区块的诱惑 —— 多节点下的“重复充值”危机
运维·区块链
闲谈共视14 小时前
Go语言与区块链技术的渊源
开发语言·golang·区块链
傻小胖17 小时前
11.BTC-问答-北大肖臻老师客堂笔记
笔记·区块链
2501_9481201517 小时前
区块链与人工智能融合的隐私保护技术
人工智能·区块链
devmoon17 小时前
Polkadot支持的双虚拟机执行栈是什么
web3·区块链·智能合约·预编译·波卡
傻小胖17 小时前
9.BTC-比特币脚本-北大肖臻老师客堂笔记
笔记·区块链