比特币的Merkle tree

1 区块链的数据结构

1.1 特殊的单链表

这个单链表就特殊在它是反过来,而且是hash指针作为记录当前最近的区块。反过来的意思是指指向是反向的,如下图:

 解析一下上面的图,第一个是创始区块,第三个块假如命名为H3(m3) ,H3(m3)= H2(m2+H(m2)),同理,第二个块相应命名为H2(m2) ,H2(m2)= H1(m1+H(m1)),hash指针记录的是当前最新的结点的Hash值。

1.2 如何防止篡改

假设我要修改第一个区块,第一个区块的值改变了那就得产生一个新的hash值(加密原理),因为H2(m2) ,H2(m2)= H1(m1+H(m1))所以H1改变H2也会改变,H2改变H3也会改变,如此类推,只要某一个区块改变它往后的所有区块都会产生改变,牵一发动后半身,但是假如你十分嚣张,觉得自己的算力可以牛*到重新创造hash冲突把后面的区块安排的明明白白,那我也无话可说。

2 Merkle tree

2.1 Merkle tree的数据结构

最底层的叶子结点是有信息的区块,每一个区块各取一个hash值,兄弟结点的hash值组成一个父结点,两个父结点再组成爷结点,爷结点再……最后得到的hash值作为根哈希值。

2.2 轻结点和全结点

轻结点就是保存H(m)的值,而全结点就是指保存所有区块的结点。举个例子:BTC的钱包就是轻结点只保存根哈希。

2.3 怎么验证交易成功

红色的date block可以生成最靠近的红色H(m),最靠近蓝色H(m)是向全结点请求的结果,两个hash结果得到橙色H(m)最后结合向全结点请求的绿色H(m)最后就得到了一个H(m),再和根哈希值比较,假如相等就是指已经添加到链上。

2.4 Merkle tree在区块的什么地方

Merkle tree是在区块头中具体如下图。

图源于简书作者:灰色轨迹_36ca


后记:

因为Unyielding_L 在周末两天竟然写了两篇博客,而且扬言要出干货,我追不上Unyielding_L了,内心愧疚写了两篇。看了Unyielding_L的文章和他探讨了一下,我发现以前写博客有一个误区,就是什么知识点都想细写,最后主题就不再凸显。

我之前写文章都是想到什么写什么,现在优化一下,先写目录在写内容,例如下图,这样能专注思路更加清晰。其次就是图片宽度保持在500-600这样手机看起来也不会拉长的很厉害。


审阅:@ Unyielding_L

以上是我的拙见,有什么意见Thanks♪(・ω・)ノ

发布了46 篇原创文章 · 获赞 75 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38875300/article/details/102902970