PoW挖矿算法原理

PoW,全称Proof of Work,即工作量证明,又称挖矿。大部分公有链或虚拟货币,如比特币、以太坊,均基于PoW算法,来实现其共识机制。即根据挖矿贡献的有效工作,来决定货币的分配。

工作量证明是什么

工作量证明( PoW )通过计算一个数值( nonce ),使得拼揍上交易数据后内容的 Hash 值满足规定的上限。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。

如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。网络中只有最快解谜的区块,才会添加的账本中,其他的节点进行复制,这样就保证了整个账本的唯一性。

假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。

工作量证明的例子

举个例子,给定的一个基本的字符串”Hello, world!”,我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以”0000”开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。

通过这个示例我们对工作量证明机制有了一个初步的理解。

工作量证明的优缺点

优点:完全去中心化,节点自由进出;

缺点:目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用

通过一个App的演示深入理解区块链运行原理

下载安装

如果没有安装nodejs,需要先安装 nodejs

运行结果:

创建区块

在 blockchian ->后面输入 bc查看创始区块结构。

当一个区块挖矿时都发生了什么?

在 blockchian ->后面输入 挖矿并创建一个新的模块。

Hash是怎么计算的?

Hash值是一个十六进制固定长度为64位的唯一的标识。

hash值是由, , , 和 作为输入数据计算而得。

SHA256算法将根据给出的输入数据计算出一个唯一的hash值,只要输入值不变,永远返回相同的结果。

在线演示:

https://anders.com/blockchain/hash.html

你是否注意到块哈希中的四个前导0?

四个前导0是有效散列的最低要求。 所需的前导0的数量称为。

下面的方法验证hash难度是否有效。

这就是我们所熟知的工作量证明系统 - Proof-of-Work system。

什么是nonce?

nonce是一个用来找到满足条件的hash值的数字。

值一直迭代,直到 值有效为止。在我们案例中一个有效的 值是最少有4个前导0。找到 值以满足合适条件的值的过程就叫做挖矿。

随着难度的增加,可能的有效散列数减少。 使用较少可能的有效散列,需要更多的处理能力才能找到有效的散列。

在线地址:

https://anders.com/blockchain/block.html

参考文章

http://blog.51cto.com/11821908/2059711

http://liyuechun.org/2017/09/13/blockchaindemo/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G1VL8400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券