news 2026/9/27 8:45:21

ZK-Rollup 的哈希参数各不相同,EVM 凭什么一个预编译接住?拆解 EIP-5988 Poseidon 预编译

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZK-Rollup 的哈希参数各不相同,EVM 凭什么一个预编译接住?拆解 EIP-5988 Poseidon 预编译

ZK-Rollup 的哈希参数各不相同,EVM 凭什么一个预编译接住?拆解 EIP-5988 Poseidon 预编译

【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs

EIP-5988 是 EIPs 仓库里的一个 Standards Track / Core 类提案,为 EVM 新增一个参数化的 Poseidon 算术哈希预编译,让各 ZK-Rollup 能在链上按自选参数完成哈希计算。这个提案 2022 年 11 月创建,当前状态为Stagnant。本文从输入编码、测试向量验证、MDS 矩阵安全判据三个切面拆解它的完整设计。

哈希不能一个尺寸通吃:Rollup 的参数分歧

以太坊走向 Rollup 中心化路线后,协议层需要为 L2 与 EVM 之间的高效通信提供基础设施,而 ZK-Rollup 对哈希函数有专门要求:它必须是证明系统能够高效处理的类型,否则链上验证证明的成本会失控。

Poseidon 就是为这个场景造的。它是一种算术哈希函数——由一组素数域上的置换构成,运算几乎全是域内乘加。正因为代数结构强,它在证明电路里产生的约束数量远少于 SHA-256、Keccak 这类传统哈希,并且与 SNARKs、STARKs、Bulletproofs 等主流证明系统都兼容。

障碍在于参数不统一:各 ZK-Rollup 落地 Poseidon 时各自挑选了不同的素数域、轮数与状态宽度。给每种组合各部署一个固定参数预编译,会立刻碎片化;而提案给出的路线是反过来的——

we can still build a generic precompile that supports arbitrary parameters, and allow the ZK rollups to choose the parameters they want to use.

即参数由调用方编码传入,而不是预编译写死。这是理解 EIP-5988 全部后续设计的支点。

参数跟着调用方走:预编译的输入编码布局

规范部分先给出三个常量:

常量值
FORK_BLKNUM待定
GAS_COST待定
POSEIDON_PRECOMPILE_ADDRESS0xA

分叉块号与 Gas 成本都还是 TBD,说明提案停留在早期。预编译地址规划为0xA,文中 MUST / SHOULD / MAY 等关键词按 RFC 2119 解释。

每次调用需要随输入一起指定的 Poseidon 参数如下:

参数含义编码长度(字节)备注
p素数域模数32
security_level安全级别(比特数),论文中记为M2
alphaS-box 的幂次(S-box 是置换里负责非线性混淆的幂函数)1
input_rate输入尺寸2
t状态尺寸1
full_round全轮数,论文中记为R_F1
partial_round部分轮数,论文中记为R_P1
input待哈希输入input_rate× 32每个域元素占 32 字节

完整的输入布局为:

[32 bytes for p][2 bytes for security_level][1 byte for alpha][2 bytes for input_rate][1 byte for t][1 byte for full_round][1 byte for partial_round][input_rate * 32 bytes for input]

人话版本:40 字节的参数头 + 变长输入尾部。头部 7 个字段共同钉死一次 Poseidon 置换实例(哪个域、多少轮、多宽状态),尾部按序排列待哈希的域元素;预编译按 Poseidon 论文 定义的算法计算并返回输出。

配套内容目前基本是空壳:Solidity 封装示例、Gas 成本、Rationale 三处均为 TODO 占位;assets/eip-5988/ 下的reference-implementation/与benchmarks/目录只放了.gitkeep,没有公开的 Geth 实现与基准数据——与 Stagnant 状态相符。

向后兼容的风险极低,唯一要防的是某个合约恰好依赖0xA地址为空。概率不高,真出现时把地址换成任意其他值即可,碰撞风险可忽略。

拿什么验证实现:参考实现的测试向量族

验证材料来自 Poseidon 参考实现的测试向量,存放在 assets/eip-5988/test/poseidon/test_vectors.txt。文件覆盖 5 组参数组合:

