区块链 工作量证明
区块链中,每个人手上都有账本,每个人都可以记账,但怎么能让这些账本的内容保持一致,让大家都认这个账,就需要共识机制。
人类社会中,通常的共识机制是,如果某个人能完成某项艰难的任务,他就可以做某些事。要推翻这个共识,就也要完成这些艰难的任务,所以共识不是那么容易被推翻。孙悟空当上美猴王,是因为做了难的事(穿过水帘洞)。
类似地,区块链中的共识机制使用同样原理,只有完成了某项艰难的任务,才有记账的权力,这就是工作量证明。区块链中,这项艰难任务是,计算一个数学难题。
现在,我们介绍工作量证明的具体过程。我们向每个块添加一个名为Nonce的项,如下图所示
Nonce是使区块的哈希值满足一定条件的一个数字。例如,这个条件可能是,生成的哈希值前面4位必须为零。
因此,生成的哈希值看起来会像000010101010xxx。通常,矿工在计算Nonce值时,会从0开始,并不断增加,直到生成的哈希值满足指定条件。
注意,哈希生成是随机进行的,并且超出了你的控制范围 — 也就是说,你不能强制哈希函数生成特定的哈希值。
因此,可能需要多次迭代,直到生成满足条件的哈希值。在比特币系统中生成一个区块的预期时间为10分钟。一旦矿工成功地生成了Nonce值,即成功地开采了这个区块,他就会在系统中释放这个区块,使其加入链中,成为最顶端的一个区块。
注意,有多个矿工在竞争生成合法的区块。比特币系统通过给第一个成功的矿工特定的比特币来奖励他。
一般来说,计算能力更强的矿工是早期的赢家。这可能会导致拥有巨大处理能力的人攻击整个系统。本教程后续内容中,我们将讨论这些攻击以及如何减轻它的影响。