PoW工作量证明(Proof of Work),其概念在比特币出现之前已经有了,比特币的设计区块链的共识机制就参考了POW工作量证明。在比特币中,HASH运算的复杂度进行CPU运算实现工作量确定。
那区块链的PoW共识机制是怎么工作的呢?
我在网上看到了一个很有趣的例子,使用类比的手法来描述区块链PoW共识机制的工作方法。
工作量证明,目的就是要证明工作者确实有花时间完成工作,所以需要验证工作时间。而如果采用单独计时的话,将时间数据与工作成果发给验方,验收方是无法确定时间数据是真是假的。一个好的方法是验收方给工作方发一个难题,工作方要解开此题需要结合自己当前的工作状况(时间等),并且需要一定的时间。这样子验收方在验收的时候,只要确认工作方解开了此题,就说明工作状况没问题,花的时间也足够长。
网上的例子使用了垃圾邮件处理的例子,识别垃圾邮件(发送者用机器多次并自动转发),通过识别其信息编辑的时间来识别,时间太短(工作量不够),说明是机器自动发的垃圾邮件。
因此,验收发需要发送方在发送的邮件里包含一个签名,包括发送时的时间戳,发送地址,字数等(当前的工作状况), 还有一个数字counter,验收方将签名里的数据进行SHA-1散列,得到的160bit数如果前20位是0,则通过,否则不通过。
这就要求邮件发送者在发送之前需要不断的生成counter,使得SHA-1散列散列出来的数字前20位为0,而这个穷举是需要时间的,因而可以证明发送着确实是花费了一定的时间写邮件,不是机器自动发送。
挖矿过程的PoW与之类似,在挖矿过程中把所有交易打包生成Merkle树, 对Merkle根进行哈希运算,得到哈希值, 然后组装区块头;
对区块头不断进行SHA256运算,判断结果是否小于网络目标值(这与前面判断前20位是否都为0是类似的,只是概率区别,花费的时间不一样)。 如果大于这个目标值,则验证不过,需要改变随机数值,组成新的区块头,继续哈希。如果合乎条件,就是挖到矿了,验证只需要依次验证运算就可以了。这就是区块链的PoW共识机制,这也是为什么挖矿的效率与计算机的算力成正比,算力越高,重复尝试就越快,挖矿的效率也就越高。
PoW的优点:
- 记账权公平的分派到其他节点,通过看节点的PoW,谁挖矿最快就能拿到这个矿,实现了去中心化。
- 因为获得正确哈希值的概率和算力成正比,安全性很高,如果要破坏系统需要掌握51%的算力,代价极大
PoW的缺点:
- 很明显验证工作量验证时间是通过不断进行哈希计算来验证的,这很明显的浪费了资源。
解决方案:
解决算力浪费的方法我认为有两条,一条是减少算力,验证条件降低以降低算力要求但是加入其他条件保证挖矿的难度。 二是使用算力来运算一些有意义的事情,而不是哈希然后与目标值比较,例如NP难问题库,求最大素数,模拟黑洞等。
来源:CSDN
作者:kiseki-
链接:https://blog.csdn.net/weixin_40367090/article/details/102631598