工作量证明(PoW):矿工如何保障区块链安全

工作量证明(PoW):矿工如何保障区块链安全

工作量证明(PoW)是一种共识机制,也就是一种让众多计算机在没有中心化主体的情况下就一份共享记录达成一致的规则。在这种机制中,参与者需要展示一种成本高昂、但任何人都能快速验证的计算工作量。在比特币中,这种工作量就是寻找一个数值等于或低于设定目标的区块哈希。

工作量证明最初是用来对抗垃圾邮件的手段

工作量证明背后的理念早在比特币出现之前多年就被提出,目的是对抗垃圾邮件。在一篇题为《Pricing via Processing or Combatting Junk Mail》(通过处理进行定价,或曰对抗垃圾邮件)的论文中——该论文于1992年发表演讲、1993年正式发表——Cynthia Dwork 和 Moni Naor 提出,用户若想使用某项共享资源,应当先完成一个难度适中的计算任务。这种成本意在遏制滥用,作者尤其将矛头指向了垃圾邮件。

一般来说,工作量证明指的是这样一种数据:生产它既耗费成本又耗费时间,但其他人验证起来却很容易。由 Adam Back 创建的系统 Hashcash,就是在每封邮件上附加了这样一种基于哈希的证明,用以遏制垃圾邮件和拒绝服务滥用。所谓拒绝服务,是指用大量请求淹没某项服务,使他人无法正常使用它。

署名为中本聪(Satoshi Nakamoto)、发布于2008年10月31日的比特币白皮书,描述了一种与 Hashcash 类似的工作量证明设计。比特币借助它,让一个由众多计算机组成的网络能够在没有中心化主体的情况下,就同一条区块链达成一致。

工作量证明在比特币中是如何运作的?

比特币挖矿就是创建有效区块的过程,而创建有效区块必须展示出工作量证明。矿工是指试图找到有效区块的参与者。矿工首先会将等待中的交易收集起来,打包成一个候选区块——也就是提议加入链上的一批交易。接下来,矿工会填写该区块的区块头,这是一段80字节长、对该区块进行概括的信息。

比特币对区块头使用SHA-256进行两次哈希运算,这种方法称为双重SHA-256。SHA-256是一种密码学哈希函数。哈希函数能把任意大小的数据转化为一个固定长度的指纹,称为哈希值。工作量证明只设定一个条件:将区块头的哈希值视为一个数字,它必须等于或低于目标值。

目标值是一个阈值,有效区块的哈希值不得超过它。网络难度衡量的是,当前目标值相比规则允许的最容易目标值,要难上多少倍才能达成。当目标值下降时,网络难度随之上升,而更低的目标值意味着符合条件的哈希值更少,因此寻找过程会耗时更久。

为了得到不同的哈希值,矿工会改变随机数(nonce)——这是存储在区块头中的一个32位数字。随后矿工对区块头进行哈希运算,将结果与目标值比较,再重复这一过程。这种搜索过程常被称为“哈希谜题”,但这里并不存在靠巧思就能破解的成分:平均而言,要找到一个等于或低于目标值的哈希值,只能通过相应规模的暴力计算——也就是一个一个数值地去尝试。

下表给出了一个按玩具规模呈现的同类搜索示例。这里的规则是虚构的,并非比特币的真实规则,而且只使用了一次SHA-256,而非两次。文本“hello”加上一个随机数后得到的SHA-256摘要,必须以设定数量的零开头。摘要以十六进制表示,这是一种使用数字0-9和字母a-f的十六进制记数法。以若干个零开头的摘要本身就是一个较小的数,因此每条规则都可以当作目标值来使用。

规则

输入(文本加随机数)

SHA-256摘要

结果

摘要以000开头

hello0

5a936ee19a0cf3c70d8cb0006111b7a52f45ec01703e0af8cdc8c6d81ac5850c

失败(以5开头)

摘要以000开头

hello1

91e9240f415223982edc345532630710e94a7f52cd5f48f5ee1afc555078f0ab

失败(以9开头)

摘要以000开头

hello2

87298cc2f31fba73181ea2a9e6ef10dce21ed95e98bdac9c4e1504ea16f486e4

失败(以8开头)

摘要以000开头

hello10284

0006bc9ad4253c42e32b546dc17e5ea3fedaecdabef371b09906cea9387e8695

在第10,285次尝试时通过

摘要以0000开头

hello60067

0000e49eab06aa7a6b3aef7708991b91a7e01451fd67f520b832b89b18f4e7de

在第60,068次尝试时通过

在这个玩具级搜索中,每多一个零,平均所需的尝试次数就会乘以16。三个零的规则平均需要约4,096次尝试,四个零的规则平均约需65,536次,但单次搜索的实际次数可能或多或少,正如上表中两行通过的结果所示:10,285次高于4,096次,而60,068次则低于65,536次。而验证这其中任何一个结果,只需进行一次SHA-256计算。

比特币的真实搜索规模要大得多。每个区块所需的预期哈希次数大约等于网络难度乘以2的32次方。截至2026年10月,这一数字平均每个区块超过500 sextillion(万亿的万亿)次哈希,并且每当网络难度调整时,这个数字都会随之变化。一个sextillion是1后面跟21个零。

