Merkle Tree

如果对区块链有些基本的了解,那应该经常听到一个词叫merkle tree,那么merkle tree到底是做什么用的呢,这里来简单的探讨一下。

首先我们需要知道在区块链网络中有两种类型的节点,一种节点叫full node,顾名思义,这种节点的特点就是它存储着整个区块链数据的完整备份,包括从区块链创世之初到现在的所有交易,所以这些数据量是很庞大的,会占据惊人的磁盘空间。还有一种节点叫spv(simple payment node),有时候我们使用的是手机这类设备,存储空间有限,那就只需要下载每个区块的header信息(类似索引)就可以了,这样就会大大节省存储空间和带宽。

这样对spv节点就产生了一个问题,如果我发起了一笔交易,怎样确认这笔交易已经被包含在区块链中了呢?(毕竟节点中没有存储所有的交易信息)

先不管merkle tree,有一个笨办法,在区块header中会存储有一个hash值,这个hash值是这个区块中所有交易的hash值的hash:hash in header = hash(交易1+交易2+交易3+......)。当我们想确认交易X是否存在于区块M时,我们可以询问附近的一个full node,这个full node是不可信任的,它可能会告知我们假信息,所以需要它把区块M的所有交易的hash值都发给我们,然后我们来做比对,[hash in header of block M](这个值是存储在我们本地区块header中值得信赖的值)是否等于 hash(交易1+交易2+...+交易X+...),而这些交易的hash值是full node发给我们的。如果相等,表示交易X已经被确认,否则表示这个节点给了我们假信息或者交易未被确认。

似乎很美好,但是这样就又会产生一个问题,如果区块M中包含了一千笔交易,为了确认一笔交易就需要传输这一千笔交易的信息,对速度带宽等的消耗都是很大的。merkle tree就是为了解决这一个问题而产生的(学过算法的同学知道二叉树的时间复杂度是logN)。

观察下图,就是一个典型的merkle tree:


Merkle Tree Example

L1,L2,L3,L4代表区块中的所有的四笔交易,如果我们想确认L3是否被包含在区块中,需要full node给我们哪些信息呢?观察树的结构很容易知道,只需要给hash
1-1和hash 0就可以了,在spv本地block header中的hash值是top hash的值,这样只需要传输2个hash值就可以了,这样传输的信息量就变为了logN。

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

推荐阅读更多精彩内容

  • 什么是merkle tree 假设你已经知道了什么是哈希算法以及哈希是用来干啥的。 网络传输数据的时候,A收到B的...
    Pony小马阅读 4,609评论 0 52
  • 其实有很多时候,看清一个人就在瞬间。 今晚情绪一度濒临崩溃,一个实验安全知识竞赛,本来可以全宿舍大家一起完成,一个...
    even_cc1e阅读 311评论 1 0
  • 致同事 与她们走到一起, 习惯了相处, 然而刚刚熟悉, 还未来得及相识相知, 她们...
    四叶草_75c4阅读 289评论 3 3
  • 小学,我的成绩还算过得去,马马虎虎,总归和那些好生融不到一起。升初了,我的升学考分数史无前例的跃到班级第二。老师很...
    钱币阅读 227评论 0 1
  • 《可否这样相爱》完整目录 一帘幽思,浓抹茫茫。红烛泣,情堪伤,醉依罗衾凉。梦觅寄客乡,何处枕黄梁。晨钟悠,暮鼓扬,...
    晚成寄语阅读 598评论 4 18