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

回答不出来?别说你懂区块链

关于比特币区块的生成以及工作流程,我们都知道是这样的:

一群人参与区块的计算,其中最先计算出区块哈希值的人,将自己算得的哈希值广播发送给其他人。其他人在自己的矿机上进行验证,如果数值正确,会将区块链接到上一个区块,同时最先计算出哈希的那个人获得一定数量的比特币奖励。

我想追问三个问题:

1.如果是算力比不过别人,为什么不提前开始计算下一个区块呢?

2.如果上一个区块的随机数是0X1234567,为什么不直接接着0X1234567算下去?

3.既然矿工是为了寻找一个随机数,那有没有矿工在1分钟左右就找到那个随机数呢?

如果你可以回答出来,可以关闭这个页面了。真的,时间太过宝贵!

比特币的白皮书晦涩难懂,读起来如同嚼蜡。我试着用一些通俗的语言和例子,剖析一个比特币区块的来源,也就是工作量证明背后的原理。当然,还是需要你用大概10分钟的耐心来阅读,才能更加清晰的理解关于区块链的这个重要知识点。至少,出去装逼不会被怼。

开始,我们先从区块的结构来理解:

我们常说一个区块就像一个盒子,里面装的是一条条交易信息。于是,在大部人的想象里面,区块链就像是一排被加工好的,有着前后顺序的盒子!但是,我们都看到过的货物纸盒都会有一个标签,而在区块链的世界这个标签就叫做“区块头”

我们在BTC.com 在搜索框输入10000,跳出来的页面就是编号10000的区块详情,注意看!摘要,就是我们想象中的“区块头”包含的信息。交易,就是的转账交易记录。

好的,恭喜你!以前你知道的“区块就是一个盒子”,现在你知道了“区块就是贴着标签的盒子”,标签=区块头。

上图红框中Nonce=0x7fe05d3a,对的,它就是传说中的随机数,看上去没那么复杂,但是为何会这么难找呢?

实际上,随机数不是我们要找的,我们是要“通过”这个随机数算得右边的区块哈希(准确的说,应该是叫做区块头哈希,因为哈希实际上和交易信息没有太大关系

这才是我们最终要得到的真正结果,随机数只是计算哈希时候一个要素而已,而已,而已!

矿工计算时候需要用的数据有这些:

A.上一区块的哈希

B.Merkel树哈希

C.时间戳

D.难度目标值

E.Nonce随机数

这几个概念需要单独解释:

A.上一区块的哈希

现在是打包编号10000区块,那么上一区块编号就是9999,上图可以看到,上一区块的哈希是

B.Merkel树哈希

当前区块包含的所有交易信息的索引,

这里有个不太相关的知识点需要讲一下:尽管单条交易信息的哈希也是32字节,可Merkel树哈希值始终都是32字节,我们可以把它当做一个交易信息的索引即可。

打个不太恰当的比方,我们可以把上面的结构想象成一个祖谱。我们最上面的树根是“孙子”,第二排就是“爸爸”“妈妈”,第三排是”爷爷““奶奶””外公“”外婆“。看!我们只需要通过”孙子“这两个2个字就可以找到另外两个字,而不需要把所有的称呼都记录在Merkel树根,这样的好处就是不会导致数据过大,同时也方便检索每个交易!

认真仔细又好学的你,一定会发现为什么第三排的第三个和第四个一样呢?会不会是我弄重复了?并不是,Merkel数是遵循偶数原则的,当区块包含的数量为单数时,Merkel数会自动的复制一个交易记录的代号出来。所以就有了两个“交易C”

C.时间戳

时间戳就是将当前的时间进行哈希计算后的字符,这个好理解,不多说。

D.难度目标值

还是拿掷骰子打比方,两个骰子。

最开始我们只需要投小于12的点数即可,那很简单。如果比特币网络将难度值调整到2。那我们要投掷到的几率就变小,要投掷的次数也就增加了,相对的难度就肯定增加了嘛!

至于这个数值背后的计算方式,我在这里就不细讲了。我们可以想象难度值就是一个水龙头,它是控制比特币出块速度的一个数值就好了。通常情况下,它规则就是不停变化!矿工需要计算的哈希值,必须要小于这个难度值,区块才能被认可。

到了这里,我需要提醒一下,矿工在创建区块时候,必须要有【上一区块哈希值】(创世区块除外)【Merkel交易引】【时间戳】【难度目标值】!没有上一区块的哈希就像一辆没有汽油的汽车一样,无法启动!

E.Nonce随机数

我们来看看0x7fe05d3a,这个数貌似不太难。我们以彩票来做类比

彩票的数字包括:

1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36

哈希数值包括:

1.2.3.4.5.6.7.8.9.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z

是双色球的中间概率,找到一个区块所需要的随机数哈希值,比中一组500万的双色球几率还要低。我们只需要把它简单的想象成一个随机的数字和字母组合就可以了。

敲黑板,

敲黑板,

敲黑板,

有了上面的共识,我们开始解答开始的3个问题就相对容易了

A代表.上一区块的哈希

B代表.Merkel树哈希

C代表.时间戳

D代表.难度目标值

E代表.Nonce随机数

1.如果是算力比不过别人,为什么不提前开始计算下一个区块呢?

答:理解了区块头,我们就知道需要找到随机数的前提条件有哪些,包括

A+B+C+D 4个数据

但是在对上一个区块哈希值未知的情况下,下列数据也是无法计算的。

A未知?

B可知(假设=2)

C可知(假设=3)

D未知?

E未知?

A+2+3+D+E=Y,

那请问E,等于几?显然,在显示世界问这个问题是会被挨揍的!

2.如果上一个随机数是0X1234567,为什么不直接接着0X1234567算下去?

每个区块的初始值为0,矿工的第一个计算公式是将**(A+B+C+D+0)的结果,再将其进行哈希计算,如果当前哈希结果无法达到目标难度要求(这是矿工的第一次计算),那么矿工会逐渐的在(A+B+C+D)这个数值上加上1,继续进行哈希计算!

同时我们知道,每个区块的哈希和交易数据,以及难度都是不一样的!哪怕是同样的难度值,交易数据和时间戳也是不一样的,那出来的哈希值肯定也是不一样的。看上图,仅仅是在A+B+C+D后面加多一个1,出来的哈希结果完全不一样,没有任何规则可言。那么,如果接着当前的随机数往下算,绝大多数情况下,可能计算的方向就是错误的。

3.既然矿工是为了寻找一个随机数,那有没有矿工在1分钟左右就找到那个随机数呢?

答案是可以的!带来的结果是后面的区块难度相应的会增加,比特币网络会自动的调整难度值,尽可能均衡的将每个区块的生成时间控制在10分钟左右!难度值是比特币区块的智能水龙头!

加多一题,为什么叫工作量证明?而不叫随机数证明?因为其他的矿工可以通过你的得到的数值,通过统计学来估算这个数的难度值,就可以知道找出这个Nonce随机数需要多少工作量,顾名“工作量证明”。

—END—

人生就像一条区块链,

每一天都是一个区块,

昨天的区块里面的事情无法更改,

今天的区块哈希数值正在计算,

明天的区块无法提前计算。

参考资料:精通比特币第二版

区块查询网站:http://btc.com

哈希计算:http://www.fileformat.info/tool/hash.htm

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券