【发布时间】: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) 的数据类型是什么?细绳?可能是哈希是由特定块中的引用构成的。这些值不是指针,而是在特定区域重叠以帮助找到下一个。
标签: ethereum merkle-tree