由于所有事务都有时间戳,我们需要在对等网络上实现分布式时间戳服务器。这需要一些额外的实现,这是我现在将要描述的工作的证明。现在,我们在每个块中再添加一个名为Nonce的项,如下图所示−
Nonce是一个数字,使得块的散列满足某个条件。这个标准可以是生成的散列的前导四位数必须为零。
因此,生成的散列看起来像是00001001010xxx。通常,miner从Nonce值0开始并不断递增,直到生成的散列满足指定的条件。
请注意,散列生成是随机的,并且超出了您的控制范围—也就是说,您不能强制散列函数生成特定的散列。因此,可能需要多次迭代,直到生成包含四个前导零的所需散列。比特币系统中生成块的预期时间为10分钟。一旦矿工成功地开采了这个区块,他就会在系统中释放这个区块,使之成为这个链中的最后一个区块。
请注意,有多个矿商竞相生成合法区块。比特币系统通过给第一个成功的矿工一些比特币来奖励他。一般来说,拥有更多计算能力的矿工可能是早期的赢家。这会导致拥有巨大处理能力的人对整个系统进行攻击。在本教程结束时,我将描述这些攻击以及如何减轻这些攻击。