区块链是实现无中心分布式总账的一种技术。除了采用块、链结构的典型区块链以外,还有其他的方式实现分布式总账这个需求。总账技术的基本单元是‘交易’,整个账本是由一条条的交易构成。‘块’类似于账本中的页,每页都记录了若干条交易,把一页一页的账页按照时间顺序装订起来,就形成了一个完整的账本——‘区块链’。‘块’是交易的容器,‘块’通过密码学算法相连接,形成了按照时间序列的‘链’。这种组织账本的好处是由密码学算法保证了无法篡改链上的单独交易,除非整体性的篡改。”


根据描述,我们可以看出来,“块”是交易的容器。每个交易都要放到容器里面,然后把整个容器用密码学算法进行连接,形成了一个完整的链。

这种数据的组织方式最大的好处就是数据易于保持完整,并且从密码学角度看安全性较高。然而,这个好处是有代价的——数据一直不停的增长。

对于比特币系统来说,这个问题并不大,因为截止目前为止,比特币仍然是每10分钟一个区块,每个区块1MB,即便到了100年后,总的数据量也不会大到单机无法处理。但是对于某些企业级应用的区块链系统来说,情况就完全不一样了。每个区块可能会非常大,生成区块的速度也会非常快。这种情况下,区块链的数据量增长是飞快的。

怎么解决数据量过大的问题呢?

在我们传统的数据系统中,也存在数据不断增长,数据量过大的问题。以传统的交易型系统为例,由于系统中的核心设计理念是保存账户的最终状态,只需要把历史的交易过程数据移到其他专门的存储设备上,主机数据库保存账户的最新状态和最近一段时间的交易记录即可。(因此,我们在网银中查阅历史交易时,通常是有时间限制的。)

但是在区块链系统中,尤其是使用UTXO方式存储交易的区块链系统中,保存的都是交易的过程。如果一个账户一直没有交易,它则不会出现在最新的区块中。

那么按照传统数据库删除历史数据的方式,只要一个区块中有一个交易一直没有后续交易(就是没有人使用这个交易的输出账户),为了维护整个区块链系统的密码学完整性和安全性,这个区块就必须保留,同时这个区块之后的所有区块也必须保留。

怎么解决这个问题?其实有很多种办法能够解决,起初,在中本聪设计比特币系统的时候,已经预留了一个最佳的解决方案:默克尔树(Merkle Tree)算法。

在比特币区块链系统中,区块的结构如下图所示:

每个区块中的Hash1就是本区块中所有交易的哈希值。但这个哈希值不是把所有交易连成一个长字符串后计算HASH值,而是使用了默克尔树(Merkle Tree)算法来计算获得这个HASH值,我们称之为Merkle根。

默克尔树算法并不是直接计算整个字符串的Hash值,而是每个交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。

默克尔树(Merkle Tree)算法的最大好处就是,每个交易都可以单独直接删除,只保留这个交易的Hash值即可。这样,对整个区块来说,并没有改变他的密码学安全性和完整性,但是数据量可以大大减小。(Hash值32个字节,而一笔交易一般要400多个字节)。如果一个区块中只有一个交易没有后续交易,那么删除其他所有交易,整个区块的数据量会大大减小。

因此,在UTXO的记账模式中,使用默克尔树结构,通常就无需担心数据量一直增长导致数据过大的问题了。

最后总结

Merkle Tree具有以下特征及优点:

1.Merkle Tree提供了一种验证文件的方法。

2.Merkle Tree需要的memory/disk space小,验证快,大小为n的文件,时间复杂度O(Log n),空间复杂度O(Log n)。

3.Merkle Tree的验证需要的网络传输流量小。

不得不说,中本聪将UTXO记账模式与默克尔树结构结合在一起,完美的解决了比特币交易数据过于庞大的问题,同样,这一模式也经受住了时间的考验。

