第 5 讲:BTC 实现(二):挖矿概率、安全性与攻击分析

第 5 讲:BTC 实现(二):挖矿概率、安全性与攻击分析

1. 本节主线

  1. 本节从概率角度解释比特币挖矿:每次尝试 nonce 都可以看作一次伯努利试验(Bernoulli trial)。
  2. 通过伯努利过程、泊松过程和指数分布,理解为什么比特币出块时间具有无记忆性(memoryless property)。
  3. 分析比特币总量为什么约为 2100 万,以及区块奖励减半机制如何产生稀缺性。
  4. 讨论比特币安全性:挖矿不能绝对保证安全,只能提供概率意义上的安全保证。
  5. 重点理解双花攻击(double spending attack)、确认数(confirmation)、零确认(zero confirmation)和自私挖矿(selfish mining)。

2. 核心概念速览

概念 简要理解 在本节中的作用
nonce 矿工不断修改的随机数 用于反复尝试找到满足难度要求的区块哈希
伯努利试验(Bernoulli trial) 只有成功 / 失败两种结果的随机试验 每次尝试一个 nonce 可视为一次伯努利试验
伯努利过程(Bernoulli process) 一系列相互独立的伯努利试验 用来描述矿工连续尝试 nonce 的过程
泊松过程(Poisson process) 大量低概率独立事件的近似模型 用来近似整个系统产生新区块的过程
指数分布(exponential distribution) 描述下一次事件发生等待时间的分布 用来描述比特币系统的出块时间
无记忆性(memoryless property) 过去等待多久不影响未来还要等多久 解释为什么“已经挖了很久”不代表“快挖到了”
Progress free 挖矿进度不可累积 保证算力强的矿工只有按算力比例获得优势,而不是超比例优势
区块奖励(block reward) 矿工成功出块后获得的新比特币 是新比特币产生的主要途径
交易费(transaction fee) 用户为了让交易被打包支付给矿工的费用 当区块奖励下降后,继续激励矿工
双花攻击(double spending attack) 试图把已经花出去的币再花一遍 比特币安全分析中的核心攻击场景
确认数(confirmation) 某交易后面接上的区块数量 确认数越多,交易越难被回滚
零确认(zero confirmation) 交易已广播但尚未写入区块 速度快,但安全性弱
自私挖矿(selfish mining) 挖到区块后暂不发布,私下继续挖 可用于制造分叉或减少他人有效竞争

3. 知识结构图

这张图展示了本节的三条主线:第一条是挖矿的概率模型,用于解释出块时间和公平性;第二条是经济激励机制,解释矿工为什么愿意参与;第三条是安全性分析,说明比特币的不可篡改性不是绝对的,而是依靠算力竞争和确认数形成的概率保证。

4. 课程内容详解

4.1 挖矿为什么可以看作伯努利试验?

比特币挖矿的本质是矿工不断尝试不同的 nonce,计算区块头哈希,看看结果是否小于目标阈值。

每一次尝试只有两种结果:

  1. 成功:哈希值满足难度要求,矿工找到合法区块。
  2. 失败:哈希值不满足要求,矿工继续尝试下一个 nonce

这就符合伯努利试验(Bernoulli trial)的定义:一次随机实验只有两种结果

可以类比抛硬币:

  • 抛硬币:正面 / 反面。
  • 挖矿:成功 / 失败。

但二者最大的不同是概率。抛普通硬币时,正反面概率接近各一半;而挖矿时,单次尝试成功的概率极低,绝大多数 nonce 都是失败的。

因此,挖矿不是“靠思考解数学题”,而是不断做大量随机尝试。谁能做更多尝试,谁就有更高概率先找到合法区块。

4.2 伯努利过程与无记忆性

如果矿工不断尝试 nonce,每次尝试都是独立的伯努利试验,那么这些试验连在一起,就构成伯努利过程(Bernoulli process)。

伯努利过程有一个重要性质:无记忆性(memoryless property)

意思是:

前面失败了多少次,不会影响下一次成功的概率。

比如抛硬币时,前面连续 10 次都是反面,并不意味着第 11 次正面的概率会变大。每次抛硬币仍然按照原本概率独立发生。

挖矿也一样:

  • 你已经尝试了很多 nonce,不代表下一个 nonce 更容易成功。
  • 你已经挖了 9 分钟,不代表第 10 分钟更容易出块。
  • 你之前做过的失败尝试不会“积累进度”。

