本文分析了将Poseidon哈希函数作为EVM预编译合约的计算成本。EIP-5988提议将Poseidon哈希函数添加为预编译合约,但其在实施前还需要更多的论证。本文提出了一个项目,旨在设计和实施基准测试,以评估Poseidon在不同轮常量、安全级别和S盒下的运行情况,并与现有的预编译哈希函数进行比较,同时用Solidity实现智能合约以进行gas成本估算。
以太坊预编译合约构建到EVM中,并在客户端执行以获得高效率。通常,预编译状态保留给被认为具有高度重要性和用途的子程序。目前,总共有九个预编译合约:
ecRecover
(ECDSA公钥恢复函数),SHA2-256
(哈希函数),RIPEMD-160
(哈希函数),identity
(恒等函数),modexp
(模幂运算),ecAdd
(椭圆曲线 alt_bn128
上的点加法),ecMul
(椭圆曲线 alt_bn128
上的标量乘法),ecPairing
(椭圆曲线 alt_bn128
上群的双线性函数),blake2f
(哈希算法 BLAKE2
中的压缩函数 F
).从上面的列表中我们可以看到,有两个哈希函数,即 SHA2-256
和 RIPEMD-160
,以及压缩函数 blake2f
,它用于哈希函数 BLAKE2
中。因此,我们有三个预编译合约仅用于哈希。 显然,拥有一组良好的哈希函数非常重要。
EIP-5988 是最近的一个EIP,提议将哈希函数 Poseidon 作为预编译合约添加。 Poseidon 是一种相对较新的哈希函数,基于 sponge construction,它使用遵循 Hades strategy 构建的置换。 先前的研究 (Grassi et al. 2021) 表明,Poseidon 显着减少了算术电路的大小,从而减少了 R1CS 约束的数量,这可以改进零知识协议的证明者方面。 此外,Poseidon 被证明与所有主要的零知识协议兼容,如 zkSNARKs、zkSTARKs、bulletproofs 等。 因此,添加 Poseidon 作为预编译的提案可以帮助加速当前 L2 的 zk-Rollups 解决方案以及零知识证明系统的许多其他潜在应用。
在考虑实施之前,EIP-5988 仍然需要更多的理由。 一些需要解决的问题包括例如包含哪些参数,如何定义轮常量,以及使用哪些 MDS 矩阵; 请参阅 ethereum-magicians 论坛中的讨论。
一个重要的问题是确定轮常数的计算成本,这直接影响哈希函数任何实现的效率。 对于预编译合约来说,按需计算轮常数可能很昂贵,并且选择一组轮常数可能会有利于某些应用,但对其他应用不利。
为了更好地理解 Poseidon 作为预编译的任何实现中涉及的计算成本,本项目建议设计并实现针对不同轮常数、安全级别和 S-box 值的运行 Poseidon 的基准测试。
例如,过去在讨论 EIP-152 时,对 blake2f
预编译的执行时间进行了基准测试,这有助于确定计算成本并估计预编译的 gas 成本。
因此,本项目的主要建议是为 Poseidon 哈希函数编写和执行基准测试,并了解它与其他预编译哈希函数相比如何。 这可能有助于支持添加 Poseidon 作为预编译。 此外,为了有一个 gas 成本的参考点,本项目还将使用 EIP-5988 的规范在 Solidity 中实现一个智能合约。
为了对 EIP-5988 做出明智的决定,本项目的主要目标是增加关于将 Poseidon 作为预编译合约运行的计算成本的实验证据。 这将允许估计客户端的执行时间,并为未来与 EIP-5988 相关的讨论提供参考文档。
为了实现上述目标,并在 EPF 项目结束前准备好具体结果,本项目提出以下步骤。
revm
中的实现,将 Poseidon 的 Rust 实现与预编译合约 SHA2-256
和 RIPEMD-160
进行比较。 此比较还将包括 Poseidon 的不同参数。同样重要的是要注意,在围绕 blake2f
预编译的 EIP-152 的讨论期间,也完成了类似的步骤。
选择 Rust 语言是为了与 SHA2-256
和 RIPEMD-160
的当前实现进行公平比较。 由于本项目将 Poseidon 视为预编译,因此需要将其与 EVM 当前使用的语言(例如 revm
)中的实现进行比较。 这样,来自 EVM 的 SHA2-256
和 RIPEMD-160
的实现可以在基准测试中重用。 使用当前客户端未使用的其他语言将需要预编译的新实现,这可能会导致项目延迟。 此外,由于 EIP-5988 有可能被纳入协议,因此任何基准测试都必须针对当前正在使用的具体预编译执行。
前面部分提出的方法将按照下面列出的时间表执行。
项目执行的主要挑战是 Poseidon 的 Rust 实现。 为本项目学习 Rust 以及缺乏使用该语言的经验可能会延迟本项目的任务。 此外,Solidity 合约将需要一些特殊的算法来处理大素数域上的算术。
Ignacio Kev
- 原文链接: github.com/eth-protocol-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!