Hello,我是少年。
在上期的文章中我们说到,为了保证数据的安全性,我们就需要用到区块链中另一个特别重要的机制了,也就是:工作量证明(Proof-of-Work, PoW)。
抛开技术层面,单从安全性来说,PoW其实就做了一件事情:延缓新区快的创建过程。所以哈希值生成过程也会随之被延长。
也就是说,自从有了PoW,你重新生成一个哈希值的时间将会从大概0.001秒被延长到10分钟。生成一万个区块大概需要1600多小时,差不多69天。而比特币系统已经安全稳定地运行了快10年,区块的数量自然不用说了吧。
就现在的信息技术能力,想通过生成哈希值这个方法来篡改数据,你可能一个区块都还没篡改完,就已经被发现并扼杀在摇篮里了。这也是目前区块链最核心的防篡改机制。
上次我们说了,计算出一个区块的哈希值,就能获得这个区块的使用权,也就是记账权。
我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为什么还要参与记账呢?
在比特币的设计里,完成记账的节点可以获得一定数量的比特币奖励,这个奖励过程就是比特币的发行过程,因此大家形象地把记账称为“挖矿”。
既然有奖励,大家肯定会争相抢夺记账权。所以,在创建新区块之前,你需要解一道由哈希算法给出的数学难题,也就是PoW。其实从严格意义来说,也不能算一道真正的数学题,因为不存在任何解题思路。
倒是有点像参加一场马拉松,你只有不停跑不停跑才能到终点;解哈希数学题也是一样,只要你不停算不停算,最后总能算对,但是只有第一个算对的人才能获得记账权。
那这道数学题算的是什么呢?算的是一个由哈希算法自动生成出来的特殊哈希值。
我们先来看个例子,假设现在有个区块A,其中包含一段数据信息“我是金少”。接着我用哈希算法将这个区块进行哈希,得到如下哈希值:
e8c636d0c0486378bf61e6a3000d0fb7
看起来就是一串无规律字符,没什么特别的。那我现在稍作修改,变为“我是金少666”,然后得到如下哈希值:
0fb0sd3u4889027bgd7900ea4455bdc4
看着好像还是没什么特别的,但是大家注意看,这个字符串变成“零”开头了。这就是哈希算法计算出来的特殊哈希值。
由于出现的频率不高,所以才比较特殊。但只要你不断变换文字信息后面的数字串,再反复不停地生成新哈希值,就有一定概率可以获得这样以零开头的特殊哈希值。
那如果我想让它不止以一个零开头,而是三四五六个零开头可以吗?当然可以。但要注意的是,你想生成的零越多,获得的概率就会越来越小,需要计算的次数也会越来越多。虽然每次哈希运算的时间大概只有短短的0.001秒,但如果想要生成的零太多,你可能就需要花上数天的时间才能运算出来。
听起来是不是很崩溃?那就对了。解哈希数学题的过程其实就是单纯的体力劳动,除了一个个不断的反复生成之外,没有任何其他的解题思路。不然怎么能叫工作量证明呢?
你得先花足够多的体力去劳动,证明自己已经完成了足够多的工作量之后,才能获得创建新区块的权利,就这么简单。
所以在PoW中,数学题的难度也是按照零的数量来划分的。零的数量越多,就意味着难度系数越高,越不容易被找到。
比如,我现在先给一道题的难度定为5级,需要进行哈希的文字信息是“我是金少”,但后面的数字串我肯定不会告诉你,只会告诉你是7位数。所以,你要计算的范围就是“我是金少1000000”一直到“我是金少9999999”。
期间你可以挑选这个范围内的数字串不断地重复运算,只要出现以5个0开头的哈希值,你就可以拿去给系统验证。
假设你算到“我是金少1234666”的时候出现了5个0开头的哈希值,你就赶紧拿去给系统做验证了,如果验证成功且确认你是第一个完成的人,那么恭喜你,获得了比特币奖励,还获得了记账权。
工作量证明机制的出题逻辑基本上就是这样了。那又有小伙伴要问了:那我怎么才能算得更快呢?而且之前不是说一个新区块链只要10分钟左右吗?这又是怎么做到的呢?
先卖个关子,下期再跟大家讲。
感兴趣的小伙伴,可以扫描下面的二维码注册,联系我或者Emily进群成为“百战少年”,跟大家一起了解学习。
注册之后记得要实名认证
不然无法参与后续活动
不知道如何操作的回复【实名认证】
加好友时记得备注来意
最后
我是少年,百战归来仍少年。
祝好。
▽
金少Frankie
带你了解新世界
另外,【知识星球】的试运营已经结束
想系统学习并乐于分享的朋友欢迎加入
扫下面【二维码】发送申请
附一段【申请说明】,长短随意
说你想说的就好,否则不予通过
领取专属 10元无门槛券
私享最新 技术干货