关注“区链数科”,让你从入门到精通区块链!

在前面的内容中我们有提到过工作量证明算法(PoW,Proof of Work),但并没有详细说明,今天我们就来深入了解了解工作量证明算法的原理以及应用。

打开网易新闻 查看更多图片

在Hash算法中,尤其是SHA-256算法,除了在计算密钥、计算Merkle根、区块头Hash值等地方用到SHA-256算法外,在比特币挖矿过程中使用的工作量证明算法中也是以SHA-256算法作为支撑的。

工作量证明算法就是应用了SHA-256算法因输入不同而输出不同的特性,不断地计算区块头的SHA-256哈希值,然后再不断地修改Nonce值,知道这个哈希值足够小于难度目标值。

例如,计算“qulianshuke1”的SHA-256值并当做区块头的哈希值,后面的数字“1”就相当于Nonce值。假设,任意设定的难度目标计算得到的SHA-256哈希值转化成十六进制后以“0x0”开头,那么在尝试到“qulianshuke9”的时候,刚好达到了难度目标的要求。如此,为了达到预期的难度目标,我们做出了9次尝试,那么数字“9”作为Nonce即是工作量证明。

打开网易新闻 查看更多图片

时至今日,还没有谁能够在预先设定SHA-256哈希值的情况下逆向求解出原数据,所以为了能达到预期的哈希值就需要进行不断地尝试,直到出现符合条件的哈希值为止。

工作量证明算法在比特币系统中的运用:

1、 交易在两个或多个节点之间进行,并由参与交易的节点在交易完成后向其它节点广播交易;

2、 接收到广播来的交易的节点会先对交易数据进行验证,验证通过后再将交易放在自己机器的内存池中;

3、 矿工节点会将内存池中的交易按照系统规定的格式打包为区块,并付出一定的计算工作量找到区块的Nonce值,一般找到某个区块的Nonce值的时间大概是10分钟左右,然后矿工节点就会将该区块广播出去;

4、 其它节点在接收到新产生的区块后会对区块进行验证,包括区块的Nonce值是否正确、区块的数据格式是否正确以及区块中所记录的交易是否正确等,这样验证成功的区块才会被追加保存到节点自身所保存的区块链账本上;

5、 其它矿工节点在验证通过新接收到的区块后就会意识到自己在过去一轮的挖矿竞争中由于未能及时找到正确的Nonce值而已经失败,除了将新区块添加到自身所保存的区块链账本上之外,还会将这个新区块的哈希值放入到为下一轮挖矿竞争而准备的区块的区块头中。

工作量证明算法的设计精华在于产生一个新的合法区块需要矿工花费一定的人力、财力、物力、时间等,这些资源也将决定了矿工的算力是否强大,以保证其挖矿的成功率。

- - - END - - -

关注“区链数科”,让你从入门到精通区块链!