向量族素数域位宽状态宽度t输入说明
poseidonperm_x5_255_325530x00, 0x01, 0x02输出三个域元素,首元素为0x28ce1942…d2a78a
poseidonperm_x5_255_525550x00…0x04
poseidonperm_x5_254_325430x00, 0x01, 0x02254 位域与常见 ZK 曲线标量域一致
poseidonperm_x5_254_525450x00…0x04
starkadperm_x5_256_325630x00, 0x01, 0x02额外给出输入/输出的字节拼接(concat)形式

命名中的x5即 S-box 幂次为 5。向量整体覆盖了254 / 255 / 256 位三种素数域宽度与 3、5 两种状态宽度,并且同时提供逐元素与整段拼接两种表示——实现者做单元测试、集成测试和跨客户端一致性对比时,两种形式各有用武之地。

算术哈希的风险边界:生产记录与 MDS 矩阵判据

生产足迹与影响半径

提案引用了 Vitalik Buterin 在 EthResearch「Arithmetic hash based alternatives to KZG for proto-danksharding」讨论帖中的评估,要点有三:Poseidon 2019 年才正式提出,靠高代数结构换低约束数的路线相比 SHA-256、Keccak 的数十年检验仍然年轻;链上 L2 与多个系统已依赖它,至今未出现相关漏洞,但生产使用仍需"掂量";这份风险应与备选方案(如带可信设置的配对方案)的风险、以及依赖能证明 SHA-256 的强大证明者所带来的中心化风险放在一起权衡。

提案同时列出了生产使用方:StarkWare 计划把 Poseidon 用作 StarkNet 主哈希并内置进 Cairo;Filecoin 用于不同阶数的 Merkle 树证明与两值承诺;Dusk Network 用于类 Zcash 的证券交易协议;Sovrin 用于基于 Merkle 树的撤销;Loopring 用于以太坊隐私交易;Polygon 用于 Hermez ZK-EVM。

关键的定性判断是:即便 Poseidon 将来被证实存在漏洞,影响被限定在使用该哈希的 Rollup 之内。这与 EIP-4844 为 KZG 仪式风险做的论证同构。

MDS 矩阵的安全判据与生成流程

参数化设计把安全压力转嫁到了参数选择上,其中最敏感的是 MDS 矩阵——一个t × t方阵,在 Poseidon 的 MixLayer 阶段负责把状态各元素互相混合。判据只有一条:不活跃/活跃 S-box 子空间迹不得超过t − 1轮(子空间迹可以理解为大部分 S-box 被"跳过"、只沿线性部分传播的攻击路径;能搭的轮数越长,置换暴露的结构越多)。检测弱矩阵的高效算法见 Proving Resistance Against Infinitely Long Subspace Trails: How to Choose the Linear Layer。按 Poseidon 论文建议,矩阵生成是一个循环:生成随机矩阵 → 用上述论文的 Algorithm 1、2、3 校验 → 不过关就重新生成。

assets/eip-5988/papers/ 目录收录了提案引用的全部原始文献:Poseidon 论文、Security of the Poseidon Hash Function Against Non-Binary Differential and Linear Attacks、Report on the Security of STARK-friendly Hash Functions、Practical Algebraic Attacks against some Arithmetization-oriented Hash Functions。

虽然 EIP-5988 本身停滞,"给 EVM 引入高效算术哈希"的方向在仓库里仍在推进:EIP-7864、EIP-8182、EIP-8222、EIP-8297、EIP-8289、EIP-8310 的讨论中均提及 Poseidon,EIP-8182 的资产目录里甚至已有新一代置换 Poseidon2 的测试向量(poseidon2_vectors.json与poseidon2_bn254_t4_rf8_rp56.json)。5988 定下的"参数头 + 变长输入"编码范式和 MDS 安全检测流程,仍是这批后续工作的参照系。EIP-5988 文档版权已通过 CC0 放弃。

【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 8:42:32

notepad-- 使用教程:双栏文件对比、整库批量替换与主题定制

notepad-- 使用教程:双栏文件对比、整库批量替换与主题定制 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …

作者头像 李华
网站建设 2026/9/27 8:25:11

“技术人最后的体面:当代码注释里写满了给后人的避坑遗嘱“

"技术人最后的体面:当代码注释里写满了给后人的避坑遗嘱"在任何一家拥有 5 年以上历史的互联网大厂或成熟软件公司里,如果你想真正了解这套系统在过去几年里到底经历过多少次惊心动魄的线上事故、踩过多少次暗坑、见识过多少离谱的需求&#x…

作者头像 李华