这就是课程中提到的 progress free挖矿没有可累积的进度条

4.3 为什么说挖矿是 progress free?

progress free 直译是“没有进度优势”。它的意思不是说挖矿没有意义,而是说:

对单个矿工来说,已经尝试过的失败计算不会让后续尝试更容易成功。

这听起来有点“无情”,因为过去做的工作似乎都白费了。但这个性质恰恰保证了挖矿公平性。

假设有两个矿工:

  • 矿工 A 的算力是矿工 B 的 10 倍。
  • 那么 A 每秒能尝试的 nonce 数量大约是 B 的 10 倍。
  • 理想情况下,A 找到新区块的概率也应该是 B 的 10 倍。

这就是按算力比例分配机会。

如果挖矿不是 progress free,而是“失败得越多,下一次越容易成功”,那么算力强的矿工就会获得超比例优势。因为算力强者在同一时间里失败次数更多,于是后续成功概率也会更快变大。这样一来,A 的优势就不只是 10 倍,而可能超过 10 倍。

所以,progress free 的真正作用是:

防止强矿工因为历史尝试次数更多而获得不成比例的额外优势。

4.4 泊松过程与指数分布:为什么平均出块时间是 10 分钟?

比特币系统中,每次尝试 nonce 的成功概率极小,但整个网络每秒会进行海量尝试。

这种场景符合一个常见近似:

大量独立试验 + 单次成功概率极低,可以用泊松过程(Poisson process)近似。

在泊松过程下,等待下一次事件发生的时间服从指数分布(exponential distribution)。

对于比特币来说,这个“事件”就是:

整个系统中有人成功挖出下一个合法区块。

因此,比特币的出块时间可以理解为服从指数分布。

注意这里说的是整个系统的出块时间,不是某个具体矿工的出块时间。

比特币协议通过调整挖矿难度,让整个系统的平均出块时间维持在大约 10 分钟。也就是说,从全网角度看,平均每 10 分钟会产生一个新区块。

但具体到某个矿工,情况取决于他的算力占比。

例如:

  • 某矿工拥有全网 1% 的算力。
  • 那么平均来说,全网每产生 100 个区块,其中约 1 个属于他。
  • 全网平均 10 分钟一个区块。
  • 所以这个矿工平均约每 1000 分钟才能挖到一个区块。

这里要区分两个平均时间:

对象 平均出块时间
整个比特币系统 约 10 分钟
单个矿工 取决于该矿工算力占比

4.5 指数分布的无记忆性

指数分布也具有无记忆性。

这意味着:

即使当前已经过去 10 分钟还没有出块,接下来平均仍然要再等 10 分钟。

这点很容易违反直觉。很多人会觉得:“平均 10 分钟出块,现在已经等了 10 分钟,那应该快出了吧?”

但概率模型告诉我们,不是这样。

因为挖矿没有进度积累,系统并不会因为已经很久没出块,就自动提高下一秒出块的概率。每一刻的状态仍然由当前全网算力和当前难度决定。

所以:

  • 已经等了 1 分钟,未来平均还要等 10 分钟。
  • 已经等了 10 分钟,未来平均还要等 10 分钟。
  • 已经等了 30 分钟,未来平均仍然还要等 10 分钟。

当然,这里的“平均”不是说每次都一定再等 10 分钟,而是指条件分布的期望仍然不变。

4.6 比特币总量为什么约为 2100 万?

比特币中新币的产生主要来自区块奖励(block reward)。

课程中强调:

区块奖励是系统中产生新比特币的途径。

比特币的区块奖励不是一直不变的,而是每隔约 21 万个区块减半一次。由于平均 10 分钟出一个区块,21 万个区块大约对应 4 年。

最初:

  • 前 21 万个区块:每个区块奖励 50 BTC。
  • 接下来 21 万个区块:每个区块奖励 25 BTC。
  • 再接下来:12.5 BTC。
  • 之后继续减半。

于是总量可以写成一个几何级数:

1
总量 = 210000 × 50 × (1 + 1/2 + 1/4 + 1/8 + ...)

括号中的几何级数:

1
1 + 1/2 + 1/4 + 1/8 + ... = 2

所以:

