工作量证明算法(3)

如果做一个简单的类比,我们可以想象一个游戏,游戏玩家重复投一对骰子,试图找到一个小于特定目标的点数。在第一回合,目标是12,只要投的不是两个6,都会赢。第二轮,目标为11,玩家必须投出10或以下的点数才能赢,这轮仍然很简单。几轮过后,目标降到了5。现在,半数以上的投掷点数之和都会超过5,也就是无效的。随着目标值越小,有效投掷次数将呈指数级增加。最终,当目标降到2时(最小可能点数),赢的概率只剩下1/36,或者2%。

在例8-10中,获胜的“随机数”是13,这个结果可以被任何人独立确认。任何人都可以将13添加到短语“I am Satoshi Nakamoto”之后并计算哈希,验证结果是否小于目标值。成功结果也是工作量的证明,因为它能够证明我们已经做了足够多的工作并找到了随机数。虽然只要进行一次哈希计算就能进行验证,但是找到一个可用的随机数却需要进行13次的哈希计算。如果我们的目标值更小(难度更高),就需要更多次数的哈希计算,才能找到合适的随机数,但是任何人想验证这个结果,仍然只需要进行一次哈希计算。此外,知道目标值后,任何人都可以利用统计学原理对计算难度进行估算,进而知道需要完成多少工作才能找到一个合适的随机数。

比特币的工作量证明与例8-10面临的挑战非常类似。首先,矿工创建一个填满交易的候选区块。接着,矿工计算区块头的哈希,看其是否小于当前的目标值。如果哈希不小于目标值,矿工就修改随机数(通常就是对随机数加1)并重新计算。在比特币网络当前的难度值下,矿工平均需要尝试千万亿(1015)次以上,才能找到一个随机数,使得区块头的哈希值足够小。

例8-11是一个高度简化的工作量证明算法,基于Python实现。

例8-11 简化的工作量证明实现

一个高度简化的工作量证明算法,基于Python实现

blob.png

blob.png

868区块链学习网为您整理《工作量证明算法(3)》仅供参考。