Skip to content

7. 挖矿

约 3236 个字 预计阅读时间 16 分钟 共被读过

1. 全节点

  • 持续在线:全节点始终保持在线状态,确保能够实时参与比特币网络的各项活动,不会错过任何重要信息。
  • 完整区块链维护:在本地硬盘上存储并维护完整的区块链信息,涵盖从创世区块到最新区块的所有数据,包括区块头和区块体的详细内容。这使得全节点能够独立验证整个区块链的历史和当前状态。
  • UTXO 集合管理:在内存中维护未花费交易输出(UTXO)集合。UTXO 集合记录了所有未被花费的交易输出,通过这种方式,全节点能够快速检验交易的正确性。当新交易进入时,全节点可以迅速查看交易输入是否来自有效的 UTXO,从而判断交易是否合法。
  • 交易监听与验证:持续监听比特币网络的交易信息,对每个接收到的交易进行合法性验证。验证过程包括检查交易的签名是否正确、交易输入是否存在且未被重复花费、交易输出是否符合规定等多方面内容。
  • 交易打包决策:决定哪些交易将被打包到下一个区块中。全节点会根据一定的规则,如交易费用的高低、交易的优先级等因素,从内存池中的众多交易中选择合适的交易进行打包,以构建新的区块。
  • 区块监听与验证:监听其他矿工挖出来的区块,对其合法性进行严格验证。验证内容包括区块头的各项参数(如版本号、前一个区块头哈希、Merkle 根哈希、目标值、随机数等)是否正确,区块体中的交易是否都合法且符合规则等。
  • 挖矿活动
    • 链选择:在挖矿过程中,全节点需要决定沿着哪条链挖下去。通常情况下,全节点会选择当前最长的合法链进行挖矿,因为最长合法链代表了网络中大多数节点认可的交易历史和状态。
    • 分叉处理:当出现等长的分叉时,全节点需要做出选择。一般会优先选择包含更多工作量(即挖矿难度更高)的分叉,因为这意味着该分叉背后投入了更多的计算资源,更有可能是合法的。如果两个分叉的工作量相同,全节点可能会随机选择一个分叉继续挖矿,直到其中一个分叉成为更长的链。

2. 轻节点

  • 非持续在线:轻节点并非一直在线,它可以根据用户需求随时连接到比特币网络,获取所需信息后再断开连接,这种特性使得轻节点更加灵活,适合资源有限或对实时性要求不高的设备和场景。
  • 部分区块链存储:不需要保存整个区块链,只需要保存每个区块的块头信息。区块头包含了区块的关键元数据,如版本号、前一个区块头哈希、Merkle 根哈希、目标值、随机数等,通过这些信息,轻节点可以参与简单的区块链验证和同步操作。
  • 相关交易保存:仅保存与自己相关的交易,而不是全部交易。这大大减少了存储需求,使得轻节点能够在资源受限的设备(如手机、低配置电脑等)上运行。
  • 交易验证局限:由于缺乏完整的区块链和交易数据,轻节点无法检验大多数交易的合法性,只能对与自己相关的那些交易进行有限的验证。例如,轻节点可以验证自己发起或接收的交易的签名是否正确,但对于其他用户之间的交易,它无法进行全面的验证。
  • 区块验证能力有限:无法检测网上发布的区块的正确性,因为它没有完整的交易数据来验证区块体中的交易。然而,轻节点可以验证挖矿的难度,通过检查区块头中的目标值和随机数,判断该区块是否满足当前的挖矿难度要求。
  • 最长链检测:轻节点只能检测哪个是最长链,但无法确定哪个是最长合法链。这是因为它缺乏验证所有交易和区块完整性的能力,只能根据接收到的区块头信息来判断链的长度。在存在分叉的情况下,轻节点可能会跟随最长链,但这条链不一定是完全合法的。

3. 比特币的安全性保证

3.1 密码学

  • 比特币的安全性在很大程度上依赖于密码学技术。
  • 非对称公私钥加密体系确保了别人不会伪造你的签名。在比特币交易中,交易发起者使用自己的私钥对交易进行签名,其他节点则使用其公钥来验证签名的真实性。只有拥有正确私钥的用户才能对交易进行有效签名,这就保证了不会有人未经授权转走你的钱。
  • 然而,这种安全性保障的前提是网络中的大多数节点是诚实可靠的。如果大多数节点被恶意控制,那么整个密码学体系的安全性将受到威胁。

3.2 共识机制

  • 共识机制是比特币安全性的另一大支柱。
  • 通过共识机制,比特币网络中的节点能够就区块链的状态和交易的有效性达成一致。
  • 例如,工作量证明(PoW)机制要求矿工通过大量的计算来解决复杂的数学难题(挖矿),只有成功找到符合条件的哈希值的矿工才能创建新区块并获得奖励。
  • 这种机制保证了在正常情况下,最长合法链是由诚实矿工通过大量的计算资源投入形成的,恶意攻击者要想篡改区块链数据,需要投入超过网络中诚实节点总和的算力,这在现实中是非常困难的。

4. 挖矿的设备

4.1 CPU 挖矿

