轻松读懂 Merkle Trees

新手Jan 10, 2024
Merkle Trees可提供速度和可扩展性优势。本文探讨了它作为区块链中高效数据验证背后的秘密。
轻松读懂 Merkle Trees

Merkle Trees(Merkle Tree)是一种结构化数据的方法,可以极其快速有效地验证大量信息的准确性。每棵Merkle Trees都会生成一个数据字符串,称为默克尔根。通过默克尔根以及其他一些数据,任何计算机都可以有效地验证Merkle Trees中的所有其他条目。在区块链技术中,这些条目是交易标识号。

如果您有接触过区块链世界,您可能听说过“Merkle Trees”这个词。虽然Merkle Trees并不是一个已得到普遍理解的概念,但它们也不是非常复杂。这篇文章将以简单方式介绍了Merkle Trees,并帮助您了解它们是如何成就区块链技术的。

关于Merkle Trees

Merkle Trees的故事可追溯到1979年,与一个名叫拉尔夫·默克尔(Ralph Merkle)的人紧密相关。在斯坦福大学研究生院期间,默克尔写了一篇学术论文,名为《经过认证的数字签名A Certified Digital Signature)。在这篇文章中,默克尔描述了一种创建方法数字签名并建立了一种新的、极其有效的创建密码证明的方法。换句话说,他设计了一种验证数据的流程,使计算机能够比以前更快地完成工作。

默克尔将他的想法称为“树签名”或“树身份验证”。如今,这个想法更通用的名字是“Merkle Trees”,以发明者的名字命名。

毫不夸张地说,Merkle Trees彻底改变了密码学世界,进而彻底改变了加密计算机协议的运作方式。事实上,中本聪2008年的论文反复提到Merkle Trees,而比特币正是经过这一论文提出公布于世的。Merkle Trees在比特币协议中得到了广泛运用。

那么,Merkle Trees究竟是什么呢?让我们一起来了解它。

要了解Merkle Trees,首先要了解加密哈希函数的概念,这一点很重要。简单来说,哈希函数是不可逆的数学函数,它接受任意长度的输入(从一个字符到整套百科全书的文本)并产生固定长度的随机输出。由于输出看起来是随机的并且长度固定,因此攻击者不知道输入的是何种内容而创建了特定的输出。哈希函数也是确定性的,因此相同的输入将始终产生相同的输出。重要的是,哈希函数是不可逆的,因此绝对无法仅根据输出的知识来确定输入。

所有这些属性都使哈希函数能够创建特定输入的电子指纹。区块链网络使用哈希函数为每笔交易创建加密哈希(电子指纹)。交易的加密哈希值简称为交易 ID。对于几乎每个区块链协议来说,每个交易 ID 都是64个字符(256位)的字母数字数据字符串。

当您想到区块链通常由数十万个区块组成,且每个区块包含多达数千个交易时,您可以想象得到交易验证在计算上将是多么困难。因此,最好使用尽可能少的数据来处理和验证交易。这将最大限度地减少CPU处理时间,同时确保最高级别的安全性。

当然,这正是Merkle Trees的作用。简而言之,Merkle Trees采用大量交易 ID,以特定方式构建它们,并使用加密哈希函数派生出单个64个字符的字母数字字符串,该字符串充当整个数据体的电子指纹。

这串数据被称为默克尔根,非常重要,因为它允许任何计算机尽可能高效地快速验证特定交易是否发生在特定区块上。

什么是默克尔根?

Merkle Trees生成的单个256位字符串称为默克尔根。区块链中的每个区块都只有一个。而且,正如我们刚才提到的,默克尔根是一个极其重要的数据,因为它允许计算机以绝佳的速度和效率验证信息。

让我们进一步探讨:默克尔根是如何产生的?第一步,组织所有数据输入,这里的输入为事务 ID。根据设计,Merkle Trees始终将所有输入分组。如果输入为奇数个,则复制最后一个输入,然后与其自身配对。这对于写入区块链块上的所有交易 ID 都是如此。

例如,假设单个区块总共包含512笔交易。Merkle Trees首先将这512个交易 ID 分为256对。然后,这256对交易 ID 将经过数学过程(有时称为哈希函数或哈希算法),我们将获得256个新的64字符加密哈希值。

同样的过程再次进行。这256个新哈希值将配对并转换为128个哈希值。重复该过程,每次将哈希值数量减半,直到只剩下一个哈希值。这个单一的哈希值就是我们的默克尔根。

Merkle Trees简要示例

为了清楚地解释这一概念,让我们来看一个非常简单的Merkle Trees示例。想象一下,在一个特定的区块上执行了8笔交易。实际上,交易 ID 的长度为64个字符,但为了简单起见,我们假设它们只有8个字符长。为了让事情变得更简单,我们只使用数字(完全忽略字母)。

