比特币架构简述之Merkle树

来源于bitcoin wiki
Merkle Trees
Merkle树是哈希值构成的二叉树。比特币中的Merkle树使用双 SHA-256,即SHA-256散列的SHA-256散列。

在树中(树的根除外)形成一行时,若这一行目前一共有奇数个元素,则最末尾的这个双重哈希值将被复制以确保该行具有偶数个哈希值。

首先形成树的底部行,其中块里面的交易是有序的,顺序按照交易的双SHA-256散列的字节流记性排序(有点绕口啊,大意就是按照每个交易的哈希值进行排序)。

那么它上面的那行的哈希值个数就是当前行的哈希值数目的一半。每个条目都是树中它下面相应两个哈希的64字节连接的双SHA-256。

这个过程以递归的方式重复,直到我们到达由单个双重散列组成的行。这是树的Merkle根。

例如,想象一个包含三个事务a,b和c的块。梅克尔树是:
dhash(a) = sha256(sha256(a))//双哈希

//底部的行
d1 = dhash(a)
d2 = dhash(b)
d3 = dhash(c)
d4 = dhash(c)            # a, b, c 是 3. 这是个奇数,所以再取一遍c的双哈希

//倒数第二行
d5 = dhash(d1 concat d2)
d6 = dhash(d3 concat d4)

//树根
d7 = dhash(d5 concat d6)

d7是这个块中3个交易的Merkle根。
值得注意:块浏览器中显示的Merkle树中的哈希值是小端模式(符号)。对于某些实现和计算,这些字节在散列之前或之后需要反转操作。
附上一个地址:在线计算哈希

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 所有货币都需要一些方法来控制供应,并强制执行各种安全属性以防止作弊。在法定货币方面,像中央银行这样的组织控制货币供...
    Nutbox_Lab阅读 3,142评论 1 3
  • 区块链系统的核心之二-加密技术 加密技术主要是用来解决区块链系统记录的数据的所有权问题。 1哈希算法 1)...
    yrm23阅读 1,627评论 0 4
  • 采矿难题是比特币的核心,因为他们的困难限制了任何一方控制共识程序的能力。因为比特币矿工为他们解决的谜题赚取了回报,...
    Nutbox_Lab阅读 1,142评论 0 4
  • 本章全部都是采矿。我们已经看到了一点矿工的信息以及比特币如何依靠他们——他们验证每一笔交易,他们构建和存储所有的区...
    Nutbox_Lab阅读 558评论 0 3
  • 〇、序言 货币由于其天然属性决定了其与安全不可分割的联系,从最早的金库、保险柜、镖局到后来的ATM机、运钞车;从存...
    怒马2048阅读 38,943评论 4 79