07-BTC-挖矿难度

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

文章目录

  • [1. 挖矿](#1. 挖矿)
  • [2. 近年趋势图(截至2018)](#2. 近年趋势图(截至2018))
    • [2.1 算力](#2.1 算力)
    • [2.2 挖矿难度(2009-2018)](#2.2 挖矿难度(2009-2018))
    • [2.3 挖矿难度(近半年)](#2.3 挖矿难度(近半年))
    • [2.4 出块时间(2010-2018)](#2.4 出块时间(2010-2018))
    • [2.5 出块时间(2018.2-2018.7)](#2.5 出块时间(2018.2-2018.7))

1. 挖矿

在工作量证明(Proof of Work, PoW)共识机制中,矿工通过不断尝试修改区块头(block header)中的 nonce 字段,使得对整个区块头进行双重 SHA-256 哈希运算后的结果满足特定条件:

block_hash = SHA256 ( SHA256 ( block_header ) ) ≤ target \text{block\_hash} = \text{SHA256}(\text{SHA256}(\text{block\_header})) \leq \text{target} block_hash=SHA256(SHA256(block_header))≤target

其中:

  • target 是一个 256 位的大整数,代表当前网络允许的最大哈希值;
  • bits 字段是 target压缩表示形式,存储在区块头中。

只有当计算出的区块哈希值小于或等于该目标阈值时,该区块才被其他节点视为有效,矿工才能获得区块奖励。

1.1 挖矿难度的定义与调整

比特币使用的哈希函数是 SHA-256 ,其输出空间为 2 256 2^{256} 2256 个可能值。挖矿的本质是在这个巨大的空间中寻找一个落在目标区间 [ 0 , target ] [0, \text{target}] [0,target] 内的哈希值。

  • 目标空间占比 : target 2 256 \frac{\text{target}}{2^{256}} 2256target
  • 挖矿难度(Difficulty) 定义为:
    difficulty = difficulty_1_target current_target \text{difficulty} = \frac{\text{difficulty\_1\_target}}{\text{current\_target}} difficulty=current_targetdifficulty_1_target
    其中 difficulty_1_target 是比特币创世块设定的初始目标(对应难度为 1),它是一个很大的值,用10进制表示是2695953529101130949315647634472881282790298058886387306093882117760,约2.69595× 10 72 10^{72} 1072 。

通俗说法"哈希值前导零越多,难度越大"并不严格准确------真正决定难度的是目标阈值 target 的大小,而非零的数量。但由于 target 越小,哈希值越可能以多个零开头,因此这种说法在实践中常被用作直观理解。

关键关系

  • target 越小 → 难度越大 → 找到有效 nonce 越难
  • target 越大 → 难度越小 → 出块越快

1.2 挖矿难度过低的风险

若挖矿难度设置过低(即 target 过大),会导致以下问题:

  1. 出块速度过快:例如几秒就产生一个区块。
  2. 高分叉率(High Forking Rate)
    • 不同节点因网络延迟接收到不同区块,各自在其后继续挖矿;
    • 导致区块链频繁出现临时分叉(orphan blocks)。
  3. 算力分散:诚实节点的算力被分散到多个分支上。
  4. 安全威胁
    • 恶意攻击者只需较少算力即可在其私有链上持续出块;
    • 更容易发动 51% 攻击自私挖矿(Selfish Mining)
    • 破坏最长链原则,危及系统一致性与安全性。

虽然比特币设定 平均 10 分钟出一个块 ,但这并非理论最优值。有人认为对支付场景而言 10 分钟太长。

例如,以太坊 将出块时间缩短至约 15 秒(约为比特币的 1/40),显著提升交易确认速度。

但出块速度不能无限加快。为此,以太坊引入了 GHOST 协议(Greedy Heaviest Observed Subtree):

  • 不再简单丢弃陈腐区块(stale blocks);
  • 将其作为 "叔块(uncle blocks)" 纳入主链并给予部分奖励(uncle reward);
  • 同时以太坊同样也需动态调整挖矿难度,以维持出块时间稳定。

1.3 比特币的难度调整机制

比特币采用周期性自动调整 策略,确保长期平均出块时间稳定在 10 分钟

调整周期

  • 2016 个区块 调整一次难度;
  • 理论周期时长: 2016 × 10 分钟 = 20160 分钟 = 14 天 2016 \times 10\ \text{分钟} = 20160\ \text{分钟} = 14\ \text{天} 2016×10 分钟=20160 分钟=14 天。

调整公式

设:

  • actual_time:过去 2016 个区块实际耗时(单位:秒);
  • expected_time = 2016 × 600 = 1,209,600 秒(即 14 天);

则新目标为:
new_target = old_target × actual_time expected_time \text{new\_target} = \text{old\_target} \times \frac{\text{actual\_time}}{\text{expected\_time}} new_target=old_target×expected_timeactual_time

  • actual_time > expected_time → 挖得太慢 → 降低难度(增大 target);
  • actual_time < expected_time → 挖得太快 → 提高难度(减小 target)。

防波动限制(难度调整边界)

为防止网络算力突变(如矿场宕机、大规模加入)导致难度剧烈震荡,比特币协议规定:

  • 每次调整幅度不得超过 4 倍
    • 最多将 target 增大 4 倍(难度降至 1/4);
    • 最多将 target 减小 4 倍(难度升至 4 倍)。

即:
1 4 ≤ actual_time expected_time ≤ 4 \frac{1}{4} \leq \frac{\text{actual\_time}}{\text{expected\_time}} \leq 4 41≤expected_timeactual_time≤4

超出此范围的,按边界值处理。

全网一致性保障

  • 难度调整逻辑硬编码在所有合规节点的共识规则中
  • 若某个矿工不按规则调整 ,其生成的区块将包含错误的 bits 字段;
  • 其他诚实节点会拒绝该区块,因其不满足当前难度要求;
  • 因此,恶意节点无法单方面维持旧难度------其区块不会被网络接受。

1.4 设计哲学与保守性

比特币的难度调整参数(如 2016 区块周期、4 倍限制、10 分钟目标)并非来自严格的数学最优解,而是经过工程权衡后的保守设计

  • 稳定性优先:避免因短期算力波动导致系统不稳定;
  • 抗攻击性:防止攻击者利用难度滞后发起双花或重组攻击;
  • 去中心化兼容:适应全球矿工网络的异构性和通信延迟。

尽管这些参数未来可通过软分叉或硬分叉调整,但在比特币当前的治理模型下,任何改动都需广泛社区共识,因此保持高度保守。


总结

项目 说明
目标 维持平均 10 分钟出块
调整周期 每 2016 个区块(约 2 周)
调整依据 实际出块时间 vs 期望时间
调整方式 线性缩放 target,带 ±4 倍限制
安全机制 共识规则强制执行,非合规区块被拒
设计理念 稳定、安全、去中心化优先

这一机制是比特币能在十余年中保持稳定运行的关键基石之一。

2. 近年趋势图(截至2018)

2.1 算力

可以看到,全网算力越来越大,最近几年成指数级增长

2.2 挖矿难度(2009-2018)

与算力图增涨趋势基本一致,符合难度调整设计目标,保证出块速度稳定。

2.3 挖矿难度(近半年)

每2周都有一个阶梯变化,反应算力越来越高,人们对比特币的热情越来越高。

2.4 出块时间(2010-2018)

基本稳定在10分钟上下震动,难度调整达到预期。

2.5 出块时间(2018.2-2018.7)

相关推荐
暴躁小师兄数据学院32 分钟前
【WEB3.0零基础转行笔记】Golang编程篇-第4讲:Go语言中的流程控制
开发语言·后端·golang·web3·区块链
devmoon1 小时前
使用 Remix IDE 在 Polkadot Hub 测试网部署 ERC-20 代币(新手完整实战教程)
web3·区块链·智能合约·solidity·remix·polkadot·erc-20
China_Yanhy1 小时前
入职 Web3 运维日记 · 第 7 日:消失的 5 万 U —— 归档节点与 Nginx 的智能分流
运维·区块链
ETFOption1 小时前
ETF期权实战手册:从策略构建到动态管理的完整流程
区块链
模型时代1 天前
Infosecurity Europe欧洲信息安全展将推出网络安全初创企业专区
安全·web安全·区块链
devmoon1 天前
智能合约实战 - 水龙头哪里领和创建第一个智能合约地址
web3·区块链·测试用例·智能合约·solidity
Mr.朱鹏1 天前
预测-下一个互联网风口?【PolyMarket调研】
web3·区块链·互联网·预测·加密货币·polymartet·风口
MicroTech20251 天前
微算法科技(NASDAQ :MLGO)抗量子攻击区块链共识机制:通过量子纠缠态优化节点验证流程,降低计算复杂度
科技·算法·区块链
财迅通Ai1 天前
《2025年香港IPO及二级市场白皮书》发布:港股投资热情高涨 基石投资金额突破千亿
区块链
傻小胖1 天前
20.ETH-难度调整-北大肖臻老师客堂笔记
笔记·区块链