本文分析了Verkle树在以太坊上海分叉前后约20万个历史区块中的性能表现,重点关注了不同类型的Witness结构对大小的影响,并评估了Pedersen哈希与SHA256哈希在执行性能上的差异。研究结果表明,Type 3 Witness提供了更好的压缩效果,且Pedersen哈希的性能优于SHA256哈希,但考虑到量子抗性问题,建议重新评估Pedersen哈希的使用。
跳转到内容](https://efdn.notion.site/Verkle-measurements-123d9895554180e6ac17eddf76c692b6#main)
这些数据是通过回放上海升级前后约 20 万个历史区块收集的。虽然它们不能完美地展现 EIP-4762 激活后的执行行为,但仍然可以很好地指示预期情况以及规范应如何演变。
本文档仍在编写中,并将随着更多数据的收集和处理而更新。
为了确定 见证(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 型具有更好的平均大小和最小大小。
通过回放过去的区块,我们生成了 见证(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 |
WIP
WIP
为了估计 Pedersen 密钥哈希的性能影响,以下是使用 Pedersen 哈希与 sha256 重放 20 万个区块所需时间的比较:
在 sha256 运行结束时,即 >20 万个区块之后,链领先 75072 个区块。这表示每天相对于 sha256 损失 3 个小时。这快了 >12%。
再加上 Pedersen 哈希不具备抗量子性,因此重新考虑使用 Pedersen 哈希计算树似乎是个好主意。
- 原文链接: efdn.notion.site/123d989...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!