1
2
3
总量 = 210000 × 50 × 2
= 210000 × 100
= 21000000

因此,比特币总量约为 2100 万枚。

这里要注意一个常见误解:比特币越来越难“获得”,不是因为它在解决某个越来越稀少的数学对象,比如寻找某种特殊质数;而是因为协议规定的区块奖励不断减半,新增比特币越来越少。

4.7 挖矿本身没有实际计算意义,但有安全意义

课程中特别区分了两件事:

  1. 挖矿计算本身没有实际业务意义。
  2. 挖矿机制对维护系统安全非常重要。

也就是说,矿工反复计算哈希,并不是在解决科学问题,也不是在完成某种有实际用途的数学任务。它的直接作用是竞争记账权。

但是在一个去中心化系统里,没有中心机构决定“谁有资格记账”。比特币需要一种开放的、抗女巫攻击的记账权分配方式。

Proof of Work 的作用就是:

用算力作为竞争记账权的成本。

只要大部分算力掌握在诚实节点手中,恶意节点想篡改账本就必须投入大量算力与全网竞争。这样,挖矿虽然表面上像是在做“无用功”,但它实际上是在给区块链安全性提供成本屏障。

4.8 区块奖励下降后,矿工还有动力吗?

随着区块奖励不断减半,矿工获得的新比特币数量会越来越少。直觉上可能会担心:

如果最后区块奖励趋近于 0,矿工是不是就没有动力挖矿了?

课程中给出的答案是:不一定,因为还有交易费(transaction fee)。

矿工的收入可以理解为两部分:

1
矿工收入 = 区块奖励 + 交易费

早期,区块奖励是主要激励。随着区块奖励减少,交易费会变得越来越重要。

所以,比特币长期安全性的一个关键问题是:

当新币发行奖励逐渐降低后,交易费能否继续支撑足够多矿工参与维护系统安全?

本节没有展开这个长期问题,只需要先理解:比特币激励矿工的机制并不只有区块奖励,还有交易费。

4.9 恶意矿工获得记账权后,能不能偷币?

假设恶意矿工获得了某个区块的记账权,他能不能直接把别人的钱转给自己?

答案是:不能。

原因是比特币交易需要数字签名(digital signature)。

例如,恶意节点 M 想把 A 的币转给自己,需要构造一笔交易:

1
A -> M

但这笔交易必须有 A 的私钥签名才有效。M 虽然获得了记账权,但他不知道 A 的私钥,所以无法伪造 A 的签名。

如果 M 强行把这笔非法交易写入区块,会发生什么?

诚实节点会验证区块中的交易。一旦发现交易签名无效,就不会接受这个区块。比特币节点遵循的是扩展最长合法链,而不是扩展任意最长链。

因此:

不合法的链再长,也不能被诚实节点接受。

这说明,挖矿获得的是记账权,不是随意改账的权力。

4.10 恶意矿工能不能双花?

虽然恶意矿工不能伪造别人签名偷币,但他可以尝试另一类攻击:双花攻击(double spending attack)。

双花的核心目标是:

把同一笔币花出去后,再通过分叉让这笔付款所在的区块作废,从而把钱“拿回来”。

典型场景:

  1. M 向商家 A 发起一笔付款交易。
  2. 这笔交易被写入区块链。
  3. 商家看到交易上链,以为付款完成,于是发货。
  4. M 在较早位置制造另一条分叉链,把同一笔钱转回给自己。
  5. 如果 M 的分叉链最终变成最长合法链,那么原来付款给商家的交易就被回滚。
  6. M 既拿到了商品,又收回了钱。

这里的关键是:恶意交易不能直接接在已有付款交易后面。因为如果同一笔钱已经在上一笔交易中花出,再在后续区块里花一次,诚实节点会直接识别为 double spending 并拒绝。

所以攻击者必须从付款交易之前的位置开始分叉,构造另一条合法链。

4.11 为什么多等几个 confirmation 可以防范双花?

确认数(confirmation)表示某笔交易被写入区块后,后面又接上了多少个区块。

可以简单理解为:

状态 含义
0 confirmation 交易已广播,但还没被写入区块
1 confirmation 交易已经被写入一个区块
2 confirmations 交易所在区块后面又接了 1 个新区块
6 confirmations 交易所在区块后面已有多个区块,回滚难度较高

