举个例子,给定的一个基本的字符串"Hello, world!",我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果
得到的哈希结果(以16进制的形式表示)是以"0000"开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规
则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。
"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64
"Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8
"Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7
...
"Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965
"Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6
"Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
实际上,通过概率学址事可知,预期大概要进行2^16次尝试,才能得到4个前导0的哈希散列。这里数学期望的计算次数,就是我们要求的“工作量”,重复多次进行的工作量证明会是一个符合统计学
规律的概率事件。比特币中所谓的“工作量”证明就是不断变化nonce进行哈希计算,使得两次SHA256计算结果小于目标值
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + nonce )) < TARGET
由哈希函数的特性可以认为,每个矿工要找出满足条件的nonce所需要运行哈希运算的次数从概率上来说是一样的,只要矿工给出了满足条件的nonce值,就可以认为它完成了特定的“工作量”。正是
比特系统的工作量证明机制保证了挖矿过程没有投机取巧的可能性,从而保证了比特币网络的公平及安全性。