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函数如何构造