《05区块链如何保持数据一致性》学习笔记
我正在区块链研习社学习区块链相关的知识,现在在补课学习基础课程的内容。基础课程,包含如下内容,学习地址如下区块链研习社基础课程
这是我学习基础课程的第5篇学习笔记。
《我是默克尔不是默克树》
一致性问题,涉及到区块的结构以及区块链的不可篡改性。
1、什么是哈希
哈希,英文对应 Hash , 一般说的都是哈希函数。百度百科中提到哈希一般翻译做散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出。这种转换是一种压缩映射,也就是说散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出。
简单来讲,就是将一个较长的字符串a转化为一个固定长度的字符串b,然后用b这个字符串取代表之前的a。经过哈希转换后,无法通过b还原出原来的a。
哈希算法在文件校验、数字签名以及鉴权协议都有很好的应用。哈希算法是一种非常高效的算法,所以使用非常频繁。
2、简单的判断一致性方法
两个文件是不是相同?可能的办法有:(1)比较文件大小,如果不一致,则说明是不同的文件。(2)看文件的内容。(3)查看文件的详细信息。以上是属于低级的方法。
一个靠谱的办法就是使用 MD5,它是一种被广泛使用的哈希函数。如果你从网站上下载了一个文件,自己运算得出的MD5 与网站公布的 MD5 一致,则表示这个文件没有被篡改过。
3、区块链如何保持数据的一致性——默克树
如图所示为区块的结构,非常重要务必掌握。
第三行的默克树的根值,正是一个哈希值,区块链技术就是利用这个哈希值来判断区块的数据是否被篡改过。
然而每个区块可能包含很多个交易,其内容就会非常多,对整体进行哈希运算,效率是非常低下的。所以才有了默克尔树,即默克尔哈希树。它通过对每一个叶子节点进行哈希计算,并不断往上递归,最后构建成一个树形结构。
优点:不用保存每一个交易的哈希值,而是将所有的交易构建成这样一个默克树,以树的根节点的哈希值作为所有交易内容的一个映射,存放于区块的头部结构中。在保证数据完整性,防止被篡改的同时,减少了运算量,提高了效率。一旦被篡改,还能进行快速定位。
上图可以感受一下。更多内容可以参见《精通比特币》第七章区块链
大体意思明白了,详细细节待后续学习^_^
吉祥
20170910