开发者驳斥Vitalik:前提假设有误,RISC-V并非最佳选择

CN
5小时前

本文来自:以太坊开发者 levochka.eth

编译|Odaily星球日报(@OdailyChina);译者|Azuma(@azuma_eth

编者按:

昨日,以太坊联合创始人 Vitalik 发布了一篇关于以太坊执行层升级的激进文章(详见《Vitalik激进新文:执行层扩容“不破不立”,EVM未来必须被迭代》),文中提到希望用 RISC-V 取代 EVM 作为智能合约的虚拟机语言。

此文一出,立即在以太坊开发者社区激起了轩然大波,多位技术大佬对该方案表达了不同看法。文章发布后不久,一线以太坊开发者levochka.eth 在原文下文撰写长文反驳了Vitalik 的观点,其认为Vitalik 对证明系统及其性能进行了错误的前提假设,RISC-V 无法兼顾“可扩展性”和“可维护性”,或许并非最佳选择。

以下为levochka.eth 原文内容,由 Odaily 星球日报编译。

开发者驳斥Vitalik:前提假设有误,RISC-V并非最佳选择

请不要这样做。

这个计划并不合理,因为你对证明系统及其性能进行了错误的前提假设。

验证假设

据我理解,该方案的主要论点是“可扩展性”(scalability)和“可维护性”(maintainability)。

首先,我想讨论可维护性。

事实上,所有 RISC-V zk-VM 都需使用“预编译”(precompiles)来处理计算密集型操作。SP1 的预编译列表可见于Succinct的文档,你会发现它几乎涵盖了 EVM 中所有重要的“计算性”操作码。

因此,对基础层加密原语的所有修改都需要为这些预编译编写并审计新的“电路”,这是一个严重的限制。

确实,如果性能足够好,执行客户端中“非 EVM”部分的可维护性可能会相对容易。我不确定性能是否会足够好,但我对这部分的信心较低,原因如下:

  • “状态树计算”(state tree computation)确实可以通过友好型预编译(如 Poseidon)大幅加速。

  • 但能否以优雅且可维护地方式处理“反序列化”(deserialization)尚不明确。

  • 此外,还存在一些棘手细节(如 Gas 计量和各种检查),这些环节可能属于“区块评估时间”,但实际上更应归类为“非 EVM”部分,且这些部分往往更容易面临维护压力。

其次,关于可扩展性的部分。

我需要重申一点,RISC-V 不可能在不使用预编译的情况下处理 EVM 负载,绝对不行。

所以,原文中“最终证明时间将主要由当前的预编译操作主导”这一说法虽然技术上正确,但过于乐观 —— 它假设未来不会有预编译,而事实上(在这个未来场景中),预编译仍会存在,且与 EVM 中计算密集型操作码(比如签名,哈希,以及可能出现的大型数模运算)完全一致。

关于“斐波那契”(Fibonacci)示例,很难在不深入极底层细节的情况下做出判断,但其优势至少部分来自:

  • “解释器”(Interpretation)与“执行开销”(execution overhead)的差异;

  • 循环展开(减少 RISC-V 的“控制流”,Solidity 能否实现尚不确定,但即便单个操作码仍会因解释开销而产生大量控制流/内存访问);

  • 使用更小的数据类型;

这里我想指出,要实现第 1 点以及第2点优势,必须消除“解释开销”(interpretation overhead)。这与 RISC-V 的理念一致,但这不是我们目前讨论的 RISC-V,而是一种类似的“(?)RISC-V” ——它需要具备某些额外能力,比如支持合约概念。

问题来了

所以,这里存在一些问题。

  • 若要提升可维护性,你需要一个能编译 EVM 的 RISC-V(带预编译)—— 这基本就是现状。

  • 若要提升可扩展性,则需要完全不同的东西 —— 一种可能类似 RISC-V 的新架构,它能理解“合约”概念,兼容以太坊运行时限制,并能直接执行合约代码(且无“解释开销”)。

我现在假设你指的是第二种情况(因为文章的其余部分似乎暗示了这一点)。我需要提醒你注意,此环境外的所有代码仍将用当前RISC-V zkVM 语言编写,这对维护有重大影响。

其他可能性

我们可以将字节码从高级 EVM 操作码中编译出来。编译器负责确保生成程序保持不变量,例如不会出现“栈溢出”(stack overflow)。我希望看到在普通 EVM 中展示这一点。正确编译的 SNARK 可以与合约部署指令一起提供。

我们还可以构建一个“形式化证明”(formal proof),证明某些不变量得以保留。据我所知,这种方法(而不是“虚拟化,virtualization”)已在某些浏览器上下文中使用。通过生成这种形式化证明的 SNARK,你也可以实现类似的结果。

当然了,最简单的选择是硬着头皮去做……

构建一个最小的“链式”MMU

你在文章可能隐含表达了这一点,但请允许我提醒:若想消除虚拟化开销,必须直接执行编译后的代码 —— 这意味着你需要以某种方式防止合约(现在是可执行程序)写入内核(非 EVM 实现)内存。

因此,我们需要某种“内存管理单元”(MMU)。传统计算机的分页机制可能不必要,因为“物理”内存空间近乎无限。此 MMU 应尽可能精简(因为它与架构本身处于同一抽象级别),但某些功能(如“交易原子性,atomicity of transactions”)可移至该层。

此时,可证明的 EVM 将成为运行于此架构的内核程序。

RISC-V 可能不是最佳选择

有趣的是,在所有这些条件下,适合这项任务的最佳“指令集体系结构”(ISA)可能不是 RISC-V,而是某中类似于 EOF-EVM 的东西,原因在于:

  • “小型”操作码实际会导致大量内存访问,现有证明方法难以高效处理。

  • 为减少分支开销,我们在近期的论文 Morgana 展示了如何以预编译级性能证明“静态跳转”(static jumps,类似 EOF)代码。

我的建议是,构建一个对证明友好的新架构,配备一个最小的 MMU,允许将合约作为单独的可执行文件运行。我不认为它应是 RISC-V,而应是一种专为 SNARK 协议限制优化的新 ISA,甚至部分继承 EVM 操作码子集的 ISA 都可能更好 —— 如我们所知,不管我们愿不愿意,预编译都会一直存在,所以 RISC-V 在这里并没有带来任何简化。

免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

OKX:注册返20%
链接:https://www.okx.com/zh-hans/join/aicoin20
广告
分享至:
APP下载

X

Telegram

Facebook

Reddit

复制链接