区块体中包含了由区块链系统产生的一系列交易数据,

并以Merkle根的形式保存在区块头中,

与前一区块的哈希值、时间戳和版本号等组成一个完整的区块。

上图表示的是比特币的区块结构,

其区块头中还包含了难度目标、随机数Nonce等数据,以支持 PoW 共识机制中的挖矿运算。

区块间采用链式结构进行连接,具体表现为每个区块的区块头中都包含了前一区块的哈希值,从而形成一条不可更改的完整区块数据链。

链式结构使得区块链具有溯源的功能。

区块链系统可以采用基于交易的数据模型或基于账户的数据模型。

基于交易的数据模型将表明交易来源的输入和表明交易去向的输出组合到一起,使得每笔交易可追溯。

基于账户的数据模型能够快速查询用户余额和业务状态数据。

由于智能合约需要执行复杂的业务逻辑,因而更适合通过基于账户的数据模型进行构建。

为了控制区块大小,区块链系统中通过哈希函数将原始交易数据编码为特定长度的字符串哈希值进行储存。

哈希函数也称散列函数,可以把一个空间的数据集尽可能均匀的映射到另外一个比原数据集更小的空间,

即对于输入的任意长度字符串 都可以输出长度固定的 H(x) ,且无法通过 H(x) 反推得到 

原始交易数据的哈希值通过Merkle树的形式进行组织。

Merkle树中文译为梅克尔树或默克尔树。

以比特币中使用的二叉Merkle树为例,每条交易的哈希值就是一个叶子节点,

从下往上将两个相邻叶子节点的组合哈希作为新的哈希值,

新的哈希值成为树节点继续与相邻的树节点组合成新的哈希值。

在重复一定次数后直到形成唯一的根节点。

最后得到的Merkle根需要保存到区块头中,

以便仅需通过区块头就可以对交易进行简单支付验证,

这一过程也成为SPV(Simplified Payment Verification)。

对于Merkle树而言,并不需要知道整棵Merkle树中每个节点的值,

可以通过节点的值、Merkle根的值和相关路径来快速验证该节点是否属于该Merkle树,

从而快速验证该区块中是否包含了某条交易。

此外,时间戳用于标记区块顺序。

时间戳表示自格林威治时间 1970 年 1 月 1 日 0 时 0 分 0 秒到当前时刻的总秒数,

是一种完整且可验证的电子证据,能够为某一数据提供特定时间点的存在性证明。

区块链根据时间戳的先后顺序通过链式结构将一个个区块关联起来,

因此篡改区块数据的难度以时间的指数倍增加,

区块链越长篡改难度就越高,这也是确保区块链不可更改性的重要因素之一。

Merkle树的作用:

快速比较大量数据:当两个Merkle树的根哈希值相同时,说明所代表的的数据都相同。

快速定位修改:当两个Merkle树的根哈希值相同时,说明所代表的的数据都相同快速定位修改:

如下图,如果交易C发生改变,那么就会导致N2、N5和Merkle根发生改变。

所以,我们想要快速定位,只需要沿着Merkle根→N5→N2就可以定位到交易C发生改变。

零知识证明:例如,想要证明一组交易中包含某个交易A,但又不想让对方知道交易A的具体内容,

那么就可以构建Merkle树,如上图,向对方公布N0、N1、N4和根节点,

对方就可以确认交易A的存在,但无法知道交易A的具体内容。

