10-BTC-分叉

学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=10
本博客除了包含自己的在学习过程中记录的笔记外,还包含少部分自己扩展的内容,如有错误,敬请指正。

文章目录

  • [1 分叉原理](#1 分叉原理)
    • [1.1 概念](#1.1 概念)
    • [1.2 硬分叉 vs 软分叉](#1.2 硬分叉 vs 软分叉)
  • [2 比特币中的分叉案例](#2 比特币中的分叉案例)
    • [2.1 硬分叉示例 --- 区块大小限制](#2.1 硬分叉示例 — 区块大小限制)
    • [2.2 软分叉示例 --- P2SH (Pay-to-Script-Hash)](#2.2 软分叉示例 — P2SH (Pay-to-Script-Hash))
  • [3 以太坊的分叉案例](#3 以太坊的分叉案例)
    • [3.1 The DAO 事件](#3.1 The DAO 事件)
    • [3.2 防止跨链交易重放攻击](#3.2 防止跨链交易重放攻击)
  • [4 分叉提案](#4 分叉提案)
    • [4.1 Coinbase 字段扩展------软分叉(只是提案,尚未激活!)](#4.1 Coinbase 字段扩展——软分叉(只是提案,尚未激活!))
  • [5 总结](#5 总结)

1 分叉原理

1.1 概念

当区块链网络中的协议规则发生分歧时,会导致链分裂成两条或更多独立的链,这种情况称为 分叉(Fork)

根据协议修改的内容是否向后兼容,分叉可分为 硬分叉(Hard Fork)软分叉(Soft Fork)

1.2 硬分叉 vs 软分叉

  • 硬分叉:向后不兼容。旧节点无法验证新规则下产生的区块,若不升级,将继续在旧链上运行,可能导致永久性链分裂。
  • 软分叉:向后兼容。旧节点仍能验证新区块(尽管可能无法理解其中的新规则),只要多数算力支持新规则,根据最长区块原则,网络最终会收敛到单一链上。

2 比特币中的分叉案例

2.1 硬分叉示例 --- 区块大小限制

假设比特币区块大小限制从 1 MB 增加到 4 MB, 大多数节点更新了软件版本,认可最大 4 MB 的区块,少数未更新的节点仍只认可1 MB 的区块。

  • 新节点挖出的<= 4 MB 区块,旧节点不认可,收到>1M的区块,直接拒绝,还是只在旧链上延申;
  • 旧节点挖出的 <=1 MB 区块,新节点认可,加入区块链,形成了短暂的分叉,但新节点算力数量多,算力强,挖的快,根据最长区块原则,最终也会认可新链;

这样就分裂为两条独立的链,形成永久性硬分叉

举例

  • 区块高度 N:所有节点共识一致(比如 1MB)
  • 新节点挖出区块 A(2MB),广播
  • 旧节点收到 A → 检查大小 → >1MB → 无效 → 丢弃
  • 旧节点继续在 N 上挖 → 产出 B(0.8MB),广播
  • 新节点收到 B → 检查:≤4MB → PoW 有效 → 接受 B 为有效区块
  • 但注意:B 的父区块是 N,不是 A
  • 所以新节点看到两条链:
    链1: N → A(2MB)
    链2: N → B(0.8MB)

如果新节点随后在 A 后挖出 A2,那么链1 变成 N→A→A2,根据最长区块原则,新节点就会放弃链2(N→B),即使 B 本身是有效的。

注意:

  1. 新节点可以接受 B(因为 B ≤4MB),但它不会把 B 接在 A 后面,因为 B 的父哈希是 N,不是 A。
  2. 区块并非越大越好。过大的区块会显著增加 P2P 网络的带宽和存储负担。

2.2 软分叉示例 --- P2SH (Pay-to-Script-Hash)

P2SH 是一种通过脚本哈希实现复杂支付逻辑(如多重签名)的技术,在早期比特币版本中并不存在,后来通过软分叉方式引入:

  • 旧节点仅验证交易的基本结构(如输入/输出格式),不解析脚本内容,因此仍会接受包含 P2SH 输出的新区块;旧节点只验证哈希是否匹配,不执行脚本。虽然这时候输出中的哈希已经不是P2PKH中的接收方公钥哈希,而是赎回脚本哈希。但哈希函数使用的都是HASH160 函数,两者的哈希值,对节点来说格式是一样的,符合格式要求。
  • 新节点完整理解并执行 P2SH 验证。(两阶段:哈希匹配 + 脚本执行)
  • 只要网络中超过半数的算力运行支持 P2SH 的新版本,旧链将因"非最长有效链"而被自然淘汰;
  • 因此,不会产生永久性分叉,系统最终保持统一。

3 以太坊的分叉案例

3.1 The DAO 事件

2016 年,基于以太坊构建的去中心化自治组织 The DAO 遭遇智能合约漏洞攻击,导致约 360 万 ETH(当时价值超 5000 万美元)被黑客盗取。

面对危机,以太坊社区就是否干预链上状态展开激烈争论:

  • 一方坚持"代码即法律",反对任何回滚;
  • 另一方主张保护用户资产,推动协议级修复。

最终,社区通过多数共识实施了一次硬分叉 ,在区块高度 #1,920,000 处将资金状态回滚至攻击前,并允许投资者取回资金。

这一决策直接导致原链继续运行,形成 以太坊经典(Ethereum Classic, ETC) ,而新链则成为今天的主流 以太坊(Ethereum, ETH)

3.2 防止跨链交易重放攻击

分叉初期,ETH 与 ETC 使用完全相同的地址格式、签名算法和交易结构,导致严重的跨链交易重放攻击 风险:

用户在一条链上发起的交易,可被复制并在另一条链上重复执行,造成意外资产损失。

为解决此问题,以太坊通过 EIP-155 提案引入了 chainId(链标识符)机制:

  • 在交易签名过程中,将 chainId 作为哈希计算的一部分;
  • 不同链使用不同的 chainId(如 ETH = 1,ETC = 61);
  • 这使得一笔在 ETH 上签名的交易,在 ETC 网络上验证时会因 chainId 不匹配而失败;
  • 从而确保交易仅在其目标链上有效,彻底防止跨链重放。

如今,chainId 已成为所有 EVM 兼容链的标准配置,是多链生态安全运行的基础。

4 分叉提案

4.1 Coinbase 字段扩展------软分叉(只是提案,尚未激活!)

在比特币中,每个区块的首笔交易称为 Coinbase 交易 ,由矿工创建,用于领取区块奖励。

目前,由于nonce大小不够用,只有4个字节,就算枚举完大概率还是找不到符合target的哈希。所以将Coinbase 交易的前 8 个字节常被用作 extra nonce,以增加挖矿随机性空间(可达 2 96 2^{96} 296 种组合)。

有人提出进一步扩展其用途:将 UTXO(未花费交易输出)集合的默克尔根哈希值写入 Coinbase 字段

这样做的意义在于:

  • 全节点可将 UTXO 集构建成默克尔树;
  • 轻节点可通过默克尔证明,验证某个账户余额是否真实存在(当前比特币无法直接证明余额);
  • 该根哈希最终会影响区块头的 Merkle Root,从而锚定到区块链中。

由于旧节点仅检查 Coinbase 交易的格式合法性(而非内容语义),它们仍会接受包含 UTXO 根的新区块。

因此,这一变更属于软分叉:新节点可执行新规则,旧节点仍兼容,无需强制全网升级。

5 总结

  • 硬分叉 : 旧节点接受不了新规则,将新节点挖出的区块试为无效。 要求所有节点都必须升级,否则将导致永久性链分裂(如 ETH / ETC、BTC / BCH)。
  • 软分叉 :旧节点以仍能接受新规则,将新节点挖出的区块视为有效。只需多数算力支持即可成功部署,旧节点仍能验证新区块,系统可能会产生临时性分叉,但不会产生永久分叉(如 P2SH)。
  • 在实施任何类型的分叉前,必须充分评估其对现有用户、矿工、开发者及整个生态的影响,确保平稳过渡与社区共识。
相关推荐
旺仔Sec3 小时前
2026年中银杯湖北省职业院校技能大赛高职组区块链技术应用任务书
运维·区块链
MQLYES20 小时前
09-BTC-比特币脚本
区块链
CryptoPP20 小时前
主流国际股票行情API接口横向对比:如何选择适合你的数据源?
大数据·笔记·金融·区块链
公链开发1 天前
2026 GameFi开发实战:从“玩法优先”到香港合规落地,一套可持续链游技术方案
区块链
CryptoRzz1 天前
如何高效对接美股实时行情?StockTV API 实战集成指南
java·python·flask·区块链·maven·symfony
终端域名1 天前
虚拟货币域名:加密货币与域名的碰撞 —— 构建未来互联网新生态
microsoft·区块链·加密货币·数字货币域名·网站域名
草原猫1 天前
什么是 DAPP开发?DAPP 开发到底难不难?
区块链·dapp开发
终端域名1 天前
如何保障网络架构变革下物联网设备的安全?
网络·物联网·架构·区块链
终端域名1 天前
移动互联时代物联网的未来发展趋势:从连接到智能的全面跃迁
物联网·区块链