区块链共识算法之POW

简介

POW,proof of work,即工作量证明,是著名公链bitcoin所采用的共识算法。那么POW到底是什么玩意呢?简单来说,pow就是一个证明,证明你确实做了一定量符合要求的工作。通常“这份工作”做起来有些难度,但是验证方却很容易通过结果来验证是否做了相应的工作。

pow工作原理

一句话介绍下比特币的POW到底在干什么?其实就是对区块头几乎变态的疯狂进行hash运算,期间夹杂着nonce的递增,得出来的hash值与"某个hash值"比大小(也验证了某位大佬的话:一切算法的背后本质都是在比大小)。

估计有人一脸懵逼的纳尼?区块头什么玩意?hash运算用的哈希函数家族中的哪个?nonce什么鬼玩意?"某个hash值" 又是个什么东西?比大小?到底是比大还是比小?下面一一道来。

1、区块头。比特币的区块头大小为80字节。其中包含4字节的版本号,32字节的上一区块的hash值,32字节的Merkle根hash值,4字节的时间戳(UTC),4字节的难度值、4字节的nonce。表格如下:

比特币区块头BlockHeader定义如下:

2、hash运算。比特币系统使用的是SHA256。SHA256就是哈希函数家族中的一个,输出值为256位的哈希算法。到目前为止,还没有出现对SHA256算法的有效攻击。

3、nonce。就是区块头中的最后一个字段nNonce。比特币源码中对nonce的处理为++pblock->nNonce(期间夹杂着nonce的递增)。涉及源码如下:

4、某个hash值。是由当前全网的难度值(就是区块头中的倒数第二字段nBits)计算得出的,其中形参nCompact就是nBits。源码如下:

扫描二维码关注公众号,回复: 5314882 查看本文章

5、比大小。比的是小,就是疯狂hash运算后得到的hash值比难度值得到的hash值小,就表示你取到真经啦。其中第80行由难度值nBits得到hash值设置到bnTarget中,第87行在比较大小,如果比难度值大,return false。不好意思,白做了。源码如下:

总结

以上就是比特币的POW工作机制了。感兴趣的可以仔细看看3、nonce 中的那个最外层 while 循环,还有些更深的细节在里面,这里就不BB了。POW给人的感觉就是太浪费了。截至目前,整个比特币全网的算力已经极其巨大了,这种庞大的算力用来做这种无用的hash运算笔者觉得真是巨大的浪费。好了,结束。

猜你喜欢

转载自blog.csdn.net/qq_15328161/article/details/87893222