美文网首页
区块的生成和链接(二)

区块的生成和链接(二)

作者: kathy亚峰 | 来源:发表于2017-10-25 09:50 被阅读48次

听了新大的区块链课程,每个字都能听清连在一起就不知道什么意思,所以想到把文字整理出来,为的是可以反复看反复理解,于是就有了这篇文章,这是第五课的后半部分内容。

图一、区块的验证和链接(图片来自新生大学课程)

三、区块的验证链接

1.之前说每个交易需要验证,区块挖到之后NONCE值如果算的不对,区块立刻会被作废。

2.另外会检查时间戳是否是小于当前时间两个小时,这个说法和很多书籍上的描述也不一样,看源代码发现和书上描述并不一致。

3.检查MERKLE树根是否正确,会重新把MERKLE TREE建立一遍,看里边包含的交易、哈希算出来的是否一样。

4.检查区块的大小要符合当前区块的大小,超过极为非法。

5检查区块内的第一笔交易是否是COINBASE。

6.验证每笔交易。

7.http://btc.yt/lxr/satoshi/ident?_i=CheckBlock(对代码感兴趣可以看这个网站,这个lxr是lunix以前做的一套开源的“工具”,是一个非常方便的查看代码的工具。

这个链接是可以查看BTC源代码的链接,打开之后有很多版本可以选择,有最新的版本也有最初的版本,刚开始学比特币的话可以看0.1.5,它是很简单的版本系统。在这里可以看到代码的实现情况。

图二、图片来自新生大学课程

四,Merkle Tree

1.什么是树?

为了更直观,图片中的树的结构是倒立着的树,树根在顶端。进入这个树,验证在这个交易中是否包含某个数据的时候,是从根节点进入,按规则一步步去查找、验证的。

                                                                                  图三

父节点:从根节点开始,上面一级的是父节点,下面一级的是子节点。

比如12是根节点,也是父节点,5、18也是父节点

子节点:下面一级的节点就是子节点。例:5、18是子节点,2,9,15,19都是子节点

兄弟节点:5和18是兄弟节点,2和9是兄弟节点

如果规定兄弟节点只能有两个就是二叉树。

树的最大好处就是当数据量很大时,搜索某个数是否在这一堆数据当中会非常快。

2.如何构建一个二叉搜索树?(图三)

例:12 5 2 18 19 15 17 16 9

第一个是12作为Root;

第二个是5,判断5<12,于是放入左边形成12的一个子节点;

第三个是2,2先和12比较大小,它小于12于是就放到左侧,接着和5比较大小,2<5,于是2放在5的左侧成为5的子节点;

第四个是18,先和12比较大小,它大于12于是放到右侧,成为12的一个子节点

第五个是19,先和12比较,大于12于是放到右侧,接着再和18比较大小,它大于18,于是放在右侧成为18的子节点。

以此类推,后面的数据都依据这样的规则最终建立起树的结构。

3.Merkle Tree

在这个Merkle Tree中存的不是一笔交易的所有信息,而是交易数据的哈希值,如果某个交易被改了的话,整个Merkle Tree就会有翻天覆地的变化,因为某个值的变化就会造成单个哈希的变化,然后就会造成上一步哈希值的变化,最后的ROOT都不相符,所以这个Tree就可以防止篡改,并且能快速验证某个交易是否在这个Tree里。

图四、Merkle Tree (图片来自新大课程)

Merkle Tree的建立

它的建立是从子节点开始建立,从下往上到ROOT,并且子节点是成对出现,父节点是基于两个子节点计算出来的。在图四中的子节点HA是交易A的哈希值,子节点HB是交易B的哈希值,根据HA和HB的哈希值做个总哈希计算得出父节点HAB,子节点HCC由两个子节点HC的哈希值计算得出。(当这个交易非常大的时候,这个区块里只能放下三个交易,这时由于Mrekle Tree有交易必须成对出现的要求,所以此时需要把交易凑成对,就凑了个一模一样的HC做它的兄弟节点)。

根据HAB和HCC的哈希值做总哈希计算最终得出HABCC,到此Tree就建成了。

五、验证路径

如何验证一笔交易是否已存在于区块中呢,也就是当别人说给你钱包里发送了1个比特币的时候,你要如何验证他是否真的给你钱包里发送了呢?这就是Melrkle Tree的作用---实现便捷的验证、防篡改。

图五、图片来自新大课程

验证在N个数值中是否包含某个数值需要的工作量是log2(N)

Number ofTransactions:表示区块里交易的数量

Approx.Size ofBlock:表示区块里交易数量相对应的size

Path Size(Hashers):验证一个交易是否存在于这个区块需要的工作量(需要几步)

例:想验证Hk是否在这个区块里,需要四步,也就是说给出四个数(HL、HIJ、HMNOP、HABCDEFGH)就可以验证出HK是否在这个区块中了,验证路径如下:

第一步,HK和HL做哈希运算得出HKL

第二步,HIJ和HKL做哈希运算得出HIJKL

第三步,H­IJKL和HMNOP做哈希运算得出HIJKLMNOP

第四步,HABCDEFGH和HIJKLMNOP做哈希运算得出HABCDEFGHIJKLMNOP,并和区块中的ROOT对比。

相符即是TRUE不符就是FALSE 。

相关文章

  • 区块的生成和链接(二)

    听了新大的区块链课程,每个字都能听清连在一起就不知道什么意思,所以想到把文字整理出来,为的是可以反复看反复理解,于...

  • 区块链,区块的生成和链接

    共识机制POW-proof of work 1.通过挖矿保证我是个善意的节点(node),并获得生成区块的和在这个...

  • 区块的生成和链接(一)

    这周听了新大的区块链课程,每个字都能听清连在一起就不知道什么意思,所以想到把文字整理出来,为的是可以反复看反复理解...

  • 2 编译和链接

    第二章 编译和链接词法分析语法分析语义分析中间语言生成目标代码生成与优化链接器 第二章 编译和链接 平时我们使用的...

  • 我理解的区块链

    比特币的底层是区块链技术 区块链技术的底层是p2p共享技术(现在的磁力链接) 磁力链接是去中心化的节点生成的共享文...

  • 二维码生成

    tips: 使用QRCode生成二维码 指定link和生成的image的大小 就可以 ios方面。。看这个链接就够...

  • MarkDown语法

    内容包含 区块元素段落和换行标题区块引用列表代码区块分隔线 区段元素链接强调代码图片 其他自动链接反斜杠 区块元素...

  • 微信分享引流实现

    生成二维码 将生成的二维码显示在一个网址上Paste_Image.png 分享链接出去后,当用户点击该链接,请求如...

  • iOS 根据链接生成二维码图片

    一、.h文件 // // CIImage+Extension.h // 根据链接生成生成二维码 // // Cre...

  • 互联网区块链价值

    互联网区块链区块链的分享链接无限放大产品和人的价值;区块链把生产者和消费者两个分散的区块通过消费定制生产链接在一起...

网友评论

      本文标题:区块的生成和链接(二)

      本文链接:https://www.haomeiwen.com/subject/grgfpxtx.html