merkle树,merkle是发明人的姓名,因为是树形结构,所以叫merkle树。
其实merkle有另外一个名字Hash tree,它的结构如下。
Hash tree的用途
1.校验文档正确性
从网上下载一个文档如何验证文档是否和原文档相同?
假设文档是DataA+DataB+DataC+DataD
原文档Hash tree树根Hash是hashABCD
在本机重新对下载的文档(DataA+DataB+DataC+DataD)生成Hash树,对比新生成的树根与原文档树根。
2.快速定位错误
原文档与本机文档不同,树根hashABCD必然不同,向下递归,如果hashAB不同,必定是A,B数据块有出入。
3.快速校验部分数据是否在原始数据中
小明告诉我DataC在文档中,因为原始文档特别大,我电脑磁盘不能存放,我怎么快速验证DataC在不在原始文档中?
我从网上下载DataC->hashC/hashD->hashCD/hashAB->hashABCD数据,校验下载的正确与否以及DataC是不是小明口中的DataC。
比特币轻钱包中的SPV也是应用了这一原理,使得可以再不下载完整区块数据,还可以验证交易的有效性。