为以太坊标准化 RISC-V 目标

  • eth-act
  • 发布于 2026-02-07 20:14
  • 阅读 11

本文提出了一个RISC-V目标三元组标准,用于在以太坊上使用的zkEVM。该标准旨在统一不同zkEVM的基准测试、形式化验证工作,并降低审计电路的复杂性。它详细定义了最小的RISC-V指令集架构(ISA)及其扩展,例如Zicclsm,以确保与物理硬件的行为一致性并增强鲁棒性。

为以太坊标准化 RISC-V 目标

本提案旨在为以太坊上使用的 zkEVM 标准化 RISC-V 目标三元组。我们希望定义最小目标。

建议目标:

riscv64im_zicclsm-unknown-none-elf

动机

目前,不同的 zkEVM 针对不同的 RISC-V 三元组,标准化有助于在不同的 zkVM 之间规范基准测试(针对所证明的电路),集中形式化验证工作,并降低审计电路的长期复杂性。

目标

  • 为希望证明以太坊区块的 zkEVM 定义一个最小的 RISC-V 指令集。

非目标

  • 定义一个用于证明任意通用程序的 RISC-V 指令集
  • 不直接支持每种语言
  • 我们没有为其他目标定义标准,并且此目标的标准化对其他目标没有先例。例如,可以设想 WASM-WASI 是 WASM 的合适目标。
类别 建议设置
ISA 基准 RV64I
扩展 M, Zicclsm
压缩 (C) 排除
浮点 (F, D) 排除 (软浮点)
特权模式 仅机器 (M)
系统调用 / 环境
ABI LP64 (软浮点)
对象格式 ELF,静态链接
字节序 小端序
内存模型 平坦,无 MMU,无分页

基本原理

由于执行层的状态转换函数 (STF) 不包含任何浮点算术,因此证明 STF 的最小 ISA 要求是 RV32I。实际上,它是 RV32IM,否则乘法和除法将非常昂贵。

我们使用 64 位,因为 STF 中使用的许多算法可以利用 64 位字长。例如,U256 整数算术和 keccak256。

Zicclsm 扩展

需要使用 Zicclsm 扩展。它强制要求必须支持对主内存区域的未对齐加载和存储。虽然针对 RISC-V 的正常运行编译器通常会生成对齐的内存访问,但编译器错误可能会无意中产生未对齐的内存操作。在各种编译器工具链中都观察到过此类错误。如果没有 Zicclsm 支持,在硬件 RISC-V 实现上正确编译和执行的程序将在 zkVM 环境中陷入陷阱或行为不正确。在以太坊的背景下,这会产生一个关键风险:由于编译器错误导致未对齐访问的交易区块将变得无法证明,这可能停止区块生产并损害网络活性。

通过要求使用 Zicclsm,zkVM 与物理 RISC-V 硬件和标准模拟器的行为保持一致,所有这些都透明地处理未对齐访问。这降低了细微兼容性问题的风险,并确保 zkVM 仍然是更广泛的 RISC-V 软件生态系统的一个可靠执行环境。

zkVM 必须提供证明生成期间发生的未对齐内存访问次数的可见性。这使开发人员能够随着时间的推移监控未对齐访问模式,并调查触发它们的特定代码块。至少,zkVM 应该通过命令行输出或日志文件公开每个证明的未对齐访问计数,尽管鼓励更精细的指标。这种可观察性有助于识别潜在的优化机会,并验证未对齐访问仍然像预期一样罕见,同时确保在出现边缘情况时安全措施正常工作。

zkVM 预编译

由于 zkVM 预编译是通过 C 接口定义的,因此无需指定 zkVM 预编译的调用实现细节。

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

0 条评论

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