以太坊 - Verkle树测量

  • efdn__
  • 发布于 2025-05-20 18:13
  • 阅读 129

本文分析了Verkle树在以太坊上海分叉前后约20万个历史区块中的性能表现,重点关注了不同类型的Witness结构对大小的影响,并评估了Pedersen哈希与SHA256哈希在执行性能上的差异。研究结果表明,Type 3 Witness提供了更好的压缩效果,且Pedersen哈希的性能优于SHA256哈希,但考虑到量子抗性问题,建议重新评估Pedersen哈希的使用。

跳转到内容](https://efdn.notion.site/Verkle-measurements-123d9895554180e6ac17eddf76c692b6#main)

🌡️ 页面图标🌡️ 页面图标

Verkle 测量

背景

这些数据是通过回放上海升级前后约 20 万个历史区块收集的。虽然它们不能完美地展现 EIP-4762 激活后的执行行为,但仍然可以很好地指示预期情况以及规范应如何演变。

本文档仍在编写中,并将随着更多数据的收集和处理而更新。

见证(Witnesses)

大小

为了确定 见证(witness) 的最佳结构,我们进行了研究。我们尝试了三种方法:

第一种方法,如 共识规范的当前版本 中所指定的,称为 0 型。这种方法使用 SSZ 类型

Optional[T]

,该类型尚未正式包含在规范中。

规范的第一个变体,其中 prestate 值被分组到它们自己的列表中,poststate 值也被分组到它们自己的列表中。这被称为 1 型。

classSuffixStateDiffs(Container):
  suffixes:bytes # None 表示当前不存在
  current_values: List[bytes] # None 表示值未更新
  new_values: List[bytes]

1 型序列化容器

规范的第二个变体,其中更新、插入和读取被分组到它们自己单独的列表中。这些列表中每一个的 后缀(suffixes)也被分组为它们自己的字节列表。这被称为 2 型。

classSuffixStateDiffs(Container):
  updated_suffixes:bytes
  updated_currents: List[Bytes32]
  updated_news: List[Bytes32]

  inserted_suffixes:bytes
  inserted_news: List[Bytes32]

  read_suffixes:bytes
  read_currents: List[Bytes32]

  missing_suffixes:bytes

2 型序列化容器

最后一个变体,其中更新、读取、插入和不存在证明与它们的 后缀(suffixes)一起,被分组到它们自己的列表中。这被称为 3 型。

classUpdateDiff(Container):
  suffix: byte
  current: Bytes32
  new: Bytes32

classReadDiff(Container):
  suffix: byte
  current: Bytes32

classInsertDiff(Container):
  suffix: byte
  new: Bytes32

classMissingDiff(Container):
  suffix byte

classStemStateDiff(Container):
  stem: Bytes31

  updates: List[UpdateDiff]
  reads: List[ReadStateDiff]
  insert: List[InsertStateDiff]# TODO: 检查这是否与字节一样编码
  missing: List[MissingStateDiff]

3 型序列化容器

以下是我们回放 20 万个区块数据后的发现:

可以看出,该规范比其他类型效率低得多。这是由于存储

Optional[T]

的效率低下。因此,我们没有在其余分析中包括这种方法。

当仅考虑后转换 见证(witnesses) 时,这是发现的:

下表 summarizing 了每种类型的最大和最小大小:

名称 最小 (KB) 最大 (KB)
1 型 425 1285
2 型 383 928
3 型 380 928

虽然 2 型和 3 型非常接近,但可以看出 3 型具有更好的平均大小和最小大小。

见证(witness) 大小细分(3 型)

通过回放过去的区块,我们生成了 见证(witnesses),并可以提供 3 型 见证(witnesses) 的以下大小细分。这是在约 13.4 万个区块上平均得出的,因为跳过了转换区块。

组件 平均大小 % 最小大小 % 最大大小 %
密钥 13 9 49
pre-values 78 7 85
post-values 0.1 0 47
verkle 证明 12 8 77

总结

主要的总结是:

3 型 见证(witnesses) 提供了很大的压缩

post-values 的用途值得怀疑,并且在没有区块执行的情况下无法验证。虽然它们平均不占用太多空间,但我们建议从 见证(witness) 中删除它们。

数据库

WIP

查看完全转换的数据库(转换 + 重放约 13.4 万个区块),我们发现叶子深度可以分解为:

深度 计数 百分比
4 745822024 80.6
5 178484052 19.3
6 775718 0.1
7 2880 0
8 10 0

Gas 使用量

WIP

执行性能

WIP

树密钥哈希的影响

为了估计 Pedersen 密钥哈希的性能影响,以下是使用 Pedersen 哈希与 sha256 重放 20 万个区块所需时间的比较:

在 sha256 运行结束时,即 >20 万个区块之后,链领先 75072 个区块。这表示每天相对于 sha256 损失 3 个小时。这快了 >12%。

再加上 Pedersen 哈希不具备抗量子性,因此重新考虑使用 Pedersen 哈希计算树似乎是个好主意。

  • 原文链接: efdn.notion.site/123d989...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
efdn__
efdn__
江湖只有他的大名,没有他的介绍。