学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=20
本博客除了包含自己的在学习过程中记录的笔记外,还包含少部分自己扩展的内容,如有错误,敬请指正。
文章目录
- [1. 比特币 vs 以太坊:难度调整频率](#1. 比特币 vs 以太坊:难度调整频率)
- [2. 基础难度公式](#2. 基础难度公式)
- [3. 难度调整量的计算](#3. 难度调整量的计算)
-
- [1. 难度调整单位](#1. 难度调整单位)
- [2. 难度调整系数](#2. 难度调整系数)
- [3. 难度调整量](#3. 难度调整量)
- [4. 为什么引入"叔父标志"?](#4. 为什么引入“叔父标志”?)
- [5.示例(以不带叔父区块为例,叔父标志 = 1)](#5.示例(以不带叔父区块为例,叔父标志 = 1))
- [6. 难度炸弹:推动从 PoW 转向 PoS 的关键设计](#6. 难度炸弹:推动从 PoW 转向 PoS 的关键设计)
-
- [1. 为什么需要难度炸弹?](#1. 为什么需要难度炸弹?)
- [2. 难度炸弹如何工作?](#2. 难度炸弹如何工作?)
- [3. 为什么 PoS 一再推迟?难度炸弹如何应对?](#3. 为什么 PoS 一再推迟?难度炸弹如何应对?)
- [7. 以太坊的发展阶段(PoW 时代)](#7. 以太坊的发展阶段(PoW 时代))
-
- 八、链选择规则:最大难度合法链
- [Difficulty:表示当前区块难度。 Total Difficulty: 表示总区块难度。 ](#Difficulty:表示当前区块难度。 Total Difficulty: 表示总区块难度。
) - 九、总结:机制背后的设计哲学
1. 比特币 vs 以太坊:难度调整频率
- 比特币 :每 2016 个区块(约两周)调整一次难度;
- 以太坊(PoW 阶段) :每个区块都调整一次难度。
这使得以太坊能更快响应算力变化,维持平均出块时间在 13--15 秒左右。
2. 基础难度公式
当前区块的难度计算公式为:
当前区块难度 = max ( 最小难度 , 父区块难度 + 难度调整量 ) + 难度炸弹 \text{当前区块难度} = \max\left( \text{最小难度},\ \text{父区块难度} + \text{难度调整量} \right) + \text{难度炸弹} 当前区块难度=max(最小难度, 父区块难度+难度调整量)+难度炸弹
其中:
- 最小难度 = 131072(即十六进制
0x20000),是协议规定的硬性下限; - 父区块难度:上一个区块的难度值;
- 难度调整量:根据出块快慢动态计算;
- 难度炸弹:为推动共识机制转型而设计的指数增长项(后文详述)。
3. 难度调整量的计算
1. 难度调整单位
以太坊协议中,定义父区块难度/2048,向下取整为一个调整单位。
难度调整单位 = ⌊ 父区块难度 2048 ⌋ \text{难度调整单位} = \left\lfloor \frac{\text{父区块难度}}{2048} \right\rfloor 难度调整单位=⌊2048父区块难度⌋
这个单位不是固定值,而是随父区块难度同比例缩放,确保在高算力或低算力环境下都能平滑调节。
2. 难度调整系数
调整系数 = max ( 叔父标志 − ⌊ 出块时间间隔 9 ⌋ , − 99 ) \text{调整系数} = \max\left( \text{叔父标志} - \left\lfloor \frac{\text{出块时间间隔}}{9} \right\rfloor,\ -99 \right) 调整系数=max(叔父标志−⌊9出块时间间隔⌋, −99)
说明:
- 出块时间间隔 = 当前区块时间戳 − 父区块时间戳(单位:秒);
- 叔父标志 :
- 如果当前区块引用了至少一个叔父区块,则 叔父标志 = 2;
- 否则(无叔父区块),叔父标志 = 1;
- −99 是调整系数的下限,主要是为了应对被黑客攻击或者想不到的黑天鹅事件,防止难度崩盘式下跌。
3. 难度调整量
难度调整量 = 调整系数 × 难度调整单位 \text{难度调整量} = \text{调整系数} \times \text{难度调整单位} 难度调整量=调整系数×难度调整单位
4. 为什么引入"叔父标志"?
当当前区块引用叔父区块时,系统整体出块奖励会变多(矿工可获得出块奖励 + 叔父额外奖励 + 给叔父区块的奖励 )。
这会导致 ETH 发行速率上升,破坏长期通胀模型的稳定性。
为了维护发行节奏的稳定,协议规定:只要包含叔父区块,就提高难度一个单位(即叔父标志 = 2),从而略微抑制出块速度,平衡新增代币供应。
5.示例(以不带叔父区块为例,叔父标志 = 1)
| 出块时间间隔(秒) | 调整系数计算 | 调整结果 |
|---|---|---|
| [1, 8] | 1 − ⌊ 间隔 / 9 ⌋ = 1 − 0 = 1 1 - \lfloor \text{间隔}/9 \rfloor = 1 - 0 = 1 1−⌊间隔/9⌋=1−0=1 | 难度 增加 1 个难度调整单位(出块太快) |
| [9, 17] | 1 − 1 = 0 1 - 1 = 0 1−1=0 | 难度 不变(出块时间可接受) |
| [18, 26] | 1 − 2 = − 1 1 - 2 = -1 1−2=−1 | 难度 减少 1 个难度调整单位(出块太慢) |
| > 26 | 继续减小,但 ≥ −99 | 最多减少 99 个难度调整单位 |
6. 难度炸弹:推动从 PoW 转向 PoS 的关键设计
1. 为什么需要难度炸弹?
以太坊计划从 工作量证明(PoW) 转向 权益证明(PoS) 。
但问题来了:那些已经在 GPU/ASIC 上投入大量资金的矿工会不会强烈抵制?
如果强行切换,很可能导致社区分裂------一部分人坚持 PoW 链,另一部分使用新的 PoS 链,造成硬分叉和生态割裂。
为了避免这种情况,以太坊核心开发者设计了一个巧妙机制:难度炸弹。
2. 难度炸弹如何工作?
难度炸弹是一个指数增长的额外难度项,其公式为:
难度炸弹 = { 2 ( ⌊ 当前区块号 100000 ⌋ − 2 ) , 如果 ⌊ 当前区块号 100000 ⌋ ≥ 2 0 , 否则 \text{难度炸弹} = \begin{cases} 2^{\left( \left\lfloor \dfrac{\text{当前区块号}}{100000} \right\rfloor - 2 \right)}, & \text{如果 } \left\lfloor \dfrac{\text{当前区块号}}{100000} \right\rfloor \geq 2 \\ 0, & \text{否则} \end{cases} 难度炸弹=⎩ ⎨ ⎧2(⌊100000当前区块号⌋−2),0,如果 ⌊100000当前区块号⌋≥2否则
- 前期增长极慢(前几百万区块几乎无感);
- 后期指数爆炸(每 10 万个区块,炸弹值翻倍);
- 最终导致出块时间从 15 秒延长到几分钟甚至几小时------进入"冰河时代"。
💡 目的很明确:让 PoW 挖矿逐渐变得无利可图,倒逼全网升级到 PoS,不升级就挖不到矿,而不是靠强制投票或中心化决策。
3. 为什么 PoS 一再推迟?难度炸弹如何应对?
现实是:PoS(Serenity)的开发比预期困难得多 ,迟迟无法上线。
但难度炸弹已经开始显现------矿工发现越来越难挖出区块,网络濒临瘫痪。
怎么办?
以太坊通过 硬分叉"回退区块号" 来降低难度炸弹值。
有效区块号 = max ( 当前区块号 − 3,000,000 , 0 ) \text{有效区块号} = \max(\text{当前区块号} - \text{3,000,000},\ 0) 有效区块号=max(当前区块号−3,000,000, 0)
然后用这个"回退后的区块号"代入难度炸弹公式,从而大幅降低难度。同时还需要降低出块奖励(5ETH->3ETH)。
难度炸弹调整后,为什么要同步降低区块奖励?
因为难度下调后,如果维持原奖励,矿工单位时间收益会高于历史水平 ,这对早期参与挖矿的用户不公平。因此需要降低区块奖励,以保持经济模型的公平性。
7. 以太坊的发展阶段(PoW 时代)
本课程内容基于 2018 年,当时以太坊尚未转向 PoS,仍处于挖矿阶段。其发展分为四个主要阶段:
- Frontier(2015.7):初始上线,命令行界面,开发者挖矿;
- Homestead(2016.3):首个稳定版,引入最小难度 131072;
- Metropolis :
- Byzantium(2017.10):首次推迟难度炸弹,奖励降至 3 ETH;
- Constantinople(2019.2):再次推迟,奖励降至 2 ETH;
- Serenity (即 The Merge ,2022年9月):正式切换至 PoS,PoW 终止,难度炸弹失效。
注:直到 2022 年 9 月 15 日,以太坊才完成"合并"(The Merge),彻底告别挖矿。
八、链选择规则:最大难度合法链
- 比特币 :选择 最长合法链(即区块数量最多);
- 以太坊(PoW) :选择 总难度最大的合法链,其中:
总难度 = ∑ i = 0 当前区块 第 i 个区块的难度 \text{总难度} = \sum_{i=0}^{\text{当前区块}} \text{第 } i \text{ 个区块的难度} 总难度=i=0∑当前区块第 i 个区块的难度
Difficulty:表示当前区块难度。
Total Difficulty: 表示总区块难度。

九、总结:机制背后的设计哲学
| 机制 | 目的 |
|---|---|
| 逐块调整难度 | 快速适应算力波动,稳定出块时间 |
| 叔父标志联动 | 平衡因叔父奖励带来的通胀上升 |
| −99 下限 | 防范黑客或黑天鹅事件导致系统崩溃 |
| 难度调整单位 | 实现与当前网络状态匹配的比例式调节 |
| 难度炸弹 | 以经济手段而非强制手段推动共识升级,避免社区分裂 |
| 推迟炸弹 + 降奖励 | 在 PoS 延迟的现实下,防止挖不出矿,并保证矿工公平 |