比特币中常见经验是等待 6 个 confirmation。因为平均 10 分钟一个区块,6 个确认大约需要 1 小时。

为什么确认数越多,双花越难?

因为攻击者要回滚某笔交易,就必须从交易之前的位置开始挖一条分叉链,并让这条分叉链赶上甚至超过诚实链。

如果交易刚刚上链,攻击者只需要赶上很短的链。

如果交易后面已经有多个确认,攻击者就必须连续挖出多个区块,才能让自己的分叉链超过诚实链。

只要大多数算力掌握在诚实节点手中,攻击者连续追上的概率会随着确认数增加而快速下降。

所以,“不可篡改”不是绝对不能改,而是:

随着确认数增加,被成功篡改的概率快速下降。

4.12 区块链不可篡改是概率意义上的

很多人会说区块链是不可篡改账本(irreversible ledger)。这句话要谨慎理解。

严格来说,比特币的不可篡改性不是物理上、逻辑上绝对不可改变。刚刚写入区块链的交易仍然有可能因为分叉而被回滚。

比特币真正提供的是:

基于算力竞争的概率安全性。

确认数越多,攻击者需要重组的区块越多,成功概率越低。因此,交易不是在某一瞬间从“可篡改”变成“绝对不可篡改”,而是随着后续区块增加,逐渐变得越来越难以篡改。

可以把它理解成安全性的连续增强:

1
2
3
4
5
0 confirmation:风险最高
1 confirmation:已有初步保证
3 confirmations:更难回滚
6 confirmations:通常认为足够安全
更多 confirmations:安全性继续增强

4.13 什么是 zero confirmation?

零确认(zero confirmation)指的是:

交易已经广播到网络中,但还没有被写入任何区块。

例如,用户向商家付款后,交易被广播出去,商家节点监听到了这笔交易,并验证其签名合法、输入未花费,但此时还没有新区块包含这笔交易。

这时商家如果直接接受付款,就属于接受 zero confirmation 交易。

这显然有风险,因为交易还没进入区块链,更容易被替换或冲突交易影响。

但课程提到,zero confirmation 在一些实际场景中仍然可能被使用,原因包括:

  1. 节点通常倾向于接受自己最先听到的合法交易。
  2. 很多商业场景本身有处理延迟,比如电商不会立刻发货。
  3. 如果后续发现交易没有进入最长合法链,商家仍可取消发货。

因此,zero confirmation 不是“没有风险”,而是某些低风险或可撤销场景下,为了提升用户体验而接受的一种权衡。

4.14 恶意矿工可以故意不打包某些交易吗?

可以。

比特币协议并没有强制规定矿工必须把哪些交易写入区块。矿工获得记账权后,可以选择:

  • 打包某些交易。
  • 不打包某些交易。
  • 优先打包交易费高的交易。

所以,恶意矿工确实可以故意不把某些合法交易写入自己发布的区块。

但这通常不会造成严重后果,因为:

  1. 其他诚实矿工仍然可以在后续区块中打包这些交易。
  2. 区块容量有限,正常情况下也可能出现合法交易暂时未被打包的情况。
  3. 除非恶意矿工长期控制大量算力,否则很难永久阻止某笔合法交易上链。

这说明,单个恶意矿工可以延迟交易,但很难在诚实算力占多数时长期审查交易。

4.15 什么是 selfish mining?

自私挖矿(selfish mining)指的是:

矿工挖到新区块后,不立即广播,而是先藏起来,继续在自己的私有链上挖。

正常挖矿逻辑是:矿工一旦挖到新区块,应该马上发布。原因很简单:如果不发布,别人可能也挖出同一高度的区块,导致自己的区块失去优势。

但 selfish mining 故意反其道而行之。

攻击者的想法是:

  1. 自己挖到一个区块后先不公布。
  2. 其他矿工还以为旧区块是链尾,继续在旧区块后面挖。
  3. 攻击者私下继续挖,试图形成一条隐藏的私有链。
  4. 等公开链快追上或某个时机成熟时,攻击者一次性公布私有链。
  5. 如果私有链更长,网络会切换到攻击者的链,其他矿工之前挖出的区块作废。

selfish mining 的目的可能有两个:

  1. 配合分叉攻击,回滚某些交易。
  2. 在正常挖矿中减少别人有效竞争,让其他矿工做无用功。

