第 4 讲:BTC 协议(三):PoW 共识、分叉与挖矿奖励

第 4 讲:BTC 协议(三):PoW 共识、分叉与挖矿奖励
agsd来源依据:课程文字稿《04-BTC-协议3》;笔记结构与写作规范参考《00笔记生成指南》
第 4 讲:BTC 协议(三)——PoW 共识、分叉与挖矿奖励
1. 本节主线
- 比特币不是按“账户数量”投票,而是按计算力投票。
- 节点通过不断尝试
nonce来求解computational puzzle,从而争夺记账权。 - 一个区块即使交易和区块头本身都合法,也不一定会被接受;它还必须扩展在最长合法链上。
- 分叉可能来自攻击,也可能来自两个矿工几乎同时挖出区块。
- 出块奖励和
coinbase transaction是比特币发行新币的唯一方式,也是矿工参与挖矿的重要激励。 - 比特币共识要达成的不是“谁说了算”,而是所有诚实节点对去中心化账本内容达成一致。
2. 核心概念速览
| 概念 | 简要理解 | 在本节中的作用 |
|---|---|---|
| 记账权 | 向比特币账本写入下一个区块的权利 | 只有成功挖矿的节点才能发布新区块 |
nonce |
区块头中的随机数字段 | 矿工不断尝试不同 nonce,寻找满足难度要求的哈希 |
computational puzzle |
需要大量尝试才能解出的计算难题 | 用来让记账权与算力挂钩 |
block header |
区块头,包含前一区块哈希、Merkle root、nonce、nBits 等信息 |
节点验证区块合法性时首先检查它 |
nBits |
目标阈值的压缩编码 | 表示当前挖矿难度对应的目标范围 |
| 最长合法链 | 被诚实节点接受并继续扩展的最长有效分支 | 决定哪个分叉成为主链 |
forking attack |
通过在链中间插入分叉来试图回滚已有交易的攻击 | 说明“区块内容合法”不等于“应该被接受” |
| 临时性分叉 | 两个矿工几乎同时挖出区块导致的等长分叉 | 正常情况下可能出现,最终由最长合法链规则解决 |
implicit consent |
隐式认可 | 节点继续沿某个区块扩展,就表示认可该区块 |
orphan block |
被主链抛弃的分叉区块 | 其中的出块奖励通常无法真正使用 |
| 出块奖励 | 成功挖出区块后获得的新发行 BTC | 激励矿工消耗算力争夺记账权 |
coinbase transaction |
铸币交易 | 比特币系统中新币发行的唯一方式 |
hash rate |
单位时间内尝试哈希计算的能力 | 决定节点获得记账权的概率权重 |
Sybil attack |
女巫攻击,即创建大量虚假身份操纵投票 | PoW 通过“按算力投票”削弱虚假身份的作用 |
挖矿(mining) |
通过求解 PoW 难题争夺记账权 | 是比特币共识机制的核心过程 |
3. 知识结构图
flowchart TD
A[比特币共识问题] --> B[谁能写入账本]
A --> C[账本内容如何一致]
B --> D[争夺记账权]
D --> E[尝试 nonce]
E --> F[满足目标阈值]
F --> G[发布新区块]
C --> H[验证区块]
H --> I[验证 block header]
H --> J[验证交易合法性]
H --> K[是否扩展最长合法链]
K --> L[接受并继续扩展]
K --> M[拒绝或成为 orphan block]
D --> N[出块奖励]
N --> O[coinbase transaction]
O --> P[新 BTC 发行]
这张图说明:比特币共识机制围绕两个问题展开。第一,谁有资格写账本?答案是成功求解 PoW 难题的矿工。第二,写出来的账本如何被全网接受?答案是新区块不仅要内容合法,还要扩展在最长合法链上。
4. 课程内容详解
4.1 比特币不是按账户投票,而是按算力投票
在去中心化系统中,一个核心问题是:如果没有中心服务器,谁来决定账本的下一页写什么?
直观想法是“投票”。但如果按账户数投票,就会遇到 Sybil attack:攻击者可以低成本创建大量账户,让自己看起来拥有很多投票权。
比特币的解决方法是:不按账户数量投票,而按计算力投票。
也就是说,一个节点能获得多少“话语权”,不取决于它创建了多少个账号,而取决于它每秒能尝试多少次哈希计算。这个能力称为 hash rate。
如果某个节点的算力是另一个节点的 10 倍,那么它成功获得记账权的概率也大约是后者的 10 倍。
这里的关键思想是:
身份可以低成本复制,但算力不能低成本复制。
所以,PoW 机制用物理计算资源取代了虚拟身份数量,降低了女巫攻击的威胁。
4.2 记账权如何获得:尝试 nonce
每个节点都可以在本地组装一个候选区块,把自己认为合法的交易放入 block body 中,然后构造对应的 block header。
block header 中有一个字段叫 nonce。矿工会不断尝试不同的 nonce,计算整个区块头的哈希值,看它是否满足协议规定的目标阈值:
1 | Hash(block header) <= target |
其中:
Hash(block header)是区块头的哈希结果;target是当前难度对应的目标阈值;nBits是这个目标阈值在区块头中的压缩编码。
如果某个节点找到了合适的 nonce,使得区块头哈希小于等于目标阈值,那么它就获得了记账权,可以向网络发布这个新区块。
4.3 其他节点如何验证新区块
矿工发布新区块后,其他节点不会盲目接受,而是要验证它。
验证主要包括三层:
验证区块头是否符合要求
nBits是否符合当前协议难度;nonce是否真的让区块头哈希满足目标阈值;- 前一区块哈希是否正确指向某个已有区块。
验证区块体中的交易是否合法
- 每笔交易是否有合法签名;
- 输入的币是否以前没有被花过;
- 是否存在 double spending。
验证它是否应该被接入主链
- 即使区块头和交易都合法,也要看它是不是扩展最长合法链。
第三点是本节非常重要的地方:
区块内容合法,不等于这个区块一定会被诚实节点接受。
4.4 为什么“合法区块”也可能不被接受
假设有一个新区块,它的区块头合法,里面的交易也都合法。但是它不是接在当前最长链末尾,而是插入到了链中间的某个位置,形成了一个分叉。
这时它可能试图回滚已经发生的交易。
例如:
- 主链上已经记录了
A -> B的转账; - 攻击者又在较早位置分出一条支链;
- 在这条支链上,攻击者把同一笔币转回给自己;
- 从这条支链自身来看,这笔交易可能并不构成 double spending;
- 但从全局效果看,它试图推翻主链上已经发生的交易。
这就是 forking attack 的基本思想。
所以,比特币节点不仅看交易本身是否合法,还要看新区块是否在扩展当前被认可的最长合法链。
4.5 double spending 的判断依赖所在分支
判断一笔交易是否是 double spending,不是把所有分叉上的所有交易混在一起检查,而是看这笔交易所在的链分支。
具体来说,要检查:
从当前交易所在区块往前追溯,到这笔币的来源之间,这个币有没有在同一条分支上被花过。
如果在当前分支上没有被花过,那么从这个分支内部看,它可以是合法交易。
这就解释了为什么攻击者能构造出一个“局部合法”的分叉:
因为在攻击者自己的分支上,这笔币可能没有被重复花费。
但是,比特币协议不会因为某条分支内部合法就接受它。诚实节点最终接受的是最长合法链。
4.6 正常情况下也会产生分叉
分叉不一定都是攻击。正常情况下,如果两个矿工几乎同时找到合法 nonce,它们都可以发布新区块。
这时网络中会出现两个等长分叉:
- 一些节点先收到区块 A,于是先接受 A;
- 另一些节点先收到区块 B,于是先接受 B。
因为网络传播有延迟,不同节点收到消息的顺序可能不同。
在两个分叉等长时,比特币协议默认节点接受自己最早收到的那个区块,并沿着它继续挖矿。
4.7 implicit consent:如何表达“我认可这个区块”
比特币中没有一个中心化投票按钮说“我同意这个区块”。节点对某个区块的认可,是通过行为表达的。
如果一个节点在某个区块后面继续扩展新区块,就表示它认可这个区块。
这叫 implicit consent,即隐式认可。
例如:
1 | A -> B -> C |
如果矿工在 C 后面继续挖出 D,那么它实际上是在表达:
我认可从 A 到 C 这条链,并愿意在它后面继续写账本。
4.8 临时分叉如何被解决
当两个分叉等长时,它们会暂时并存。之后,哪个分叉先被挖出下一个区块,哪个分叉就变得更长。
例如:
1 | -> B1 |
当 B2 分支先得到新区块 C2 后,A -> B2 -> C2 成为最长合法链。诚实节点会切换到这条链上继续扩展。
被抛弃的 B1 就成为 orphan block。
这里要注意:
一个分叉能否胜出,与算力有关,也与随机性有关。算力更强的一方更有可能先挖出下一个区块,但不是绝对保证。PoW 本质上仍然有概率性。
4.9 出块奖励:为什么矿工愿意消耗算力
挖矿需要消耗大量计算资源和电力。矿工之所以愿意这样做,是因为成功获得记账权可以获得奖励。
这份奖励主要来自 coinbase transaction。
coinbase transaction 是一种特殊交易:
- 它不需要指明币的来源;
- 它可以凭空产生一定数量的新 BTC;
- 它只能由成功挖出区块的矿工写入自己发布的区块中;
- 它是比特币系统发行新币的唯一方式。
普通交易只是把已有 BTC 从一个账户转移到另一个账户,不会创造新的 BTC。即使用法币购买 BTC,本质上也只是别人把已有 BTC 转给你,并没有产生新币。
4.10 出块奖励减半
课程中提到,比特币刚上线时,每个区块的出块奖励是 50 BTC。协议规定,每经过 210000 个区块,出块奖励减半:
1 | 50 BTC -> 25 BTC -> 12.5 BTC -> ... |
课程这里是在讲比特币协议的发行机制:
随着时间推移,每个区块能新发行的 BTC 数量逐渐减少。
注意:课程中提到的“现在是 12.5 BTC”属于课程录制时的语境。复习本节时,重点不是记某个时间点的当前奖励,而是理解:
比特币通过固定规则控制新币发行,而不是由中心机构临时决定发行多少。
4.11 orphan block 中的奖励为什么通常没用
如果一个矿工在某个分叉上挖出了区块,并在里面写入了 coinbase transaction,但这个分叉最后没有成为最长合法链,那么这个区块就会变成 orphan block。
这时,该区块里的出块奖励通常无法真正使用。
原因是:
比特币节点验证交易时,会根据最长合法链来判断账本状态。如果某个奖励只存在于被抛弃的短分叉上,那么大多数诚实节点不会承认这笔奖励。
所以,矿工不只是要挖出合法区块,还希望自己的区块最终留在主链上。
4.12 比特币共识到底在共识什么
比特币共识不是简单地共识“谁是矿工”,也不是共识“谁的账户多”。
它真正要共识的是:
去中心化账本的内容。
换句话说,全网诚实节点最终要对“哪些交易已经发生、哪些 BTC 属于谁”达成一致。
而账本内容由谁写入?
答案是:
成功求解 PoW 难题、获得记账权的节点。
这就是为什么说比特币共识是“按算力投票”:
- 能否获得记账权,取决于能否找到合法
nonce; - 找到合法
nonce的概率,取决于hash rate; hash rate越高,获得记账权的概率越高;- 创建更多账户并不能提高
hash rate。
4.13 挖矿的含义
mining 是对比特币争夺记账权过程的形象比喻。
它类似淘金:
- 搜索空间很大;
- 找到合法结果的概率很小;
- 需要不断尝试;
- 一旦成功,就能获得较高奖励。
在比特币中,矿工不是在物理上挖黄金,而是在哈希空间中寻找满足难度目标的 nonce。
所以,“挖到矿”本质上就是:
找到了一个让区块头哈希满足目标阈值的
nonce,从而获得了发布新区块和领取出块奖励的资格。
5. 关键机制图解
5.1 挖矿与区块验证流程
flowchart TD
A[矿工收集交易] --> B[组装候选区块]
B --> C[构造 block header]
C --> D[不断尝试 nonce]
D --> E{Hash <= target?}
E -- 否 --> D
E -- 是 --> F[获得记账权]
F --> G[广播新区块]
G --> H[其他节点验证]
H --> I{block header 合法?}
I -- 否 --> X[拒绝区块]
I -- 是 --> J{交易合法?}
J -- 否 --> X
J -- 是 --> K{扩展最长合法链?}
K -- 否 --> Y[不作为主链接受]
K -- 是 --> Z[接受并继续扩展]
这张图展示了 PoW 共识的完整主干。矿工先通过不断尝试 nonce 来争夺记账权;其他节点收到区块后,要同时验证区块头、交易内容和它是否扩展最长合法链。
5.2 正常分叉与最长合法链选择
flowchart TD
A[已有主链末端] --> B1[矿工1挖出区块 B1]
A --> B2[矿工2挖出区块 B2]
B1 --> C1[部分节点沿 B1 挖矿]
B2 --> C2[部分节点沿 B2 挖矿]
C2 --> D2[先挖出新区块]
D2 --> E[B2 分支变成最长合法链]
C1 --> F[B1 分支成为 orphan block]
这张图说明,正常网络延迟会导致临时性分叉。等长分叉出现后,节点通常先接受自己最早收到的区块。随后,先被继续扩展的分支成为最长合法链,另一条分支被抛弃。
5.3 出块奖励与 coinbase transaction
flowchart TD
A[矿工成功挖出区块] --> B[获得发布区块资格]
B --> C[在区块中加入 coinbase transaction]
C --> D[发行新的 BTC]
D --> E{区块留在最长合法链上?}
E -- 是 --> F[奖励被网络承认]
E -- 否 --> G[区块成为 orphan block]
G --> H[奖励通常无法使用]
这张图强调:出块奖励不是只要写进区块就一定有效。只有区块最终处于最长合法链上,其中的 coinbase transaction 才会被诚实节点承认。
6. 易混点与常见误解
| 易混点 | 正确理解 |
|---|---|
| “区块里的交易都合法,所以一定会被接受” | 不一定。区块还必须扩展最长合法链。插入链中间的合法区块可能是分叉攻击的一部分。 |
| “double spending 是全网所有分叉一起检查” | 不是。判断 double spending 时,要看交易所在分支中该币是否被重复花费。 |
| “最长链就是区块数量最多的任意链” | 更准确地说,是最长合法链。非法交易、非法区块头的链不会被诚实节点接受。 |
| “分叉一定是攻击” | 不一定。两个矿工几乎同时挖出区块,也会导致正常的临时性分叉。 |
| “接受区块就是显式投票同意” | 比特币采用 implicit consent。节点继续沿某区块扩展,就表示认可它。 |
| “矿工挖出区块后奖励一定归自己” | 不一定。如果区块后来变成 orphan block,其中的奖励通常不会被主链接受。 |
| “创建更多账户可以提高投票权” | 在 PoW 中不行。投票权来自 hash rate,不是账户数量。 |
| “挖矿是在挖真实的币” | 挖矿是求解哈希难题。新 BTC 通过 coinbase transaction 发行。 |
7. 课堂外补充理解
7.1 为什么 PoW 可以缓解 Sybil attack
在普通投票系统中,如果没有身份认证,一个人可以创建大量虚假身份,从而操纵投票结果。
但是在 PoW 中,投票权不是身份数量,而是算力。
假设攻击者有一台机器:
- 创建 1 个账户,机器每秒能算 100 次哈希;
- 创建 10000 个账户,机器每秒仍然只能算 100 次哈希。
账户数量变多,并不会让它尝试 nonce 的速度变快。
所以,PoW 把“制造身份”的问题转换成“投入计算资源”的问题。攻击者要提高影响力,就必须投入真实算力,而不能只靠复制账号。
7.2 为什么挖矿结果具有概率性
哈希函数的输出看起来近似随机。矿工尝试不同 nonce 时,无法提前知道哪个 nonce 会成功,只能不断试。
因此,挖矿像抽奖:
hash rate越高,单位时间内抽奖次数越多;- 抽奖次数越多,中奖概率越高;
- 但某一次具体是谁先中奖,仍然有随机性。
这就是为什么课程中说,分叉竞争时算力强的一方更有可能胜出,但算力较弱的一方也可能因为运气好先挖出下一个区块。
7.3 为什么“最长合法链”能稳定账本
如果所有诚实节点都遵循最长合法链规则,那么网络会逐渐收敛到同一条链上。
临时分叉刚出现时,不同节点可能选择不同分支;但一旦某个分支先被继续扩展,它就会更长,其他诚实节点会转向这条更长的合法链。
这使得比特币账本不需要中心服务器,也能逐渐形成一致状态。
8. 本节小结
- 比特币通过 PoW 机制争夺记账权,本质是按算力投票,而不是按账户数量投票。
- 矿工通过不断尝试
nonce,寻找使区块头哈希满足目标阈值的结果。 - 其他节点收到新区块后,需要验证区块头、交易合法性,以及它是否扩展最长合法链。
- 区块内容合法不代表一定会被接受;如果它试图插入链中间并回滚交易,就可能构成
forking attack。 - 正常网络延迟也可能导致临时分叉,最终由最长合法链规则解决。
coinbase transaction是比特币发行新币的唯一方式,出块奖励是矿工参与挖矿的重要激励。orphan block中的奖励通常无法使用,因为它不在被大多数诚实节点接受的主链上。- 比特币共识最终要达成一致的是去中心化账本的内容。
9. 自测问题
1. 比特币为什么不采用“一个账户一票”的机制?
参考答案:
因为账户可以低成本大量创建,会导致 Sybil attack。比特币改用按算力投票,账户数量不会直接增加获得记账权的概率。
2. 矿工如何获得记账权?
参考答案:
矿工组装候选区块,然后不断尝试不同 nonce。如果某个 nonce 使 Hash(block header) <= target,矿工就获得记账权,可以发布新区块。
3. 其他节点收到新区块后主要验证什么?
参考答案:
主要验证三类内容:区块头是否合法,交易是否有合法签名且没有 double spending,以及该区块是否扩展最长合法链。
4. 为什么一个交易合法的区块也可能不被接受?
参考答案:
因为它可能没有接在最长合法链后面,而是插入链中间形成分叉,试图回滚已经发生的交易。比特币要求接受扩展最长合法链的区块。
5. 正常情况下为什么也会出现分叉?
参考答案:
两个矿工可能几乎同时找到合法 nonce 并广播区块。由于网络传播延迟,不同节点可能先收到不同区块,于是暂时沿不同分支扩展。
6. 什么是 implicit consent?
参考答案:
节点不需要显式投票。如果它沿着某个区块继续挖矿、扩展新区块,就表示它认可该区块。
7. orphan block 中的出块奖励为什么通常不能用?
参考答案:
因为该区块不在最终被接受的最长合法链上。诚实节点不会承认短分叉中的账本状态,所以其中的 coinbase transaction 奖励也通常无效。
8. 比特币共识机制要取得的共识到底是什么?
参考答案:
是去中心化账本的内容,即哪些交易被确认、哪些 BTC 属于谁。PoW 决定谁有机会写入账本,最长合法链规则决定哪些写入最终被接受。









