EVM的每一个栈槽都是256位见方,ADD、MULMOD 再能干,数字宽度也超不出这条边。问题是新一代密码学偏偏都是”宽数”生意:有些椭圆曲线的标量场、多项式承诺、后量子格密码,模数动辄五百、七百位。用256位指令手工拼多精度算术,一条数学上一步的运算要摊成几十条EVM指令。EIP-6690在2023年3月由多位作者(名单里包括Vitalik Buterin)给出硬件感的解法:给每个调用帧开一座”扩展寄存器堆”,模数最大支持到2的768次方减1,加减乘都在宽寄存器里就地完成。这份叫EVMMAX的提案停在Stagnant,但它的思路后来反复出现在各种密码学加速讨论里。
三层结构:字段上下文、搬运、运算
第一层是SETMODX(0xc0):声明一个”字段上下文”——选定模数并分配一片虚拟寄存器,编号0到256个上下文可以共存,谁生效看当前哪个被激活。这一层的设计意图是把”换模数”的成本从每次运算摊销到每次协议开场,因为模逆、蒙哥马利常数这类昂贵预处理都挂在上下文上。第二层是数据搬运:LOADX(0xc1)和STOREX(0xc2)负责宽数在EVM内存与寄存器堆之间的双向拷贝——提案刻意让虚拟寄存器不进EVM线性内存,地址算术永远碰不到它们,也就永远不会因为寻址失误破坏宽数完整性。第三层是正主:ADDMODX、SUBMODX、MULMODX(0xc3到0xc5)三条算术指令,每条带七字节的立即数,编码”输出寄存器、输入寄存器、批量条数”等参数,一次指令执行一串模运算,摊薄解释器开销。
按模数分档的价目表
宽数运算的成本无法用单一常数表达——模384位的加法天然比256位贵。规范的做法是给每种运算按”模数向上取整到64位倍数”的档位做成本表,静态部分则由字长线性公式估出(形如每多一个字长加价若干的直线),并声明数值会随实现优化更新。这套定价哲学与粒子计价相反:不动全局账本,只给新增指令开一本专用账。
为什么停在提案阶段
给EVM加一整套带旁路存储的指令族,实现复杂度和攻击面都不小;同期社区更倾向把热门算法逐个做成定点预编译——KZG点点评估随2024年的Dencun升级装进执行层、secp256r1验签(EIP-7951)随2025年12月的Fusaka激活,都是这条路线的成果。通用扩展对上单点预编译,竞争的结果是后者先落地,EVMMAX继续留在纸面。
快速问答
问:2的768次方减1这个上限怎么来的? 答:规范为字段上下文设的尺寸天花板,覆盖当时讨论到的所有候选曲线与格密码模数,取的是留余量的工程值。 问:虚拟寄存器会进状态或交易收据吗? 答:不会,它们只存在于调用帧生命周期内,帧结束即释放。 问:今天链上做宽数运算靠什么? 答:多精度拼装的合约库(如BigMod库正是6690的作者参照物)或专门的预编译合约。
预编译与指令族的两条路
同样是为密码学降本,路线之争值得一记。预编译路线是”包间制”:每流行一种算法,就造一个专用房间——地址、输入输出格式、一口价Gas,客户端用优化过的原生代码实现那一种算法。优点是简单可控,缺点是每个新算法都要走一轮完整EIP加客户端开发,排队漫长。EVMMAX路线是”中央厨房制”:不造专用包间,而是把灶台、刀具和炉温都做成通用设备,任何模运算——不管底下是哪种曲线、哪种格——都能以接近原生代码的摊销效率开火。厨房的劣势也直白:设备贵(虚拟寄存器要内存)、消防难(计费公式复杂)、每家的菜系都来做菜时故障半径大。历史最终给了混合答案:热门算法住包间,长尾留在多精度合约库的土灶上,中央厨房停在了图纸阶段。
风险提示:本文介绍密码学协议提案,不构成投资建议;合约内数学库选用请以审计报告为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。