什么是默克尔树?默克尔树在区块链中扮演怎样的角色?
展开
仅需 30 秒,即可快速掌握文章内容并判断市场情绪!
默克尔树是计算机科学应用中用于数据验证和同步的一种数据结构。默克尔树还用于更安全高效地实现比特币及其他加密货币的区块链数据加密。
在加密货币领域,默克尔树数据库用于安全划分区块链数据,确保数据未丢失、损坏或遭到篡改。这种数据管理方式让人们能够直接验证特定交易,而无需下载数 TB 大小的整个区块链。通过这种方式,区块链能够以安全可靠的加密机制运行。
由于中央交易所 (CEX) 巨头 FTX 的垮台,许多 CEX 已建立并实施默克尔树作为准备金证明 (PoR),以确保用户资金安全。本文将探讨什么是默克尔树、默克尔树在区块链中扮演的角色,以及用户可如何使用默克尔树验证其资金。
默克尔树最早由谁提出?
默克尔树最早由计算机科学家 Ralph Merkle 在他 1987 年发表的论文《A Digital Signature Based on a Conventional Encryption Function》中提出,这位科学家因其在公钥加密领域的成就而闻名于世。加密哈希算法最早也是由 Merkle 提出的。
什么是默克尔树?
默克尔树是一种基于哈希值的数学数据结构,可将所有交易的摘要编译到一个区块中,以便通过去中心化方式快速检查数据准确性。鉴于其强大功能,默克尔树广泛用于安全有效地加密区块链数据。
由于 P2P 网络需要在用户间共享信息,还需要独立验证信息,因此经常会用到默克尔树。下面进一步了解一下默克尔树及其运作原理。
默克尔树的结构
默克尔树也称为哈希树,具有二叉树结构,底行交易数据的哈希值称为“叶节点”,中间哈希值称为“非叶节点”,顶部哈希值称为“根”。尽管多数哈希树均采用二元实施方式(即每个节点有两个子节点),有时也可具有多个子节点。
就默克尔树的结构而言,所有交易均成对分组。每一对均有一个经过计算的哈希值,直接存储在父节点中。这些节点同样成对分组,随后其哈希值存储在上一层级中。这一流程不断重复,直到达到默克尔树根节点。
下面来了解一下每个节点:
叶节点
区块中每笔加密货币交易的哈希值,也被称为交易 ID (TXID)。在区块浏览工具中搜索交易时,您会看到交易哈希值。
非叶节点
然后,为在叶节点上方创建一层非叶节点,这些叶节点会哈希成对。这些节点被称为非叶节点的原因是,与叶节点相比,前者仅仅存储所表示的两个叶节点的哈希值,而不包含交易 ID(或其哈希值)。因此,非叶节点层中的哈希(或节点)数是其下方叶节点层中的一半。随着层级不断上升,这些非叶节点层继续哈希成对,因此每一层的节点数都会减半。最后一层非叶节点将显示两个节点,即默克尔树根节点,也是默克尔树最后一次进行哈希的位置。
默克尔树根节点
对于比特币,所有交易的哈希值都组合成为一个哈希值,并存储在区块头中,而这就是默克尔树根节点,也称为根哈希值。作为默克尔树的基础,叶节点(交易 ID/哈希值)可通过默克尔树根节点进行验证。在加密货币领域中使用时,默克尔树根节点可确保数据块未经篡改或损害,且保持完整。
默克尔树采用二叉树结构,这意味着不同叶节点的总数必须为偶数,才能确保树的结构正确无误。如果叶节点数量为奇数,则前一个哈希值会被复制,进而确保节点数为偶数。
默克尔树的运作原理
默克尔树的本质设计是将大量数据分解为小得多的区块,从而确保所有交易都能得到及时验证。该树通过创建一组特定交易的小指纹来总结每笔交易,使用户能够更轻松地验证区块中交易的可用性。
默克尔树的形成方式是将多对节点不断进行哈希,直到最后只剩下一个哈希值,也就是默克尔树根节点。默克尔树从底部开始一层层构建而成,其中每笔交易均包含哈希值。每个叶节点都是一个数据哈希值。而非叶节点则是对之前哈希值进行的哈希。
假设一颗默克尔树由四笔交易组成,分别是 D0、D1、D2 和 D3。每笔交易先经过哈希,然后其哈希值直接存储在叶节点中。此时,就产生了哈希值 N0、N1、N2 和 N3。随后将对哈希值 N0 和 N1 进行哈希,产生哈希值 N4,在父节点中显示叶节点对的摘要信息。对哈希值 N2 和哈希值 N3 进行哈希,就产生哈希值 N5。哈希值 N4 和哈希值 N5 再次进行哈希,最后产生默克尔树根节点。
上述流程可用于规模庞大的数据集。默克尔树根节点用于显示特定交易中所表示数据的摘要信息,相关数据均直接存储在区块头中。这一方法可确保数据完整性得到妥善保护。如果交易中的某条信息在某个时间节点发生变化,则默克尔树根节点将自动随之改变。
默克尔树的优势
区块链技术和加密货币平台使用默克尔树验证交易可实现诸多优势,例如高效验证和轻松检测篡改行为。
高效数据验证流程
利用默克尔树可即时验证交易完整性。鉴于独特的数据结构,整个验证流程几乎不耗费什么费用,所需的算力也大幅减少。
由于区块链通常由数十万个区块组成,其中每个区块可包含高达数千笔交易,因此交易验证会带来两大挑战:内存空间和算力。如果区块链中没有默克尔树这一概念,那么要确保区块链中发生过的每一笔交易都能完整记录下来,则需要对网络中的每一个节点进行验证。在验证每一笔交易时,都需要逐行对比节点中的每个条目,才能确保其记录与网络记录完全一致。如果两份记录间存在差异,网络安全就会遭到破坏。因此,要对比两份记录,确保未发生任何变化,用于验证数据的计算机就需要更强大的处理能力。
而默克尔树则大幅减少了为满足验证需求手头必须具有的数据量,因而提供了另一种解决方案。默克尔树会对账本中的每个条目进行哈希处理,将数据本身与支持数据的证据进行有效区分。您可以使用默克尔树根节点检查 TXID,而无需了解区块中的每一个 TXID。默克尔树可展示数据集中存在所需内容,而无需下载整个数据集。因此,验证交易时需要的算力也就大幅减少。
更快处理速度
由于区块中的交易分布在不同验证者中,每位验证者都在同时处理不同交易。与每笔交易依次通过验证的方法相比,同时验证的方法要高效得多。
使用加密货币钱包
简单支付验证 (SPV) 可帮助您确认交易,而无需下载整个区块或区块链,这一技术也是因为默克尔树而成为可能。同时也催生了轻客户端节点的使用,也就是我们熟知的加密货币钱包,用户可使用钱包收发交易。
检测篡改行为
哈希结构让矿工能够轻松辨别交易是否经过篡改。
系统使用默克尔树根节点为每一个区块生成独特的哈希值。区块链中的区块与下一个区块关联时,会加入前一个区块的哈希值。只要交易发生修改,任何交易的哈希值都会发生变化。这一变化会逐层影响到默克尔树根节点并修改其数值,因此区块也会变得无效。这一变化会导致下一区块的哈希值发生变化,使得区块链剩余部分变得无效。由此,默克尔树就创建了区块交易不可更改的记录。
默克尔树还可以预防双花问题。如果有人试图双花自己的数字货币,该笔交易会生成一个哈希值。如果该哈希值与区块链上显示的现有记录相符,这笔交易就会遭拒。
默克尔树为什么对区块链行业至关重要?
默克尔树对区块链技术而言至关重要,这是因为默克尔树可实现快速便捷的验证,而其他技术无法做到这一点。默克尔树可去除不必要的数据,将剩余数据转变为哈希值,让开发者能够压缩规模庞大的数据集。默克尔树提供的不同功能包括:
- 超轻结构
- 有效扩容
- 节省算力
- 可验证特定区块中是否包括特定交易
- 基本支付身份验证
默克尔树准备金证明 (PoR)
正如本文开头提到的,FTX 暴雷后,用户对 CEX 是否真正确保其资金安全感到担忧。为此,多家 CEX 纷纷着手开发了默克尔树准备金证明机制。在这一部分中,我们将深入了解默克尔树证明,以及用户可如何验证自己的资金。
默克尔树证明
默克尔树证明是默克尔树的一部分,而不是默克尔树本身,并表示为数组或序列(下图中的橙色部分所示)。
平台每一位用户的所有叶节点和余额信息均以图中最后一层的节点表示。假设图中的粉色用户表示证明的接收方,我们就逐层提取图中橙色部分的信息,然后按层级顺序向用户显示证明文档。需要注意的是,默克尔树证明由两个主要部分组成。
- 用户的直接父节点(即 B 和 D)并未提取。
- 提供给用户的是根节点,即默克尔树根节点。
假设本例中共有 1000 万用户,那么默克尔树高度的计算公式为 Log2(10,000,000) = 23.2534966642,最后得出默克尔树的高度为 24 层。因此,图中有意未提供给用户的节点数为 24 - 2 = 22。
默克尔树采用完整的二叉树结构,因此我们已知左右节点,即可计算出关于其父节点的所有信息。余额数据和哈希数据共同构成这一完整信息。
- 余额数据:父节点可分为左右节点,且只能这样划分。
- 哈希数据:每个节点仅显示余额数据、树层级数据和子节点哈希数据(每个节点保留下方左右节点的摘要数据)。
验证默克尔树时,只需提取 B 和 D 的摘要数据,并验证以下两点:
- 余额符合分叉原则;且
- 哈希值合法。
利用哈希摘要函数,默克尔树可帮助用户判断自己是否是整个默克尔树的一部分,而无需了解图中每个紫色节点。每个默克尔树证明仅适用于那一个用户。例如,一个 24 层级的默克尔树需要 23 个要素阵列来验证用户的余额信息,而该阵列只能证明该用户的余额证明准确无误。
只要用户未获得超过半数的账户,就无法根据自己这部分的信息重建整个默克尔树。因此,默克尔树既可以保护用户隐私,也能帮助平台避免泄露关于整体资产的信息。
验证自己的 Bybit 账户
用户可通过 2 种方式验证自己的 Bybit 账户,检查资金的有效性。
平台验证工具
全网率先推出的验证方式,也是目前唯一的 Bybit 平台验证方式,可在 Bybit 平台上以直观的图表方式显示默克尔树验证的节点衍生流程。
自验证工具
Bybit 的默克尔树生成源代码和验证代码均已在 GitHub 上公开提供,可帮助熟悉编程的用户自行验证。默克尔树验证涉及大量用户计算,通常使用大数据和 Java 实现。
*开源 Java 代码是指代码面向用户公开提供,未隐瞒任何信息。
Bybit 已面向专业用户提供开源代码,方便他们自行验证默克尔树证明文件,只需点击 Copy Data 按钮,将代码从准备金证明页面复制粘贴到系统的“粘性”版本,将文件命名为 myProof.json 并保存到本地即可。
默克尔树在区块链中的应用
默克尔树和默克尔树根节点结构已在许多不同的区块链和加密货币平台广泛采用。下面列举三个应用领域。
比特币
比特币以多种方式使用默克尔树,使其成为比特币平台不可或缺的组成部分。事实上,每个比特币区块头都包含默克尔树。对于区块中可用的每笔交易,其哈希值都包含在区块头中。就比特币而言,默克尔树根节点不仅用于验证,在挖矿中同样扮演着重要角色。
挖矿
比特币区块头中包含元数据和交易列表,该列表规模通常比区块头本身更大。矿工对数据进行哈希,确保其输出数据遵循特定条件,这也是验证区块时的必要条件。矿工可能要进行数万亿次尝试,才能找到有效的区块。每一次尝试都要更改区块头中的一个数字。尽管区块中可能存在数千笔交易,但每一笔都必须经过哈希处理。
利用默克尔树根节点,矿工可以更高效地完成这一过程。挖矿流程开始后,只需将交易转换为默克尔树,然后将根节点包含在区块头中即可。此时,矿工只需对区块头进行哈希处理,而无需处理整个区块。
验证
默克尔树在比特币中的另一个应用领域就是验证,这一方式着眼于轻客户端。当节点在资源有限的弱设备上运行时,用户无法下载单个区块中的每笔交易并对其进行哈希处理。但用户可以请求生成默克尔树证明,用于确认某笔交易的确出现在该区块中。通过减少验证过程中需要执行的哈希次数,无需过多算力也能实现验证。
以太坊
以太坊基于改良版的默克尔树,因此也被称为默克尔帕特里夏树。以太坊区块链中的每个区块都包含三棵默克尔树,而不是一棵二叉树(也就是比特币区块的结构方式)。三个默克尔树根节点各司其职。
第一个根节点是每笔交易的根节点。第二个根节点显示交易状态。第三个根节点显示交易收据。用户可通过默克尔树判断某笔交易是否确实存在于特定区块中,并验证其账户余额。
Hyperledger Fabric
Hyperledger Fabric 是一个区块链平台,该平台使用默克尔树以哈希形式计算区块数据。哈希值可确认默克尔树的宽度。Hyperledger Fabric 平台上的默克尔树与比特币平台采用相同的运作原理。
结语
对于希望简化交易验证流程,使其更加高效的加密货币平台而言,默克尔树非常实用。如果没有默克尔树结构,验证流程可能会耗费大量时间,因为整个网络的数据都需要传输过来进行验证。使用默克尔树的平台可从更低的带宽和算力要求中获益良多。