Lazy loaded image
⛓️BTC 网络、挖矿与难度调整
字数 2117阅读时长 6 分钟
2025-1-13
2026-8-17
← 返回总目录 · 区块链技术与应用笔记(BTC)
比特币网络是一个分布式和去中心化的网络
1. 信息传播
比特币网络使用点对点(P2P)技术来传播信息。这种传播机制确保没有中心服务器或单一故障点,所有节点(矿工和用户)都是网络的一部分。
  • 节点(Nodes):
    • 节点是比特币网络的重要组成部分,负责存储区块链副本,并转发交易和区块信息。
    • 节点分为全节点和轻节点(SPV节点)。全节点存储和验证完整的区块链,而轻节点则依赖全节点来确认交易。
  • 信息传播流程:
    • 当用户发起一笔交易时,交易信息首先广播到网络中的其他节点。
    • 节点接收到交易后,验证其有效性(如确认输入是否有效、签名是否正确等),然后将其传播给其他节点。
    • 经过验证的交易会被加入到待处理的交易池(mempool)中,矿工从中选择交易进行打包。
2. 应用层协议
  • 比特币协议:
    • 比特币网络使用一种称为“比特币协议”(Bitcoin Protocol)的执行标准。协议定义了节点之间如何交换信息,包括交易格式、区块头格式、以及节点间的通信方式等。
    • 该协议使用 JSON-RPC(Remote Procedure Call)标准,允许用户通过命令行界面或应用程序接口(API)与比特币节点进行交互。
  • 交易协议:
    • 交易由输入(引用已有的UTXO)和输出(创建新的UTXO)构成。比特币协议定义了如何创建、签署和广播交易。
3. 网络层协议
  • TCP/IP 协议:
    • 比特币网络基于 TCP/IP 协议运行,允许节点通过互联网相互通信。TCP(传输控制协议)确保数据包按顺序到达,而 IP(互联网协议)负责数据传输。
  • P2P 网络:
    • 比特币使用 P2P 技术管理网络拓扑结构,每个节点都维护一个连接池,与其他节点直接通信。节点连接使用“对等”模式,避免了中央服务器的单点故障。
  • 节点发现(Node Discovery):
    • 比特币网络中,节点通过 DNS Seeder(域名服务播种器)发现其他节点。新节点通过 DNS Seeder 获取当前活跃的节点的 IP 地址,然后建立连接。
    • DNS Seeders 是一种用于 P2P 网络(如比特币)中的节点发现服务,帮助新加入的节点找到其他活跃节点进行连接。这种机制是通过 DNS(域名系统)实现的,具体情况如下:
      1. DNS Seeders 的功能
      • 节点发现: DNS Seeders 提供一个列表,包括当前在线的、可连接的节点的 IP 地址。这允许新节点在启动时快速确定能够连接到的其他节点。
      • 简化连接过程: 因为新节点无法立即知道网络中的其他节点,DNS Seeders 给予这些节点一个快速的访问入口。它们可以向 DNS Seeder 发送查询,然后获取节点地址来建立连接。
      2. 所属
      • 维护者: DNS Seeders 通常由社区成员、开发者或特定组织维护。例如,在比特币网络中,可能有多个 DNS Seeder 由不同的开发者或社区成员负责,以确保冗余和可用性。
      • 开放性: 大多数 DNS Seeders 都是公开的,任何人都可以使用它们来发现网络中的节点。它们并非由单一实体控制,而是分散在多个维护者手中,以增强网络的去中心化特性。
      3. 位置
      • 网络服务器: DNS Seeders 通常配置在运行 DNS 服务的网络服务器上。这些服务器可以位于任何地方,并可能由不同的个人或组织拥有和管理。
      • 地理分布: 为了增强可用性和降低延迟,一些 DNS Seeders 可能会在不同的地理位置部署,确保无论用户身在何处,都能快速访问这些服务。
在比特币挖矿中,挖矿难度(difficulty)是用来控制新区块生成速度的一个关键参数。
  1. 基本概念
  • 目标值(Target): 这是一个二进制数,与区块头中的哈希值进行比较,用于决定新区块是否有效。目标值越低,找到有效哈希的难度就越大。目标值是由网络根据当前的挖矿条件自动调整的。
  • 难度(Difficulty): 难度是相对值,用于量化挖矿成功找到一个有效区块所需的努力程度。难度的变化会影响矿工需要解决的数学问题的复杂性。
  1. 挖矿难度的计算公式
    1. 挖矿难度通常可以表示为:
  1. difficult_1_target
    1. 在比特币网络中,difficult_1_target 通常设定为一个非常大的数,数值相当于 2 的 224 次方减去 1(共计 256 位的数字,通常以十六进制表示为 )。 difficult_1_target 定义了“难度1”的基准。也就是说,当目标值(target)等于这个 difficult_1_target 时,我们就说挖矿的难度为 1。
target 越小,难度值越大,表明在挖矿时找到有效哈希的难度增加。
  1. 挖矿难度的调整:
    1. 比特币网络大约每两周(2016 个区块)会重新评估挖矿难度,以确保即使网络中的矿工数量和算力发生变化,平均每 10 分钟仍能生成一个新区块。
      难度调整的基本公式
      预期生成的时间就是两周即理想情况下10分钟一个区块,产生2016个区块的时间;难度变化也有范围这是为了防止波动超出范围则取最值,简单来说,范围是[1/4倍旧难度,4倍旧难度],为了直观理解这里都直接用target表示了,target越高难度越低
挖矿的无记忆性
挖矿过程中如果监听到最长合法链增长了新区块,则必须停止现有的挖矿,然后重新在本地组建候选区块重新挖,但是这并不可惜,因为挖矿的过程是memoryless,任何时候挖矿,不管挖了多久,不管是继续挖原来的区块,还是重新挖区块,成功的概率是一样的
在数学和概率论中,这种特性通常与泊松过程等随机过程相关。
数学上的理解:
假设有一个随机过程,每次尝试的成功概率是 p,每次失败的概率是 1 - p。挖矿过程的成功与否取决于是否找到了符合要求的哈希值,且这些尝试是独立的。
泊松过程:
假设矿工每秒钟尝试一次计算,成功的概率p,那么对于每个时间间隔,挖矿过程可以被看作是一个泊松过程(Poisson process),其特征是:
  • 每次挖矿尝试的结果是独立的;
  • 每次尝试成功的概率是固定的。
在这种情况下,记忆性是缺失的:如果矿工已经尝试了100次而未能成功,这些尝试对下一个挖矿尝试的结果没有任何影响。即使他已经尝试了很多次,下一次成功的概率仍然是 p
上一篇
BTC 脚本(一):输入与输出脚本
下一篇
BTC 区块结构、双花攻击与安全性

评论
Loading...