区块链的数据结构(二)——默克尔树(Merkle Tree)

这篇具有很好参考价值的文章主要介绍了区块链的数据结构(二)——默克尔树(Merkle Tree)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        区块链中的另外一个数据结构是Merkle tree,在比特币中使用的就是这种结构:

区块链二叉树,区块链,哈希算法,算法

        可能没有听说过Merkle tree,但一定听说过binary tree(二叉树)。

        Merkle tree和binary tree的区别:Merkle tree用哈希指针代替了普通的指针

区块链二叉树,区块链,哈希算法,算法

        每个框内的两个哈希值,在一起取哈希,就是上框内的哈希值,如下图箭头表示:

区块链二叉树,区块链,哈希算法,算法

        这种数据结构的好处在于,只要记住根哈希值,就能检测出该树下的任何数据是否篡改。

区块链二叉树,区块链,哈希算法,算法

        圆圈内黄色的tx被修改,那么必然导致上方绿色的H()被修改,从而导致了上方绿色的H()被修改,从而导致了上方绿色的H()被修改,最终导致了root hash这个值的修改。

Merkle tree的作用

        Proof of Inclusion

        Merkle proof可以证明merkle tree里面包含了某个交易,所以这种证明又叫proof of membership或 proof of inclusion。

        比特币网络参与者包括全节点轻节点,全节点保存了区块的所有信息,包括block header和block body,而轻节点只保存了block header。

        假设某个轻节点想要知道某笔交易是否写入了某区块中,应当怎么做?(类似A向B买东西,使用比特币支付,A告诉B这笔交易已完成,钱已付,在某区块中,B是轻节点,B如何验证这比交易在区块链中?)

        使用Merkle proof就可以解决这个问题,具体操作步骤如下:假设下图中的黄色交易是这笔交易。

区块链二叉树,区块链,哈希算法,算法

  • 全节点收到了B请求验证这笔交易的信息,全节点可以看到这笔在merkle tree中的位置,他给B提供三个数据,即上图中红色的H()。
  • B在本地通过运算得到上图中绿色的H(),再和获得的红色H()一起,再在本地算出上方的绿色H(),再和获得的红色H()一起,再在本地算出上方的绿色H(),最终算到root hash值。
  • B将算出来的root hash值与本地的root hash值进行对比,相等则表示这笔交易存在该区块中。

        为什么全节点不直接告诉B结果呢?因为不能保证这个全节点是友善的。

        那是否有可能全节点为帮助A伪造交易,向B提供的哈希值(即上图中红色的H())是经过调整的,使B最终算出来的root hash值与本地的root hash值一致呢?

        答案是几乎不可能!因为哈希的collision resistance和不可逆两个特性,制造不出这样的哈希碰撞。

        对于一个轻节点来说,验证一个merkle proof 复杂度是多少?假设最底层有n个交易,则merkle proof 复杂程度是θ(log(n))。

        Proof of Non-Inclusion

        上述我们为了证明某个交易在区块中,本质是proof of membership或者是proof of inclusion。上述方法的复杂度为对数级别。

        那我们是否可证明某个交易不在区块中呢?即proof of non-membership问题。

        方式1:遍历一遍树。这么做的复杂度是n

        方式2:对所有叶节点(即交易)取哈希,将哈希值有小到大排列,将待查找的交易的哈希值,利用二分法进行查找。这么做的复杂度降为log n

        这种排好序的merkle tree称为 sorted merkle tree。比特币中没有用到这个sorted Merkle tree,因为不需要不存在证明。文章来源地址https://www.toymoban.com/news/detail-832853.html

到了这里,关于区块链的数据结构(二)——默克尔树(Merkle Tree)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python实现的默克尔树

           默克尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点。 默克尔树的基础数据不是固定的,想存什么数据都可以,因为它只要数据经过哈希运算得到的哈希值。 默克尔树是从下往上逐层计算,每个中间节点是根据相邻的两个叶子节点组合计算

    2024年02月02日
    浏览(23)
  • solidity——默克尔树实现零成本空投

    在web3.0中,大家对空投肯定不陌生。如果项目方要大规模给用户进行空投,所需gas将是一笔不小的开支,特别是在以太坊链上,其次是大规模连续转账交易所涉及的事物原子性等问题也值得考虑。接下来将介绍一种相对低成本、安全性高的空投实现方式:通过默克尔树验证用

    2024年02月04日
    浏览(27)
  • Solidity实现默克尔树 Merkle Tree

    ​ ​Merkle Tree​ ​​,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用。​ ​Merkle Tree​ ​​是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的​ ​2​ ​个子节点的哈希。 ​ ​Merkle Tree​ ​允许对大型数据

    2024年01月16日
    浏览(28)
  • 区块链的数据结构(一)——区块、链

            区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。但这个链表不同于普通链表。 1. block header 比特币的block header: 以太坊的block header: hashPrevBlock / ParentHash ,上一个block header的hash h

    2024年02月13日
    浏览(30)
  • 区块链的数据结构和数据存储

    区块链主要分三种,本质上是一种块状存储的链,与寻常的链表不同,链条的每一个节点是根据场景衍生的区块,一般用分布式存储数据,防篡改可溯源: 公链 联盟链 私链 上述三种区块链是基于不同场景诞生的不同业务结构,因此其核心的数据结构和数据存储方式略有不同

    2024年02月02日
    浏览(28)
  • 从零开始学习数据结构—【链表】—【探索环形链的设计之美】

    双向环形链表带哨兵,这个时候的 哨兵 , 可以当头,也可做尾 带哨兵双向循环链表:结构稍微复杂,实现简单。一般用来单独存储数据,实际中使用的链表数据结构都是带头双向链表。另外,这个结构虽然结构复杂,但是使用代码实现后会发现结构会带来很多优势。 双向

    2024年02月22日
    浏览(30)
  • 区块链数据结构

    这笔交易参照的规则, 4 字节, Little-endian 交易输入列表的数量,1-9 字节 下面开始构建一个或多个交易输入  交易输出列表的数量,1-9 字节 下面开始构建一个或多个交易输出  

    2024年02月15日
    浏览(29)
  • 区块链中基础数据结构

    1个输入:发起人A的地址 2个输出:给B转1个币   A还剩1个币  区块链是有多个区块组成的链表,每个区块包含块头和块体, 块头中包含1. 上一个区块的哈希指针 2. 块体的根哈希 3. 时间戳 块体中包含1. 哈希树 叶子结点记录详细交易记录 非叶子结点记录哈希地址。  首先A用

    2024年02月13日
    浏览(25)
  • 数据结构课程设计1: 区块链

    1.任务: [问题描述] 使用链表设计一个保存信息的系统,该系统拥有类似区块链的设计以防止信息被轻易篡改。 该题目使用一个链表。信息保存在链表的每一个节点中,每个节点需要包含该节点的编号、信息和校验码。其中: + 每个节点的编号按照顺序递增,从0开始。 + 节

    2023年04月16日
    浏览(93)
  • 区块链学习笔记(2)BTC数据结构

    1.哈希指针(hash pointers):一般的指针存储的是某个结构体在内存中的地址,哈希指针除了要保存结构体的地址外,还要保存这个结构体的哈希值。 通过哈希指针,我们不但可以找到结构体在内存中的位置,同时还可以检测出结构体的内容是否遭到了篡改。 因为我们记录了

    2023年04月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包