Merkle 树路径是如何生成的?

Posted

技术标签:

【中文标题】Merkle 树路径是如何生成的?【英文标题】:How is a Merkle tree path generated? 【发布时间】:2018-08-07 07:06:48 【问题描述】:

我试图了解 Merkle 树在 SPV 和区块链技术中的许多其他场景中是如何工作的,但我无法理解这个问题:在验证交易时如何生成 Merkle 路径。

在下图中,假设我要验证交易2,我了解301、4567 和根是必需的,但是,我想知道这个默克尔路径是如何生成的。

当事务2被交给服务器/节点时,服务器/节点如何知道返回哪个路径来验证2?如果服务器已经知道这个路径,为什么服务器不验证它,为什么还要返回这个路径?

谢谢,

(来源:codeproject.com)

【问题讨论】:

我想我得到了答案。底部的交易按 txid 排序,计算整个交易区块的哈希值。现在可以关闭了。 回答你自己的问题,让其他人看到你在这里学到了什么。 @AryanFirouzyan 当然。 【参考方案1】:

上图中令我困惑的部分是,1,2,...,8 用于表示交易,但是这种过度简化的表示让我认为交易只有一个组件,因此可以排序和验证发生在一个动作中,即被排序正在被验证。

事实上,下面的两张图显示了一条交易数据的详细信息,其中 txid 作为索引,如上面的 1、2、...、8,还有更多交易而不是单个 txid。

在 Merkle 树中,检查交易 ID (txid) 以将传入交易放置在 Merkle 树底部的正确位置,并将 Merkle 路径返回给 SPV 以检查内容。

服务器返回 Merkle 路径比检查交易更容易减少工作量。因此,整个过程顺利进行。

【讨论】:

以上是关于Merkle 树路径是如何生成的?的主要内容,如果未能解决你的问题,请参考以下文章

从 sCrypt 智能合约中访问区块链数据

get value 函数如何在稀疏 merkle 树中工作?

如何将 JSON 树结构转换/转换为 merkle 树

Merkle树的生成和SPV验证信息的策略

使用最小生成树查找从 A 到 B 的路径 - C/C++

用Merkle-Patricia树实现交易的实时审计