介绍区块链中的挖矿过程





5.00/5 (4投票s)
比特币挖矿过程。
引言
挖矿是向区块链添加新区块的过程。区块包含通过比特币网络上的挖矿节点进行的挖矿过程验证的交易。区块一旦被挖出并验证,就会被添加到区块链中,从而使区块链不断增长。由于工作量证明(PoW)的要求,这个过程需要大量的资源,因为矿工们会竞争寻找一个小于网络难度目标的值。这个寻找正确值(有时也称为数学难题)的难度是为了确保在接受新的提议区块之前,矿工已经花费了所需的资源。矿工通过解决PoW问题(也称为部分哈希逆问题)来铸造新币。这个过程消耗大量的资源,包括计算能力和电力。这个过程还能保护系统免受欺诈和双花攻击,同时为比特币生态系统增加更多的虚拟货币。
大约每10分钟创建一个(挖出)一个新的区块,以控制比特币的生成频率。比特币网络需要维持这个频率,并在比特币核心客户端中进行编码,以控制“货币供应量”。如果矿工发现新的区块(通过解决PoW),他们将获得新币作为奖励。矿工通过包含交易在其提议区块中来赚取交易费用。新区块以大约每10分钟的固定速率创建。新比特币的创建速率每210,000个区块(大约每4年)下降50%。当比特币最初推出时,区块奖励为50个比特币;然后在2012年,这一奖励减少到25个比特币。2016年7月,这一奖励进一步降至12.5个比特币(12个比特币),下一次减半预计在2020年7月4日。届时,区块奖励将进一步降至约6个比特币。
平均每天生成约144个区块,即1,728个比特币。实际产生的比特币数量可能每天有所不同;但是,每天的区块数量保持在144个。比特币的总供应量也是有限的,到2140年,将最终创建约2100万个比特币,之后将不再创建新的比特币。然而,比特币矿工仍可以通过收取交易费用从生态系统中获利。
矿工的任务
一旦节点连接到比特币网络,比特币矿工就会执行几项任务。
- 同步网络:当一个新节点加入比特币网络时,它会通过向其他节点请求历史区块来下载区块链。在这里提到这个任务是针对比特币矿工的背景,但它不一定是矿工特有的任务。
- 交易验证:网络上广播的交易由完整节点通过验证签名和输出来验证。
- 区块验证:矿工和完整节点可以通过根据某些规则评估收到的区块来开始验证它们。这包括验证区块中的每笔交易以及验证随机数(nonce)。
- 创建新区块:矿工在验证网络上广播的交易后,将它们组合起来提议创建一个新区块。
- 执行工作量证明:这项任务是挖矿过程的核心,也是矿工通过解决计算难题来找到有效区块的地方。区块头包含一个32位的随机数(nonce)字段,矿工需要不断改变随机数,直到产生的哈希值小于预定的目标。
- 获取奖励:一旦节点解决了哈希难题(PoW),它会立即广播结果,其他节点会验证并接受该区块。新铸造的区块有可能因为与其他几乎同时找到的区块发生冲突而不被网络上的其他矿工接受,但一旦被接受,矿工将获得12.5个比特币以及任何相关的交易费用。
挖矿奖励
比特币于2009年开始时,挖矿奖励是50个比特币。每210,000个区块,区块奖励就会减半。2012年11月,减半至25个比特币。目前,自2016年7月以来,每区块奖励为12.5 BTC。下一次减半将于2020年6月12日(星期五)进行,届时区块奖励将减至6.25 BTC。这种机制已被硬编码到比特币中,以调节、控制通货膨胀并限制比特币的供应量。
工作量证明(PoW)
这是证明为了构建一个有效的区块已经花费了足够的计算资源。PoW基于每次随机选择一个节点来创建新区块的思想。在此模型中,节点根据其计算能力成比例地相互竞争。以下方程式总结了比特币的PoW要求:
H ( N || P_hash || Tx || Tx || . . . Tx) < Target)
其中N
是随机数,P_hash
是前一个区块的哈希值,Tx
代表区块中的交易,Target
是网络目标的难度值。这意味着前面提到的已连接字段的哈希值应小于目标哈希值。找到这个随机数的唯一方法是暴力破解。一旦矿工满足了具有一定数量零的特定模式,区块就会立即广播并被其他矿工接受。
挖矿算法
挖矿算法包括以下步骤:
- 从比特币网络检索前一个区块的头部。
- 将网络上广播的交易集合组合成一个待提议的区块。
- 使用SHA-256算法,计算前一个区块头部与随机数和新提议区块的组合的双哈希值。
- 检查生成的哈希值是否低于当前的难度级别(目标),如果是,则PoW已解决。作为成功PoW的结果,找到的区块会广播到网络,矿工会获取奖励。
- 如果生成的哈希值不低于当前的难度级别(目标),则在增加随机数后重复该过程。
随着比特币网络哈希率的增加,32位随机数的总量也很快被耗尽。为了解决这个问题,实施了“额外随机数”(extra nonce)解决方案,即使用创世交易(coinbase transaction)作为额外随机数的来源,为矿工提供更大的随机数搜索范围。
可以使用以下流程图来可视化此过程。
挖矿难度随时间增加,曾经可以用单台CPU笔记本电脑挖到的比特币,现在需要专门的挖矿中心来解决哈希难题。当前难度级别可以使用以下命令通过比特币命令行界面查询:
$ bitcoin-cli getdifficulty 1452839779145
这个数字代表比特币网络的难度级别。回顾前面的章节,矿工竞争寻找问题的解决方案。这个数字实际上表明了找到一个低于网络难度目标的哈希值的难度。所有成功挖出的区块都必须包含一个小于此目标数的哈希值。该数字每两周或每2016个区块更新一次,以确保平均10分钟的区块生成时间得以维持。
比特币网络的难度呈指数级增长,下图显示了该难度级别在一年的时间里的变化。
上图显示了过去一年比特币网络的难度,并且已经显著增加。挖矿难度增加的原因是,在比特币中,区块生成时间必须始终保持在10分钟左右。这意味着,如果使用更快的硬件进行挖矿,区块被挖出的速度过快,那么难度就会增加,以便将区块生成时间保持在每区块大约10分钟。反之亦然,如果区块没有在10分钟内挖出,则难度会降低。难度每2016个区块(两周)计算一次并相应调整。如果上一组2016个区块在两周内挖出,则难度会增加。同样,如果2016个区块在超过两周的时间内找到(如果每10分钟挖出一个区块,那么2016个区块需要两周才能挖出),则难度会降低。
哈希率
哈希率基本上代表每秒计算哈希的速度。换句话说,这是比特币网络中的矿工计算哈希以查找区块的速度。在比特币早期,由于使用的是CPU,所以哈希率相当小。然而,随着现在有了专门的矿池和ASIC,在过去几年中,哈希率呈指数级增长。这导致比特币网络的难度增加。以下哈希率图显示了哈希率随时间的增长,目前以Exa hashes(艾哈希)为单位。这意味着,在1秒钟内,比特币网络的矿工计算的哈希值超过24,000,000,000,000,000,000个/秒。
挖矿系统
随着时间的推移,比特币矿工使用了各种方法来挖矿。由于挖矿的核心原理基于双SHA-256算法,因此随着时间的推移,专家们开发出了更复杂的系统来更快地计算哈希。以下是对比特币中使用的不同类型的挖矿方法及其随时间演变的概述。
CPU
CPU挖矿是原始比特币客户端中可用的第一种挖矿类型。用户甚至可以使用笔记本电脑或台式电脑来挖比特币。CPU挖矿已不再有利可图,现在使用的是更先进的挖矿方法,如基于ASIC的挖矿。CPU挖矿仅持续了比特币推出后一年多一点的时间,很快矿工们就探索并尝试了其他方法。
GPU
由于比特币网络的难度增加以及寻找更快挖矿方法的普遍趋势,矿工开始使用PC上的GPU(显卡)进行挖矿。GPU支持更快的并行计算,通常使用OpenCL语言进行编程。与CPU相比,这是一种更快的选择。用户还使用诸如超频之类的技术来最大限度地发挥GPU的性能。此外,使用多个显卡来提高显卡在比特币挖矿中的普及度。然而,GPU挖矿存在一些限制,例如过热以及需要特殊的母板和额外的硬件来容纳多个显卡。从另一个角度来看,由于需求增加,显卡变得相当昂贵,这对游戏玩家和图形软件用户产生了影响。
FPGA
即使是GPU挖矿也没有持续多久,很快矿工们就找到了另一种通过FPGA进行挖矿的方法。现场可编程门阵列(FPGA)基本上是一种集成电路,可以编程以执行特定操作。FPGA通常使用硬件描述语言(HDL)进行编程,例如Verilog和VHDL。双SHA-256很快成为FPGA程序员一个有吸引力的编程任务,并且涌现了许多开源项目。FPGA提供了比GPU更好的性能;然而,像可访问性、编程难度以及需要专业知识来编程和配置FPGA等问题,导致FPGA时代在比特币挖矿中的生命周期很短。
ASIC
专用集成电路(ASIC)是为了执行SHA-256运算而设计的。这些特殊的芯片由各种制造商销售,并提供了非常高的哈希率。这在一段时间内奏效,但由于挖矿难度水平的快速增长,单芯片ASIC已不再有利可图。目前,个人已经无法进行挖矿,因为需要投入大量的能源和金钱来建立一个有利可图的挖矿平台。现在,使用数千个ASIC单元并行的专业挖矿中心向用户提供挖矿合同,代表他们进行挖矿。没有技术限制,个人可以并行运行数千个ASIC,但这需要专用的数据中心和硬件,因此,单个个人的成本可能变得 prohibitive。以下是四种类型的挖矿硬件:
|
CPU |
|
GPU |
|
FPGA |
|
ASIC |
矿池
当一群矿工合作挖矿时,就形成了矿池。如果区块被成功挖出,矿池管理器会收到创世交易,然后负责将奖励分配给为挖矿贡献资源的矿工群体。与 solo 挖矿(只有一个矿工试图解决部分哈希逆函数(哈希难题))相比,这更有利可图,因为在矿池中,奖励会支付给矿池的每个成员,无论他们(更具体地说,他们的个体节点)是否解决了难题。
矿池管理器可以采用各种模型来支付矿工,例如按份额支付(PPS)模型和比例模型。在PPS模型中,矿池管理器向所有参与挖矿活动的矿工支付固定费用,而在比例模型中,份额根据为解决哈希难题所花费的计算资源量计算。
现在存在许多商业矿池,它们通过云和易于使用的Web界面提供挖矿服务合同。最常用的是AntPool(https://www.antpool.com)、BTC(https://btc.com)和BTC TOP(http://www.btc.top)。下图显示了所有主要矿池的哈希算力比较。
来源:https://blockchain.info/pools
如果一个矿池通过产生超过比特币网络51%的算力来控制超过51%的网络,就可能发生矿池中心化。如前文引言部分所述,51%攻击可能导致成功的双花攻击,并可能影响共识,实际上可能在比特币网络上强制实施另一种交易历史版本。
这种情况在比特币历史上发生过一次,当时一个大型矿池GHash.IO
获得了超过51%的网络算力。学术界已经提出了理论解决方案,例如两阶段PoW(http://hackingdistributed.com/2014/06/18/how-to-disincentivize-large-bitcoin-mining-pools/),以阻止大型矿池。该方案引入了第二个密码学难题,导致矿池要么暴露其私钥,要么提供其矿池相当一部分的算力,从而降低矿池的总算力。
目前市面上有各种类型的挖矿硬件可供选择。目前最有利可图的是ASIC挖矿,并且有许多供应商(如Antminer、AvalonMiner和Whatsminer)提供专用硬件。除非投入巨额资金和能源来构建自己的挖矿设备甚至数据中心,否则solo挖矿已不再那么有利可图。以当前难度系数(2018年3月)计算,如果用户能够产生12 TH/s的哈希率,他们每天可以赚取0.0009170 BTC(约6美元),与购买能够产生12 TH/s设备的投资相比,这非常少。包括电力等运行成本在内,这实际上并不怎么赚钱。
例如,Antminer S9是一款高效的ASIC矿机,可提供13.5 TH/s的哈希算力,似乎可以带来一定的日利润,这是真实的。但单台Antminer S9的价格约为1700英镑,加上电费,一年后才能收回成本,大约产生0.3 BTC。这看起来仍然是可以接受的投资,但也要考虑到比特币网络的难度会随着时间而不断增加,一年内挖矿会变得更加困难,而挖矿硬件的使用寿命将在几个月内结束。
摘要
在本文中,我们介绍了比特币挖矿的过程、区块如何添加到区块链中以及它如何使区块链不断增长。我们探讨了比特币矿工执行的各种任务。我们还讨论了哈希难题是如何被解决的。
您正在阅读《Mastering Blockchain - Second Edition》一书的节选,作者是Imran Bashir。如果您想学习加密学和加密货币,以便构建高度安全、去中心化的应用程序并进行可信的应用程序内交易;那么这本书就是为您准备的。