一个安静预编译的安全问题
以太坊预编译地址里住着几个协议内置的加密函数,MODEXP 是其中之一,负责模幂运算——RSA 签名验证和各种证明系统都会用到它,合约直接调用即可,不必自己实现大数数学。它从拜占庭硬分叉起就存在,一直没出大事,但核心开发者在复盘时发现:这个预编译接受任意长度的输入,而”任意”本身就是麻烦。EIP-7823 的解决办法简单直接——给输入的三段长度字段各设一个上限。这份 EIP 的状态是 Final,并随 2025 年 12 月 3 日激活的 Fusaka 网络升级在主网生效。
无界输入为什么会出事
EIP-7823 的动机部分列了三本账。第一本账是共识风险:MODEXP 曾是多个客户端共识 bug 的来源,而很多 bug 都出在专门构造的、现实中根本不会用的超长输入上——输入空间无限大,测试面就无限大。第二本账是费用错配:在输入不设上限的前提下,定价函数很难精确匹配每类输入的真实计算成本,一笔精心构造的 MODEXP 交易可能吃掉整个区块的验证时间,这直接卡住了”提高区块 gas 上限”这件事。第三本账是未来改造:如果想用 EVM 代码(比如 EVMMAX 类机制)替换掉这个内置函数,输入有界会让实现简单得多。
规则本身:8192 位封顶
规范条文很短:输入的基、指数、模数三个长度字段,任何一个超过 8192 位(即 1024 字节)就视为非法,预编译执行终止、返回错误,并且该笔交易消耗全部 gas。选 8192 位有明确的现实依据——EIP 列举的常见用途是 RSA 验证等场景,主流密钥长度都远在限制之内;同时它还附上了一项历史数据分析:从 2018 年 4 月的第 5472266 块到 2025 年 1 月的第 21550926 块,没有任何历史交易会在设限后表现不同。这是一次”名义上不兼容、实际上无受害者”的收紧。
与 EIP-7883 的分工

容易混淆的是同批生效的 EIP-7883。两者管的事情不同:7823 管”什么算合法输入”,给长度设硬上限;7883 管”合法输入按什么价收费”,提高 MODEXP 的 gas 定价,让计费更接近真实计算成本,其中包括指数超过 32 字节后成本随长度更陡地增长。官方升级公告把两者放在一起说明——定价准确加输入封顶,合起来才把”一笔交易拖垮区块”的路径彻底堵住。理解这类”组合拳”是读升级清单的基本功:看到单个 EIP 名字就下结论,常常会漏掉真正改变行为的那一条。
谁会碰到这条规则
对绝大多数用户,这是一条完全无感知的规则:转账、交互、查余额都不经过 MODEXP。可能被碰到的是两类合约开发者。一类是使用超长 RSA 密钥或自定义大参数做验证的合约——需要检查自己的参数是否越界,越界的调用在升级后会烧光 gas 并回退。另一类是把 MODEXP 当作通用大数计算器的合约,7883 的涨价会直接改变其 gas 账单,需要重新核算调用成本。排查入口很朴素:在主网或测试网上重放自己的典型调用,比对升级前后的 gas 消耗与返回值。
边界的另一面
要说明的是,这条规则解决的是”资源型 DoS 与测试面”问题,不改变 MODEXP 数学上的正确性,也不意味着 8192 位以内的所有用法都被审计过——它只是把最危险、最无意义的长尾切掉。另一层容易被忽略的边界是方向性:限制只约束进入预编译的输入长度,不评估计算本身是否高效,真正压住计算成本的是 7883 的定价,两条规则缺一不可。预编译类改动是典型的低感知、高价值升级:出事时能救命,没事时没人注意到。评估任何公链的技术演进时,这类不起眼的收紧往往比宏大的路线图更能说明工程成熟度。
风险提示
本文只解释协议升级的技术规则与影响面,不构成投资建议。涉及激活时间与参数表述以以太坊官方博客与 EIP 原文为准,后续升级可能继续调整定价。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。