因此,在本例中,我们的八个交易ID将可以假设为:

  • 11111111
  • 22222222
  • 33333333
  • 44444444
  • 55555555
  • 66666666
  • 77777777
  • 88888888

现在我们假设将交易 ID 哈希在一起的方法是从组合的两个 ID 中分别取出第一个、第三个、第五个和第七个数字,然后将这些数字简单地推到一起形成一个新的8位代码。

当然,实际上,哈希算法背后的数学原理远比这复杂。但要了解这一基本原理,使用这个简单的演示就足够了。

这就是我们的Merkle Trees的过程:

请注意,沿着Merkle Trees每走一步,代码数量都会减少一半。我们从8个交易 ID 开始,经过3个步骤,最终得到一个代码——默克尔根。在这个例子中,我们的默克尔根是底部框中的代码:12345678。

Merkle 树的主要好处是它们可以非常快速地验证数据。如果我们想要验证单个交易 ID,我们不需要仔细检查区块上的每个交易。相反,我们只需要验证Merkle Trees的特定“分支”。

Merkle Trees的优势:效率和速度

假设我们想要验证当前示例中的交易 ID。假如 Bob 说他向 Alice 支付了一定金额的比特币,并告诉我们交易 ID 是 88888888。他还向我们发送了3个哈希值:77777777、55556666 和 11223344。这就是验证 Bob 向 Alice 付款需要发送或接收的所有信息。

这三个哈希值,以及相关交易 ID 和该特定区块的默克尔根,是验证 Bob 向 Alice 付款所需的唯一数据。这比验证整个Merkle Trees所需的数据要少得多。因此,验证过程对每个人来说都更快、更高效。

这是Merkle Trees的工作原理。我们已经有了该区块的默克尔根,所以 Bob 不需要将其发送给我们。他向我们发送了他的交易 ID 和我们上面列出的3个附加哈希值。他还发送了一些有关使用哈希值的顺序和位置的信息。现在,我们所要做的就是对 Bob 提供的数据集运行哈希算法。

我们首先使用交易 ID 88888888 对第一个代码 77777777 进行哈希处理,得到结果 77778888。Bob 没有向我们发送此代码,但他不需要这样做,因为我们使用与他相同的哈希算法。因此,我们得到了完全相同的结果。

然后,我们获取 Bob 发送给我们的第二个代码 55556666,并使用我们刚刚导出的新代码 77778888 对其进行哈希处理。当然,这会产生数字 55667788。

最后,我们将 Bob 给我们的第三个代码 11223344 与我们收到的其他新代码 55667788 进行哈希运算,最终得到正确的默克尔根:12345678。

请注意,我们只需要 Bob 的3个代码,并且只需运行哈希算法3次即可查看 Bob 的交易是否有效。这意味着我们的计算机完成的工作还还不及验证整个Merkle Trees所需工作的一半。原始的 Merkle Trees图有15个数字,哈希算法需要运行7次。但是,要验证 Bob 的交易,该树的一半以上是不需要的!

Merkle Trees简化了验证程序

这个过程足以验证Bob确实向Alice支付了一定数额的比特币,因为当我们将我们得出的数字与Bob发送给我们的其他代码一起哈希时,产生了我们已知的、就是这个特定区块的真实默克尔根。

Bob 无法伪造交易,因为这需要找到一个伪造的交易 ID 和一组额外的伪造代码,这些代码在通过哈希函数时会产生真正的默克尔根。这种情况发生的可能性极小,事实上我们可以自信地说这是不可能的。

在这个简单示例中,似乎没有显著节省多少算力。但是,当若您想想区块链中的区块可能包含数千笔交易时,就很容易看出Merkle Trees非常显著地提高效率的方式。

简而言之,这是Merkle Trees的主要优势。它允许计算机极其有效地验证信息,并且所需的数据比不使用Merkle Trees所需的数据少得多。

Merkle Trees也是 Komodo 平台解决区块链可扩展性问题的基本概念。Komodo 的扩展解决方案支持完整的区块链互操作性,并使 Komodo 能够比世界上任何其他支付处理服务更快地处理交易。目前,Komodo 的新扩展技术在测试环境中每秒处理达20,000多笔交易。

声明:

  1. 本文转载自[komodo],著作权归属原作者[Delton Rhodes],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及Gate.io的情况下不得复制、传播或抄袭经翻译文章。
Jetzt anfangen
Registrieren Sie sich und erhalten Sie einen
100
-Euro-Gutschein!
Benutzerkonto erstellen