使用中央处理器(CPU)进行挖矿在比特币发展初期较为常见,但随着比特币网络的发展和挖矿难度的增加,CPU 挖矿变得极不划算。CPU 主要设计用于通用计算任务,其挖矿效率相对较低,能耗却较高。在面对日益增长的挖矿难度时,CPU 挖出一个区块所需的时间和电力成本远远超过了可能获得的收益。

4.2 GPU 挖矿

图形处理器(GPU)因其具备大规模的并行计算能力,在一段时间内成为了比特币挖矿的主流设备。GPU 最初设计用于处理图形渲染任务,其中包含大量的并行计算单元,这使得它在挖矿这种需要大量重复计算的任务中表现出色。
然而,GPU 在挖矿过程中对浮点数的计算能力大部分是浪费的,因为挖矿主要涉及整数运算。尽管如此,GPU 的挖矿效率仍然远高于 CPU。

4.3 ASIC 芯片挖矿

  • application specific integrated circuit
  • 专用性:专用集成电路(ASIC)芯片专为特定应用设计,在比特币挖矿领域,ASIC 芯片几乎只用于挖矿,除了执行挖矿所需的计算任务外,几乎无法用于其他用途。ASIC 芯片针对比特币挖矿的核心任务 —— 解决哈希计算难题(mining puzzle)进行了优化,具有极高的计算效率和能耗比。相比 CPU 和 GPU,ASIC 芯片能够在更短的时间内完成更多的哈希计算,大大提高了挖矿的成功率。
  • 合并挖矿(merge mining):一些 ASIC 矿机支持合并挖矿,即同时参与多个区块链的挖矿过程。通过这种方式,矿工可以在不增加太多硬件成本的情况下,利用同一台矿机为多个区块链网络提供算力支持,并获取相应的收益。

从 CPU 到 GPU 再到 ASIC 芯片,挖矿设备呈现出从通用到专用的发展趋势。
这种发展趋势背后存在着博弈论的因素,类似于囚徒困境。在挖矿竞争中,如果个别矿工不采用最先进、最高效的挖矿设备(如 ASIC 芯片),就会在竞争中处于劣势,被采用更高效设备的矿工压榨收益。
因此,为了获取更多的收益,矿工们不得不不断追求更高效的挖矿设备,推动了挖矿设备向专业化方向发展。

4.4 抗 ASIC 挖矿算法

为了应对 ASIC 芯片带来的挖矿设备过度集中化问题,一些替代的挖矿算法(alternative mining puzzle)被设计出来,这些算法旨在具有 ASIC 抗性(asic resistance)。
- 这些算法通过增加算法的复杂性和对通用计算资源的依赖,使得 ASIC 芯片在挖矿中的优势不再明显,从而鼓励更多类型的设备(如 GPU、CPU)参与挖矿,提高挖矿的去中心化程度。

4.5 矿池的出现

  • 矿池结构:随着挖矿难度的不断提高,单个矿工挖到区块的概率变得极低,为了增加收益的稳定性,矿池应运而生。矿池由一个矿池管理者(pool manager)和多个矿工(miner)组成。矿池管理者可以是同一个机构,也可以是由不同机构通过分布式方式组成,它们按照矿池规定的通讯协议进行沟通。
  • 任务分配与收益分配
    • 降低难度与份额计算:矿池管理者会将挖矿任务进行分解,通过降低挖矿难度(将寻找符合全网难度的 nonce 转换为寻找符合较低难度的 share)来分配给矿工。矿工找到的 almost valid block(几乎有效的区块,即满足矿池设定的较低难度要求的区块)可以证明其工作量,每找到一个这样的区块,矿工就获得一个 share。
    • 收益分配:根据矿工获得的 share 数量来分配最终挖到区块的收益。尝试的 nonce 越多,找到的 share 也就越多,获得的收益也就越高。
  • 矿池的安全性:挖到区块后,矿工不能私自将区块发送出去,因为区块中填写的收款人地址是矿主设定的。而且矿工也不能随意修改区块里面的内容,否则其他矿工不会认可其 share,导致其工作量白费。

4.6矿池对 51% 攻击的影响

矿池的出现虽然为矿工带来了一些好处,如收入变稳定、中奖概率提高等,但也带来了新的安全隐患。
由于矿池集中了大量矿工的算力,使得发动 51% 攻击变得相对容易。矿主为了吸引更多矿工加入,可能会降低管理费。而矿工在加入矿池时,往往只关注计算任务和收益,对潜在的攻击风险并不了解。这就使得恶意攻击者有可能通过控制矿池来发动 51% 攻击,破坏比特币网络的安全性。

5. 51% 攻击的危害

5.1 分叉攻击

攻击者通过掌握超过 51% 的算力,能够在区块链上制造分叉。攻击者可以在自己的分叉上进行恶意操作,如双花攻击。
即先在主链上发起一笔交易,待交易确认后,利用算力优势在自己的分叉上重新构造一个不包含该交易的新区块链,并使这个分叉成为最长链。这样,主链上的交易就被回滚,攻击者可以再次使用相同的资金进行交易,从而达到欺诈的目的。

5.2 交易抵制(Boycott)

攻击者可以故意不打包跟特定用户(如 A)有关的交易。在比特币网络中,交易需要被打包到区块中才能得到确认。
如果攻击者控制了足够的算力,就可以选择忽略某些用户的交易,使其无法被确认和执行。这会严重影响这些用户的正常交易活动,破坏比特币网络的公平性和可用性。