但这种策略有风险。攻击者如果算力不够强,私有链可能被公开链追上甚至超过。那他之前藏起来的区块就可能作废,损失区块奖励。

因此,selfish mining 不是普通小矿工随便就能稳定成功的策略,它依赖较强算力和合适的网络传播条件。

4.16 为什么不能提前把未来很多区块都算好?

课堂中有同学提出一个问题:攻击者能不能提前准备很多未来区块,等需要攻击时一次性发布?

答案是:不能简单地“跳着算未来区块”。

因为每个区块头里都要包含前一个区块的哈希值。也就是说,区块之间是通过哈希指针串起来的。

如果你要挖第 1001 个区块,必须知道第 1000 个区块的哈希。

如果你要挖第 1002 个区块,必须先知道第 1001 个区块的哈希。

所以,攻击者不能在不知道前一区块哈希的情况下,直接提前计算后面很多区块。

他可以做的是:

  • 从某个已知区块开始,私下构造一条分叉链;
  • 挖出一个区块后,再基于这个区块继续挖下一个;
  • 这就是 selfish mining 或分叉攻击中的“私下挖链”。

但他不能凭空提前计算未来还不存在的区块链位置。

5. 关键机制图解

5.1 挖矿概率模型

这张图说明:挖矿不是一步步接近答案,而是不断重复独立随机尝试。每次尝试都是一次伯努利试验,大量尝试形成伯努利过程,从全网角度可以用泊松过程近似,进而得到出块时间服从指数分布。最重要的结论是:出块等待时间具有无记忆性。

5.2 双花攻击与确认数

这张图展示了 double spending 的核心逻辑:攻击者不是直接在付款交易后面再次花费同一笔币,而是从付款交易之前的位置制造分叉。确认数越多,诚实链越长,攻击者需要追赶的距离越大,攻击成功概率越低。

5.3 Selfish mining 的基本思路

这张图说明 selfish mining 的关键不是“算得更快就一定赢”,而是通过隐藏区块改变其他矿工的信息状态,让其他矿工在旧链上浪费算力。但如果攻击者算力不足,隐藏策略反而可能导致自己损失奖励。

6. 易混点与常见误解

易混点 正确理解
挖矿是不是在解决有实际意义的数学难题? 不是。挖矿主要是反复尝试 nonce,找到满足难度要求的哈希。它本身没有实际计算意义,但对系统安全有意义。
比特币越来越难挖,是不是因为“剩下的数学答案越来越少”? 不是。难度来自协议调节和区块奖励减半机制,不是因为某类数学对象越来越稀缺。
已经挖了 10 分钟还没出块,是不是马上就要出了? 不是。出块时间近似服从指数分布,具有无记忆性,未来平均仍然还要等约 10 分钟。
Progress free 是不是说明矿工之前的工作都没意义? 对单次成功概率来说,过去失败尝试不能积累进度;但整体上,算力投入越多,单位时间尝试次数越多,成功概率越高。
区块链不可篡改是不是绝对不能改? 不是绝对不能改,而是确认数越多,篡改成本越高、成功概率越低。
最长链是不是只看长度? 不是。诚实节点扩展的是最长合法链,包含非法交易的链再长也不会被接受。
恶意矿工获得记账权后能不能偷别人币? 不能。转走别人的币需要对方私钥签名,恶意矿工无法伪造签名。
恶意矿工能不能故意不打包某些交易? 可以,但通常只能延迟交易,除非长期掌握大量算力,否则很难永久阻止合法交易上链。
Zero confirmation 是不是完全不能用? 不是。它风险较高,但在低金额、可撤销、存在业务延迟的场景下可能被接受。
Selfish mining 是不是可以提前把未来区块都算好? 不能跳着提前计算未来区块,因为每个区块都依赖前一个区块的哈希。攻击者只能从某个已知区块开始私下连续挖。

7. 课堂外补充理解

7.1 为什么指数分布会出现“越等不越近”的现象?

日常生活中很多任务是有进度条的。比如下载文件,已经下载 90%,说明快完成了。

但挖矿不是这种任务。挖矿更像不停买彩票:

  • 每张彩票中奖概率相同。
  • 你之前买了很多张没中,不代表下一张中奖概率更高。
  • 当然,你买得越多,总中奖概率越高;但每一张彩票本身不会因为之前没中而变得更容易中。

