|
April 03, 2018, 01:00:23 PM Merited by wilbursina (3) |
|
为了防止数据被篡改,POW其实只做了一件事情,就是:延缓新区块的创建过程。那在接下来的文章中,我就来说说工作量证明机制是如何做到这点的。
1. 神奇的哈希算法
工作量证明之所以能做到延缓新区块的创建,完全仰仗一样东西,就是神奇的哈希算法。说起来还挺有意思,在创建新区块之前,你需要先解一道由哈希算法给出的数学难题,那为什么说它挺有意思呢?因为从严格意义上来讲,它其实也不能算是一道真正的数学题,因为它不存在任何解题思路。这就有点儿像你正在参加一场马拉松,你只能不断的跑不断的跑不断的跑,才能跑到终点。解哈希数学题其实也是一样,只要你不断的算不断的算不断的算,那最后总能算对。
2. 牢不可破的数学难题
那数学题算的是什么呢?算的是一个由哈希算法自动生成出来的特殊哈希值。在《不可篡改的实现原理 ①》中我们已经知道,哈希值其实只是一串儿看起来没逻辑规律的字符而已。是由哈希算法根据区块内不同的数据信息自行生成出来的。那它的出题逻辑又是什么呢?先别着急,我们先来看个例子。
假设现在有一个区块A,其中包含了这样一段数据信息:“我是雷恩”。接着我用哈希算法将这个区块进行哈希,得到如下哈希值:
看起来还是一串儿无规律的字符,没什么特别的。那我现在把数据内容稍作修改,在原来的文字后面加上一串儿数字,变为:“我是雷恩2321”,我们看看结果会有什么变化:
看上去是不是依然没什么特别?但其实是有不同的。大家仔细观察就会发现,这个字符串儿变为以“零”开头了。这就是哈希算法计算出来的特殊哈希值。由于出现的频率不高,所以才比较特殊。但只要你不断的变换文字信息后面的数字串儿再反复不停的生成新哈希值,就有一定概率可以获得这样以零开头的特殊哈希值。是不是有点儿神奇?别着急,更神奇的还在后面。
那现在我们开下脑洞,如果我想让它不止以一个零开头,想让它以3,4,5,甚至6个0开头行不行?当然可以。哪怕是100个0都可以,只要继续不断的变换“我是雷恩”后面的数字串儿再重新计算就能获得。但要注意的是,你想生成的零越多,获得的概率就会越来越小,越来越困难,需要计算的次数也会越来越多。虽然每次哈希运算的时间大概只有短短的0.001秒,但如果想要生成的零太多,你可能就需要花上数天的时间才能运算出来。
听起来是不是很崩溃?崩溃就对了,之前我就说过,解哈希数学题的过程其实就是单纯的体力劳动,除了一个个这样不断的反复生成之外,没有任何其他的解题思路。不然怎么能叫工作量证明呢?你得先花足够多的体力去劳动,证明自己已经完成了足够多的工作量之后,才能获得创建新区块的权利,就这么简单。所以在工作量证明中,数学题的难度也是按照零的数量来划分的。零的数量越多,也就意味着难度系数越高,越不容易被找到。
3. 一场玩命奔跑的马拉松正式拉开序幕
接下来回到我们最初的话题,那工作量证明机制的出题逻辑大概是什么样子的呢?首先我会先给数学难题定个难度,假设:难度为5级,接着我会告诉你需要进行哈希的文字信息,比如:“mynumber”,但文字信息后面的数字串儿我自然不会告诉你,需要你自己去不断的运算。但我会告诉你后面的数字串儿是几位数,假设:后面的数字串儿是9位数字,那你要计算的范围就是从:“mynumber100000000”一直到“mynumber999999999”,期间你可以挑选这个范围内的任意数字串儿去不断的重复运算,只要出现以5个0开头得哈希值,你就可以拿去给系统验证,直到验证成功为止。假设:你算到了“mynumber3239281921”的时候出现了以5个0开头的哈希值,你赶忙拿去给系统做验证。如果验证成功,那3239281921就是我们这道哈希数学题的最终答案,幸运就此从天而降。但这并不容易,你最多可能需要进行将近10亿的运算才能获得,没个几天肯定算不出来。
|