首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

金少的区块链日记第57话——小白们的区块链之旅(三)

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

带你了解新世界

另外,【知识星球】的试运营已经结束

想系统学习并乐于分享的朋友欢迎加入

扫下面【二维码】发送申请

附一段【申请说明】,长短随意

说你想说的就好,否则不予通过

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券