关于区块链:随聊区块链三

23次阅读

共计 1449 个字符,预计需要花费 4 分钟才能阅读完成。

区块链中的默克尔树

上节咱们提到区块的头信息中是蕴含了一个默克尔根的字段
区块链的头信息中为什么要存在这个字段呢?应用默克尔树这种数据结构是为什么呢?接下来咱们就来解释一下。

默克尔树也常被称为二叉哈希树。是由默克尔在 1979 年时候提出来的,默克尔树经常作用于疾速的比拟数据及测验某个元素是否存在的业务场景中。之所以默克尔树善于做这几个场景,和它本身的构造个性密不可分。咱们来看下它的数据结构

这个就是存储在区块头信息中的默克尔根的数据结构

咱们看到最上面的数据 Tx0、Tx1、Tx2、Tx3 的是区块链上的交易数据,首先他们会被哈希。在比特币中,哈希算法应用的是 sha256, 并且哈希是会做两次的,是双重哈希。
那为什么要用双重哈希?这个之后能够独自开展钻研下,目前比拟牢靠的说法,比特币网络应用双重哈希的算法,其实并不是为了防止哈希的生日攻打,比拟有说服力的剖析是因为双重哈希是用来进攻长度扩大攻打的,

通过对交易数据的哈希,咱们失去了 hash01 和 hash23,这个哈希值的产生是通过连贯两个子节点的值哈希后失去的

比方 hash01 = sha256(sha256(hash0+hash1))

咱们通过这种形式能够生成任何层级的默克尔树,最初的哈希值就是一个根节点,咱们称为默克尔根
咱们能够通过默克根很不便的比照两组数据是否雷同,同时如果树中关联的数据有变更,那么咱们通过哈希值也能很快定位到批改的数据。

还有重要的一个作用就是领有“零常识证实”的能力。什么是“零常识证实”,依据 wiki 的解释零常识证实是一方(证实者)向另一方(测验者)证实某命题的办法,特点是过程中除“该命题为真”之事外,不泄露任何资讯。回到咱们区块链的网络上,如果咱们须要验证 TX0 是否存在,咱们除了 TX0 的自身信息以外,咱们只须要获取 Hash1,Hash23 和 Root hash 就能证实 TX0 是否存在,咱们在证实的过程中并没有依赖其余的交易信息数据。

默克尔树在区块链中提供了所有交易的信息摘要

默克尔树的利用 - 简化了领取的验证

默克尔树在比特币网络中的一大利用就是简化了领取的验证。特币中的节点一类是齐全节点,它保护着残缺的区块链信息。而有些节点是轻量化的,并不会保护残缺的区块链信息,它们是轻量级的节点,这类节点在验证交易的时候就会应用到简化领取验证(SPV)

那默克尔树和这个 SPV 有什么关系?咱们来看下 SPV 的大抵过程能够分为上面几步:
第一步:咱们获取到一个须要验证的交易哈希,其中交易相干的区块链音讯头和认证门路,节点是通过相似于订阅的 merkleblock 音讯获取到,merkleblock 简略的说就是 SPV 通过布隆过滤器接管了本身感兴趣地址的相干交易的音讯

第二步:咱们获取一个最长区块链的区块头信息,这个最长链的区块信息能够向其余节点询问以保障获取了最长的区块信息

第三步:咱们获取到交易的认证门路,认证门路就是通过 X 个节点造成一条从交易到根的门路。这个 X 的确认公式就是 log2(T) = X,T 就是对应就是交易的数量。比方咱们领有 16 笔交易,那么通过 log2(16)=4 只须要 4 个节点就能确认这笔交易。这 4 个节点就形成了认证门路。相较于全节点数据,这个数据量要小的多

第四步:计算默克尔根证实交易的确蕴含在这个区块中,再确认这个区块是否在最长区块链中,以此来验证交易的有效性

所以基于默克尔树的验证,大大减少了数据的依赖以及逻辑的复杂度,升高了存储的老本,但同时因为短少全副信息的正本,也存在连贯虚伪节点被歹意攻打的危险,便捷与危险往往是一把双刃剑

正文完
 0