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是在区块头中具体如下图。
后记:
因为Unyielding_L 在周末两天竟然写了两篇博客,而且扬言要出干货,我追不上Unyielding_L了,内心愧疚写了两篇。看了Unyielding_L的文章和他探讨了一下,我发现以前写博客有一个误区,就是什么知识点都想细写,最后主题就不再凸显。
我之前写文章都是想到什么写什么,现在优化一下,先写目录在写内容,例如下图,这样能专注思路更加清晰。其次就是图片宽度保持在500-600这样手机看起来也不会拉长的很厉害。
审阅:@ Unyielding_L
以上是我的拙见,有什么意见Thanks♪(・ω・)ノ