工作量证明(Proof-of-Work,PoW)是一种用于防止服务和资源滥用以及拒绝服务攻击的经济策略。它通常要求用户执行一些复杂的计算,这些计算的结果能够被服务提供者迅速验证,从而通过消耗时间、设备和能源作为担保来确保服务和资源的有效利用。这一概念最初由Cynthia Dwork和Moni Naor在1993年的一篇学术论文中提出,而"工作量证明"这个术语则是由Markus Jakobsson和Ari Juels在1999年提出的。目前,这种技术已经成为加密货币的主要共识机制之一,比如
比特币就是采用了这种技术。
工作量证明的核心技术原理是哈希函数。因为对于任何输入值n,哈希函数h(n)都会产生一个特定的结果,而且当n发生微小变化时,会导致结果发生显著的变化,即所谓的雪崩效应,使得几乎不可能从h(n)反推出原始的n。因此,通过指定搜索具有特定特征的h(n),并让用户进行大量的穷举计算,就能够实现工作量证明。例如,如果我们希望找到一个使h(n)的十六进制值的前四位为0000的n,那么理论上平均需要进行2^16次h(n)哈希运算才能找到答案,而验证只需要进行一次。为了提高难度,我们可以增加指定的位数。以SHA256函数为例,当我们处理字符串"Hello World"并试图找到一个使h(n)前四位为0000的n时,我们需要从"Hello World0"开始尝试不同的ASCII字符,直到"Hello World107105"才找到匹配的h(n):
0000BFE6AF4232F78B0C8
eba37A6BA6C17B9B8671473B0B82305880BE077EDD9
由于大多数加密货币都是建立在区块链的基础上,而区块链本身就需要依靠哈希函数来保障数据的完整性,因此在加密货币中使用工作量证明是一种简单而有效的设计。分布在全球各地的
计算机竞争谁能最先找到与待打包数据相配的随机数(nonce),谁就有机会成为该区块的打包者(记账人)。一旦找到这个随机数,将其与数据和哈希值一起打包成块并广播出去,经过多数节点的认可和确认,打包者就能获得打包该区块的奖励。像比特币这样的加密货币,其工作量证明机制会根据参与竞赛的算力变化自动调整寻找随机数的难度,以保持合理的运行速度。