所以,“已经挖了很久”只是说明过去没有成功,并不说明未来更接近成功。

7.2 “概率安全性”怎么理解?

比特币很多安全结论都不是绝对的,而是概率性的。

例如:

  • 恶意节点算力越低,攻击越难。
  • 确认数越多,攻击越难。
  • 诚实节点越多,最长合法链越稳定。

这和传统中心化系统不同。中心化系统通常依赖一个明确的权威服务器判断交易最终状态。比特币则通过全网算力竞争,让某条链逐渐成为更可信的历史。

因此,比特币的安全性来自:

1
密码学签名 + 哈希指针 + Proof of Work + 最长合法链规则 + 经济激励

本节重点讨论的是后面三个:Proof of Work、最长合法链规则和经济激励。

7.3 为什么区块奖励和交易费都是安全机制的一部分?

矿工不是免费维护系统的。矿工投入硬件、电力和时间,是因为能获得收益。

这些收益来自:

  1. 区块奖励。
  2. 交易费。

如果奖励不足,矿工减少,系统总算力下降,攻击者发动攻击的成本也会下降。

所以,区块奖励和交易费不只是经济问题,也是安全问题。比特币通过经济激励吸引矿工参与,再通过矿工算力维护账本安全。

8. 本节小结

  1. 比特币挖矿可以看作不断尝试 nonce 的伯努利过程,每次尝试只有成功或失败两种结果。
  2. 全网出块过程可以用泊松过程近似,出块等待时间服从指数分布,具有无记忆性。
  3. Progress free 保证了挖矿机会基本按算力比例分配,避免强矿工获得超比例优势。
  4. 比特币总量约 2100 万,来自区块奖励每 21 万个区块减半形成的几何级数。
  5. 挖矿本身没有实际计算意义,但通过 Proof of Work 为去中心化系统提供记账权竞争机制和安全成本。
  6. 比特币的不可篡改性是概率意义上的,确认数越多,交易被回滚的概率越低。
  7. 恶意矿工不能伪造签名偷币,但可以尝试 double spending、交易审查或 selfish mining。
  8. Selfish mining 的核心是隐藏已挖出的区块,试图让其他矿工浪费算力,但这种策略依赖较强算力,也有失败风险。

9. 自测问题

1. 为什么每次尝试 nonce 可以看作一次 Bernoulli trial?

参考答案:因为每次尝试只有两种结果:哈希满足目标要求,成功;哈希不满足目标要求,失败。这符合伯努利试验“二元结果”的定义。

2. 什么是挖矿中的 memoryless property?

参考答案:过去尝试了多少次、已经挖了多久,不会影响下一次尝试成功的概率。即使已经等了很久没出块,未来平均等待时间仍然不变。

3. 为什么 progress free 反而有助于挖矿公平?

参考答案:因为它保证过去失败尝试不能积累成额外优势。算力强的矿工优势只来自单位时间尝试次数更多,而不是因为历史尝试越多导致后续成功概率更高。

4. 比特币总量约 2100 万是怎么来的?

参考答案:区块奖励每 21 万个区块减半。总量为:

1
210000 × 50 × (1 + 1/2 + 1/4 + ...) = 210000 × 50 × 2 = 21000000

5. 恶意矿工获得记账权后,为什么不能直接偷别人的币?

参考答案:因为交易需要币所有者的私钥签名。恶意矿工不知道别人的私钥,无法伪造合法签名。包含非法签名交易的区块不会被诚实节点接受。

6. Double spending attack 为什么要通过分叉实现?

参考答案:如果攻击者直接在付款交易后面再次花费同一笔币,诚实节点会识别为双花并拒绝。攻击者必须从付款交易之前的位置构造另一条合法分叉链,让原付款交易所在链被回滚。

7. 为什么等待更多 confirmations 可以提高安全性?

参考答案:确认数越多,付款交易后面接上的诚实区块越多。攻击者要回滚该交易,就必须从更早位置开始追赶并超过诚实链,成功概率随确认数增加而快速降低。

8. Selfish mining 和正常挖矿的区别是什么?

参考答案:正常挖矿是挖到区块后立即广播;selfish mining 是挖到区块后先隐藏,私下继续挖,试图在合适时机公布更长私有链,让其他矿工的区块作废。