区块链基础知识系列 第三课 区块链中的默克尔树相关推荐

  1. 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比

    中国作为贸易大国,国际贸易和内外贸一体化的市场规模庞大.近年来,随着"走出去"和"一带一路"国家战略的深化,企业层面的跨境支付与结算业务将迎来新的市场契机.加之 ...

  2. 区块链基础知识系列第5课 Hyperledger fabric1.0网络中transaction产生以及流转过程

    一.发起transaction 当client想要发起一个transaction时,它会首先发送一个PROPOSE消息到它选择的一组endorser节点,消息模式有以下两种,节点可以自由选择(可能有更 ...

  3. 区块链基础知识系列 第四课Hyperledger fabric 1.0网络组成及构建流程

    一.fabric网络结构(暂时不包括CA) 如上图所示,在fabric网络中,O表示Orderer,P代表Peer,EP代表Endorsing Peer(endorser),CC代表Chaincode ...

  4. 区块链--默克尔树(Merkle Tree)

    Merkle Tree 默克尔树是一种二叉树,由一个根节点.一组中间节点和一些叶子节点组成.形状如下: D0.D1.D2和D3是叶子节点包含的数据,也就是叶子节点的value.继续往上看,N0.N1. ...

  5. 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 来源:万向区块链 原文标题:三分钟了解区块链常用数据结构「默克尔树」 默克尔树是 ...

  6. 区块链学习1:Merkle树(默克尔树)和Merkle根

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根. 关于Merkle树老猿推荐大家阅读<M ...

  7. 区块链杂谈---默克尔树(Merkle Tree)解析

    相信了解区块链的人对默克尔树并不忙陌生,在区块链里被广泛的应用,下面我们来了解下它的算法. Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储has ...

  8. 【区块链 | 默克尔树】使用默克尔(Merkle)树实现NFT白名单

    简介 在我们今天所知道和喜爱的区块链出现之前,默克尔树一直是密码学和计算机科学领域的一个方面.如今,我们开始慢慢看到它们在链上更频繁地被用于数据验证的目的.在这篇文章中,我将解释 Merkle Tre ...

  9. 默克尔树在区块链中的应用

    1 MT(Merkle tree) 默克尔树是一种哈希二叉树,1979年由Ralph Merkle发明.与标准二叉树一样,由一组叶节点,一组中间节点和一个根节点构成.叶节点包含存储数据或其哈希值,中间 ...

最新文章

  1. springboot中使用redis详解
  2. excel重复上一步快捷键_最全的Excel快捷键合集!
  3. 利用SSH端口转发功能实现X转发
  4. 压缩追踪Compressive Tracking源码理解
  5. NET问答: 如何给 ASP.NET Core 配置指定端口 ?
  6. 【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程
  7. HDU6089 恐怖分子(变形线段树)
  8. 【POJ - 1837】Balance(dp及其优化)
  9. 张勇云栖大会谈科技担当与责任:做开放共享人人受益的好科技
  10. [转]Sql Server参数化查询之where in和like实现详解
  11. java object... args_java中String.format(format,args)中的args是动态的,如何定义format?
  12. 【好文推荐】梁宁:人一通透,就不怎么算小账
  13. CCF201312-4 有趣的数(100分)
  14. baacloud苹果_baacloud官网下载
  15. 3t中文 studio_studio 3t免费版
  16. c#删除sheet_C#中实现插入、删除Excel分页符的方法
  17. thinkphp 5 验证码错误,可能与session保存路径不同有关
  18. 【网络资源学习笔记】ShellCode相关内容学习
  19. Android几种定时任务实现方式汇总
  20. 神经网络芯片概念股,图神经网络预测股票

热门文章

  1. NSDictionary和NSMutableDictionary good
  2. 显式接口成员实现你知道吗??
  3. Python学习笔记:面向对象编程(4)
  4. 手动制作python的exe可执行程序
  5. php字符串从a到z排序,js怎么实现中文按照A-Z排序
  6. 斯坦福CS231n项目实战(四):浅层神经网络
  7. php万年历月份处理_php实现万年历的完整代码
  8. c++ 编译添加dll_matconvnet安装、编译、配置
  9. SVM熟练到精通5:MATLAB实例
  10. WebBrowser 操作(从网上收集)