区块链中的Merkle树相关推荐

  1. 区块链中的merkle树有何作用?

    区块链中的 Merkle 树有以下作用: 数据完整性验证:Merkle 树可以用于验证区块中的交易是否完整,因为每个交易都有一个哈希值,这些哈希值按照一定的方式组织成 Merkle 树的叶节点,而根节 ...

  2. Java实战手写区块链中的Merkle树

    文章目录 前言 一.Merkle树简介 二.java实现 1.代码如下: 2.测试 总结 前言 学习区块链技术,那么Merkle树不得不去深入了解.本文将用java手写Merkle树 一.Merkle ...

  3. 一文读懂:区块链中的Merkle树

    ​我们知道,区块链中每个区块包括区块头和区块体两部分. -------- 个人技术公众号:解决方案工程师 欢迎同领域的朋友关注.相互交流. -------- 像在CSDN一样,分享技术,分享代码,分享 ...

  4. java merkle树,Java实战手写区块链中的Merkle树

    前言 学习区块链技术,那么Merkle树不得不去深入了解.本文将用java手写Merkle树 一.Merkle树简介 Merkle树是1979 年Ralph Merkle提出并用自己名字命名的一种数据 ...

  5. 烤仔TVのCCW | 区块链中的 Merkle 树

    大家好,欢迎收看 Conflux Chain Webinar. 今天,烤仔来跟大家聊一聊在每一个账本模型的区块链系统中,例如比特币.以太坊,用来维护账本状态都需要使用的 Merkle 树 . Merk ...

  6. 区块链中的Merkle Tree

    有道面试题讨论了一个应用场景:一道程序员面试题? 题目:某公司在中国和美国各有一台服务器,服务器中各自装有存储相关信息的大文件,这两份文件内容是一致的.某日,由于故障导致美国服务器中的文件中的某几个字 ...

  7. 区块链中的密码学应用

    区块链中应用到的密码学主要包括以下几方面: 数字摘要 区块链本质上是一种分布式数据存储方式,每一个数据区块之间靠数字摘要建立起联系,比如比特币中每一个区块都包含了它前一个区块的摘要值.因此数字摘要是区 ...

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

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

  9. 区块链中密码学与安全技术

    区块链的定义 区块链的定义,应当是:区块链是一种按照时间顺序将数据进行分布式存储的块链式数据结构,它利用共识机制进行数据验证,利用密码学进行数据保护和用户安全访问,利用智能合约来操作数据,从而成为不可 ...

最新文章

  1. Windows 8.1内置微软五笔输入法
  2. opencv 学习:reshape函数
  3. Activity的使用(七):activity的返回值
  4. 安装RVDS2.2破解版
  5. 这是一个测试:测试博客在浏览器中是否可以显示数学内容以及代码格式
  6. Android—简单路由框架实践
  7. Algorithm:贪心策略之区间调度问题
  8. 【游戏开发教程】Unity iOS平台接入微信SDK,实现微信登录等功能(教程 | 流程讲解)
  9. 关于idea中的maven索引异常问题(在idea中创建maven项目时,在pom.xml文件中加入依赖,提示出现的很慢)
  10. 最经典的人生定律、法则、效应总结
  11. 复选框不可编辑_你不可错过的Word操作文本小技巧 | 厉害了Word姐15
  12. 电脑时间校准方法,怎么校准电脑时间
  13. keep sb updated_keep me updated是什么意思
  14. 代码仓库已移步http://202.119.84.104:8088/Socialbiao/bookdinner
  15. python爬虫学习(8) —— 关于4399的一个小Demo
  16. 融合改进天牛须和正余弦的双重搜索优化算法
  17. 嵌入式系统(二):ARM芯片及体系架构(上)
  18. 动态规划(二)最优二分检索和0/1背包
  19. 摩摩哒蓄势再起:最新自主研发产品摩舒椅上线小米有品众筹平台
  20. JSSE(Java SecuritySocket Extension,Java安全套接字扩展)

热门文章

  1. (DCDC)CM3601降压型开关稳压器 60V,480KHz,0.5A
  2. android studio 自定义控件
  3. 隐私保护学习笔记(privacy protection reading list)
  4. tools:callgraph
  5. egg-scripts: Permission denied
  6. idea打包出错时出现 Cleaning up unclosed ZipFile for archive?
  7. “区块链+物流运输业”能融合发展吗?
  8. 不适当的云安全 后果很严重
  9. oracle批处理文件
  10. python画离散图_python画离散图