哈希树也被称为默克尔树。它是一种树形数据结构,其中每个叶子节点都标有数据块的哈希值,而每个非叶子节点都标有其子节点标签的哈希值。本文将重点详细讨论以下主题:
- 什么是密码学哈希?
- 什么是哈希指针?
- 区块链结构
- 区块结构
- 默克尔树结构
- 默克尔树是如何工作的?
- 为什么默克尔树对区块链很重要?
- 成员证明
- 默克尔证明
- 简单支付验证 (SPV)
- 默克尔树的优势
让我们详细讨论这些主题中的每一个。
什么是密码学哈希?
密码学哈希是一个函数,它为可变长度的输入输出一个固定大小的摘要。哈希函数是重要的密码学原语,并在区块链中得到了广泛的应用。例如,SHA-256 就是一个哈希函数,对于任何可变位长的输入,其输出将始终是一个 256 位的哈希。
- 从上面的图片可以清楚地看出,即使输入句子中的字母发生最轻微的变化,也会极大地改变所得到的哈希值。因此,哈希可以用来验证完整性。
- 假设有一个包含重要数据的文本文件。将文本文件的内容传递给哈希函数,然后将哈希值存储在手机中。一名黑客设法打开了文本文件并更改了数据。
- 现在当您再次打开文件时,您可以再次计算哈希值,并将此哈希值与之前存储在手机上的哈希值进行比较。
- 显然,这两个哈希值不匹配,因此文件已被篡改。
什么是哈希指针?
常规指针存储数据的内存地址。使用这个指针,可以很容易地访问数据。另一方面,哈希指针是指向数据存储位置的指针,并且该指针还存储了数据的密码学哈希值。因此,哈希指针指向数据,同时也允许我们验证数据。哈希指针可用于构建各种数据结构,例如区块链和默克尔树。
区块链结构
区块链是两种基于哈希的数据结构的高效结合——
- 链表: 这是区块链本身的结构,它是由哈希指针组成的链表。常规链表由节点组成。每个节点有 2 个部分——数据和指针。指针指向下一个节点。在区块链中,只需用哈希指针替换常规指针即可。
- 默克尔树: 默克尔树是由哈希指针形成的二叉树,以其创造者 Ralph Merkle 的名字命名。
区块结构
1. 区块头: 头数据包含区块的元数据,即关于区块本身的信息。区块头的内容包括——
- 前一个区块头的哈希。
- 当前区块的哈希。
- 时间戳。
- 密码学随机数。
- 默克尔根。
2. 默克尔树: 默克尔树是由哈希指针形成的二叉树,以其创造者 Ralph Merkle 的名字命名。
- 如前所述,每个区块都应该容纳一定数量的交易。现在问题出现了,如何在一个区块中存储这些交易?一种方法可以形成一个基于哈希指针的交易链表,并将这个完整的链表存储在一个区块中。然而,当我们结合实际情况来看待这种方法时,存储一个包含数百个交易的巨大列表似乎并不切实际。如果需要确定某个特定交易是否属于某个区块怎么办?那么我们将不得不逐个遍历区块,并在每个区块内遍历交易的链表。
- 这是一个巨大的开销,并且会降低区块链的效率。这就是默克尔树发挥作用的地方。默克尔树是包含在区块中的所有交易的逐块树。它允许我们拥有所有交易的哈希/摘要,并以时间高效的方式提供成员证明。
- 回顾一下,区块链是区块的基于哈希的链表,其中每个区块由头和交易组成。交易以树状方式排列,称为默克尔树。