验证一个区块的工作量,远比生产它要便宜得多。节点是指比特币网络上的一台计算机,它负责依据网络规则对区块进行校验。为了验证一个区块的工作量,节点只需对该区块头重新计算一次双重SHA-256哈希,并将结果与目标值比较。而生产这个区块需要进行那么多次猜测,验证它却只需一次哈希计算。正是这种悬殊的差距,才使得“工作量”能够成为一种“证明”。

工作量证明让节点无需中心化主体即可就同一条链达成一致

两名矿工几乎可能在同一时刻找到各自有效的区块,这会使网络出现相互竞争的多个版本的链。工作量证明为每个节点提供了一条选择规则:节点会遵循背后累积工作量最多的那条链,因为这条链是最难被重新构造出来的。由于任何人都能自行验证工作量,因此无需任何中心化主体来裁定哪条链才算数。

每个区块都包含前一个区块的哈希值,因此若要修改过去的某个区块,就必须为该区块及其之后的每一个区块重新完成工作量计算。工作量证明的设计初衷,正是要让篡改历史的代价变得高昂,而且修改某个特定区块的代价,会随着其后新增区块的增多而不断上升。

工作量证明同样也关系到双花问题,即试图将同一笔BTC花费两次的行为。若要逆转一笔已经写入某个区块的支付,就意味着必须重新完成那份工作量。

矿工获得区块补贴与手续费,网络难度决定出块节奏

在比特币网络中,若某位矿工的有效区块被网络接受,该矿工便可获得区块奖励。这项奖励由两部分构成:一部分是区块补贴,即新创造出来的BTC;另一部分是该区块所包含交易的用户所支付的交易手续费。截至2026年10月,自2024年4月最近一次减半以来,矿工获得的区块补贴一直是每区块3.125 BTC。

区块补贴每产生210,000个区块就会减半一次,这一事件被称为“减半”,大约每四年发生一次。需要说明的是,只有补贴会被减半,手续费不受影响。

比特币协议每产生2,016个区块,就会调整一次网络难度。它会依据区块头中记录的时间,计算出这些区块实际耗费的时长,并将其与1,209,600秒(即两周)进行比较,然后按比例重新调整目标值,从而使区块能够平均保持大约每10分钟出一个的节奏。单次调整对网络难度的改变幅度,最多不超过原值的4倍(无论是升还是降)。

算力是指网络中所有机器每秒计算出的哈希总次数。当算力上升时,区块往往会比每10分钟一个的速度更快地出现,下一次调整就会提高网络难度;当区块出现得太慢时,调整就会降低网络难度。这项调整只依据区块出块时间:它并不统计矿工数量,也不参考BTC的价格。

比特币10分钟一个区块只是一个平均值,并非对每个区块的承诺。在关于出块过程的统计模型中,大约63%的区块会在前一个区块产生后10分钟之内出现。

工作量证明与权益证明有何不同?

工作量证明和权益证明都是共识机制,用来决定由哪位参与者将下一个区块添加到区块链上。区块链是一份由若干区块按顺序链接而成的共享记录。工作量证明将这项权利与计算工作量挂钩:矿工不断进行哈希运算,直到某个区块满足目标值为止。

权益证明则将这项权利与参与者锁定作为抵押品的加密货币挂钩,也就是说,在参与者参与添加区块期间,这些币会被冻结搁置。若参与者试图进行不合规的操作,可能会受到相应的惩罚。

这两种机制的核心区别在于参与者所投入的内容不同:工作量证明投入的是计算工作量,而权益证明投入的是被锁定的币。

工作量证明为什么要消耗电力?

比特币挖矿之所以耗电,是因为工作量证明本质上是真实的计算过程,而进行计算的机器需要消耗电力。这种成本本就是其定义的一部分:工作量证明的产生依赖于反复试错,而在比特币网络中,正是由机器来完成这种试错。

机器每计算一次哈希都会消耗一定电力,因此总哈希次数越多,通常意味着消耗的电力也越多。如果有更多机器加入网络,区块往往会出得更快,网络难度便会在下一次调整时上升,此后每个区块平均所需的哈希次数也会随之增加。

一些政策制定者和电网规划者已经对美国加密货币矿工所使用的电力如何影响成本、可靠性和排放提出了担忧。关于比特币耗电量的已发布估算,会因所用方法和统计周期不同而存在差异。

有效的哈希值只能证明付出了努力,并不能证明交易本身有效

一个等于或低于目标值的哈希值,只能表明有人确实完成了相应的工作量,但它丝毫无法证明该区块内的交易是否有效。全节点只有在区块内的每一笔交易都有效、且尚未被花费过的情况下,才会接受这个区块;而诸如Bitcoin Core这样的节点软件,会拒绝接受任何声称所获金额超过补贴加手续费总和的区块,无论其背后投入了多少工作量,都无济于事。

工作量证明同样也无法让历史变得不可更改,它只是让篡改历史需要付出相应的工作量代价。一个掌控了网络多数算力的一方,是有能力修改近期的交易历史、并阻止新交易得到确认的。等待更多的确认数——也就是建立在记录某笔交易的区块之上的新区块数量——会提高篡改该交易的代价,但并不能彻底排除这种可能性。

工作量证明同样也不会为单纯的努力本身支付报酬。在协议层面,任何未能最终形成被接受区块的哈希计算,无论耗费了多少电力,都不会获得任何区块奖励。

2025年11月27日

GoMining 新闻

您可能会对以下内容感兴趣