尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

EIP-7823 深度解读:为 MODEXP 预编译设置输入长度上限(8192 位)

EIP-7823 深度解读:为 MODEXP 预编译设置输入长度上限(8192 位) EIP-7823 深度解读为 MODEXP 预编译设置输入长度上限8192 位【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs导读EIP-7823Set upper bounds for MODEXP为以太坊 0x05 地址的 MODEXP大整数模幂预编译引入了输入长度上限BASE、EXPONENT、MODULUS 三个字段的长度各自不得超过 8192 位1024 字节。这一限制旨在收窄 MODEXP 的测试面、降低共识缺陷风险并为此后通过 EVMMAX 等指令集用 EVM 代码替换该预编译铺平道路。本文将以 EIPS/eip-7823.md 为主体结合 EIP-198、EIP-2565、EIP-7883、EIP-6690 与 Fusaka 升级元 EIP EIP-7607 等仓库内文档完整讲解该提案的规范、动机、链上数据分析、兼容性影响及其在 Fusaka 网络升级中的落地情况。背景MODEXP 预编译与 EIP-198MODEXP 预编译最初由 EIP-198Big integer modular exponentiation在 Byzantium 硬分叉中引入。它位于地址0x00……05期望输入格式为length_of_BASE length_of_EXPONENT length_of_MODULUS BASE EXPONENT MODULUS其中每个length都是 32 字节左填充的整数表示紧随其后的值所占用的字节数。调用数据被视为无限右补零多余数据被忽略。预编译返回(BASE**EXPONENT) % MODULUS输出字节数组长度与模数长度一致。其 gas 消耗由 EIP-198 定义基于mult_complexity对 Karatsuba 乘法难度的近似与ADJUSTED_EXPONENT_LENGTHdef mult_complexity(x): if x 64: return x ** 2 elif x 1024: return x ** 2 // 4 96 * x - 3072 else: return x ** 2 // 16 480 * x - 199680EIP-198 文档中给出的例子可帮助理解其行为输入3**(2**256 - 2**32 - 978) % (2**256 - 2**32 - 977)由费马小定理可知结果为 1输出 32 字节的1此时ADJUSTED_EXPONENT_LENGTH为 255gas 成本为mult_complexity(32) * 255 / 20 13056。一个 4096 位 RSA 指数运算在最坏情况下约需mult_complexity(512) * 4095 / 100 22853376gas但实际 RSA 验证常用指数 3 或 65537gas 消耗分别可降至 5580 或 89292。后续的 EIP-2565 重新定义了 MODEXP 的定价算法引入最小 200 gas 下限、以 8 字节为 word 的乘法复杂度近似、将 GQUADDIVISOR 由 20 调整为 3EIP-7883 又进一步上调了其价格最小成本 200→500一般成本三倍指数大于 32 字节时乘数由 8 翻倍为 16。而 EIP-7823 不改动定价只限制输入长度本身。动机共识缺陷与无界输入定价的困境EIP-7823 的动机来自三个方面MODEXP 是共识缺陷的常见来源。EIP-7823 明确指出MODEXP 预编译已成为大量共识 bug 的源头其中许多源于使用不切实际输入长度的精心构造用例例如 EIP-198 中2**256 - 1字节长的模数示例。输入无界意味着测试面无限客户端实现在边界情况下容易出现分歧。定价函数因无界输入而复杂。在无界输入下定价公式需要分段处理不同的数量级复杂度显著上升。EIP-7823 不主张立即重写定价函数但指出一旦长度上限生效未来升级中重新设计定价函数将变得更加可行。为 EVMMAX 替换铺路。长度受限后用 EVM 代码如通过 EVMMAX 这类指令集替换 MODEXP 预编译的可行性显著提高——这呼应了以太坊社区通过 EIP-7666EVM-ify the identity precompile展现的用 EVM 代码取代预编译的整体思路。规范每个输入字段上限 8192 位1024 字节EIP-7823 的规范非常简洁仅对 EIP-198 定义的输入格式附加一个约束为预编译的输入引入一个上限三个长度字段length_of_BASE、length_of_EXPONENT和length_of_MODULUS各自必须小于或等于 8192 位1024 字节。超限时的行为定义为如果任一输入超过该限制预编译执行立即停止返回错误并消耗调用方提供的全部 gas。注意消耗全部 gasconsume all gas这一语义超限调用不仅失败还会烧掉该调用附带的所有 gas这与 EVM 中异常终止exceptional halt的典型行为一致——从实现角度看这等效于在执行前触发一次异常退出客户端无需为超限输入分配或计算任何大数运算。该规范没有改动 MODEXP 的接口、计算语义或定价公式纯粹是对输入域的收窄。三个长度字段是独立判定的只要其中一个超过 1024 字节即触发失败。理由与依据限制值如何选定限制值覆盖现有真实用例8192 位1024 字节的上限足以覆盖 MODEXP 现有的全部实际使用场景RSA 验证支持最高 8192 位密钥的 RSA 验证。常用密钥长度为 1024/2048/4096 位均远低于上限。椭圆曲线相关用例通常低于 384 位。即该上限足够宽以不破坏既有合法用例又足够窄以收窄测试面。EVMMAX预编译替换的可行性EIP-7823 明确指出通过类似 EVMMAX 的指令集用 EVM 代码替换该预编译会因该上限而变得更加简单常见的长度256、381、1024、2048 位等可实现为专用快速路径fast paths其余情况可提供慢速回退路径slow fallback甚至可以对频繁使用的特定模数提供专属路径。此外可以考虑仅对某些输入字段施加限制。EVMMAX 的形态可以参考仓库内的 EIP-6690EVM Modular Arithmetic Extensions该提案引入SETMODX、LOADX、STOREX等新指令为 3 到 2**768-1 之间的奇数或 2 的幂模数提供扩展宽度的高效模运算操作并定义了 EVM 内存与 EVMMAX 虚拟寄存器空间之间的分离与拷贝语义。EIP-7823 与这类提案的目标互补——一个收窄现有预编译的输入域另一个在 EVM 层面原生支持高效模运算共同推动 MODEXP 的EVM 化。链上数据分析5472266 ~ 21550926 区块为了验证限制值的合理性作者对 Byzantium 引入 MODEXP 以来的链上调用进行了分析统计区间为区块 54722662018 年 4 月 20 日至区块 215509262025 年 1 月 4 日长度单位均为字节。Base 长度出现频次input_of_BASEcount3224395951284167256296916043651236013647782513212913851Exponent 长度出现频次input_of_EXPONENTcount3224422553477111591282901352Modulo 长度出现频次input_of_MODULUScount3224395941284167256296816043651238013648782129138412571该分析表明没有任何一次成功的链上调用超过 513 字节的输入长度绝大多数调用使用 32/128/256 字节的输入。这与上限 1024 字节之间存在可观的安全余量。除上述成功调用外链上还观察到少量无效输入的调用空输入仅由0x9e5faafc或0x85474728组成的输入一个大型但无效的输入0x9e281a98000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e19e0c9bab2400000。这些正是 EIP-7823 动机中提到的精心构造的异常输入类型的现实样本。向后兼容性EIP-7823 是一项向后不兼容的变更backwards incompatible在历史上任何传入超限长度字段的调用原本可能被解析或失败而升级后这些调用将统一以耗尽全部 gas的方式失败。不过基于截至区块 21550926 的链上分析见上文没有任何历史交易会在该变更后表现出不同的行为——因为从未有成功调用超过 513 字节的输入长度。从数据上看该变更对既有链上生态的实际影响为零仅收紧了未来调用的输入域。安全考量EIP-7823 认为由于只是缩减了可接受的输入范围accepted input range不会引入新的安全攻击面。相比定价调整类提案如 EIP-2565、EIP-7883 需要担心计价过低导致 DoS或计价过高导致可用性下降纯长度限制的变更方向是单边的——只排除异常输入不影响合法输入的可用性。落地Fusaka 网络升级中的激活EIP-7823 状态为Final类型Standards Track / Core并被列入 FusakaFulu/Osaka网络升级。根据元 EIP EIP-7607Hardfork Meta - FusakaEIP-7823 是 Fusaka 的核心 EIP 之一与该升级中的其他变更如 EIP-7883 ModExp Gas Cost Increase、EIP-7825 Transaction Gas Limit Cap、EIP-7594 PeerDAS 等一同激活。EIP-7607 给出了各网络的激活时间表网络激活 Epoch激活时间戳激活时间UTCFork IDHolešky16512017593084802025-10-01 08:48:000x783def52Sepolia27264017604273602025-10-14 07:36:000xe2ae4999Hoodi5068817616775922025-10-28 18:53:120xe7e0e7ffMainnet41139217647985512025-12-03 21:49:110x5167e2a6可以看到MODEXP 相关的两项提案EIP-7823 限制输入长度 EIP-7883 上调定价在同一次升级中同时生效共同提升 MODEXP 预编译的可维护性与资源计费准确性。关联阅读EIP-198MODEXP 预编译的原始规范输入格式、mult_complexity 定价、ADJUSTED_EXPONENT_LENGTH 定义。EIP-2565ModExp Gas Cost重新定义定价算法最小 200 gas、words² 复杂度、GQUADDIVISOR3。EIP-7883ModExp Gas Cost Increase进一步提高 MODEXP 定价最小 500 gas、移除 /3、指数乘数 8→16。EIP-7607Fusaka 网络升级元 EIP包含 EIP-7823 的激活时间表。EIP-6690EVM Modular Arithmetic ExtensionsEVMMAX 形态之一体现扩展宽度模运算的 EVM 原生化方向。EIP-7666EVM-ify the identity precompile展示用 EVM 代码替换预编译的实践路径。小结EIP-7823 以一段极简的规范三个长度字段上限 8192 位、超限耗尽全部 gas解决了 MODEXP 预编译长期存在的三个问题收窄共识 bug 测试面、为定价函数重设计创造条件、降低以 EVMMAX 方式用 EVM 代码替换该预编译的难度。其限制值选择有充分的链上数据支撑——历史所有成功调用均未超过 513 字节因此尽管该变更被标记为向后不兼容实际链上影响为零。作为 Fusaka 升级的核心 EIP 之一它将于 2025 年末随网络升级在主网及测试网生效与 EIP-7883 的定价上调一道为 MODEXP 预编译走向有限输入域 更准确计费 可 EVM 化替换的演进路径奠定基础。【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表