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

Posted

技术标签:

【中文标题】get value 函数如何在稀疏 merkle 树中工作?【英文标题】:How the get value function works in sparse merkle trees? 【发布时间】:2021-09-02 12:24:21 【问题描述】:

我刚刚开始阅读有关稀疏默克尔树的内容,并且遇到了一个函数(获取值),该函数用于查找指定键的值。我在互联网上找不到可以解释 get value 函数如何工作的解释。

我的理解是每个节点都是 256 位的,所以可以有 2^256 个叶子节点并且键被索引。所以我们从根开始,根据天气选择左节点或右节点,位为 0 或 1,但我无法理解 v = db.get(v)[32:] 语句。它如何引导我获得所提供密钥的价值?

def get(db, root, key):
    v = root
    path = key_to_path(key)
    for i in range(256):
        if (path >> 255) & 1:
            v = db.get(v)[32:]
        else:
            v = db.get(v)[:32]
        path <<= 1
    return v

【问题讨论】:

[32:] 是 32 之后的 python 切片。 [:32] 是之前所有的 python 切片。如果密码匹配,您就知道它在树的那一侧。 我知道它是 python 切片,但为什么是 32? 32 是字节数。它在这里有什么关系?这是我的疑问。 db.get(v) 的数据类型是什么?细绳?可能是哈希是由特定块中的引用构成的。这些值不是指针,而是在特定区域重叠以帮助找到下一个。 【参考方案1】:

“Merkle 树 [21] 是一种二叉树,它结合了密码哈希的使用 职能。一个或多个属性被插入到叶子中,并且每个节点 派生一个摘要,该摘要递归地依赖于其子树中的所有属性。 也就是说,叶子计算自己属性的哈希值,父节点推导出 他们孩子的摘要从左到右连接的哈希。”

这是来自“https://eprint.iacr.org/2016/683.pdf”的引用

每个散列都有其所有相关散列的路线图。

【讨论】:

以上是关于get value 函数如何在稀疏 merkle 树中工作?的主要内容,如果未能解决你的问题,请参考以下文章

第二十个知识点:Merkle-Damgaard hash函数如何构造

比较两棵 Merkle 树的时间复杂度是多少?

Merkle Patricia Tree (MPT) 树详解

Merkle 树路径是如何生成的?

Merkle Tree算法详解

如何在犰狳中更新稀疏矩阵的值