分享

摘要运算在工作量证明中的应用

 吴雨虹2kzpi83a 2020-08-08

  

区块链中的工作量证明(Proof Of Work,简称POW),简单理解就是一份用来确认你做过一定量的工作的证明。因为监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。

前文区块链中的密码学介绍过,POW的技术基础是摘要运算,即给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:1.输入x可以是任意长度的字符串;2.输出结果即H(x)的长度是固定的;3.计算H(x)的过程是高效的(对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n));4.具有几率极小的碰撞性;5.不可逆性;6;对于指定的H(x),只能用穷举法推算出x.

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

比特币等区块链体系里的工作量证明机制虽然比它更复杂一些,但本质与上述示例类似。如果想生成一个新的区块并写入区块链,必须解出网络出的工作量证明的谜题。即一个符合要求的区块哈希由N个前导零构成,零的个数取决于网络的难度值。要得到合理的哈希值需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的哈希值,说明该节点确实经过了大量的尝试计算。

下面是一个实现POW的简单例子。

'使用capicom的hasheddata对象

Set hashobj = New HashedData

'使用SHA_256算法

hashobj.Algorithm = CAPICOM_HASH_ALGORITHM_SHA_256

'初始种子

dim seeddata as Variant

seeddata=&H0

'读取已经生成的数据区块,具体代码略

readblockinfo

If lastblock = "" Then

'初始区块

lastblock = "BicengEsealsChains@20180723BicengEsealsChains@20180723BicengEsealsChains@20180723BicengEsealsChains@20180723"

blockindex = 0

End If

'循环计算,直到摘要值是以 "001100"开头

Do

hashobj.Hash lastblock & Hex(seeddata)

times = times + 1

seeddata = seeddata + &H1

DoEvents

Loop While Left(hashobj.Value, 6) <> "001100"

‘记录新生成的区块数据,具体代码略。

writeblockinfo

各位可以在自己的电脑上运算一下,看看计算出摘要值符合要求的一个区块需要尝试多少次,耗时多少。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多