在以太坊上验证一个zk-SNARK证明要花多少Gas?2018年之前,答案是贵得让人重新设计整个协议。答案的核心开销落在三条预编译指令上:alt_bn128曲线的点加(ECADD)、标量乘(ECMUL)和配对检查。EIP-1108在2018年5月提出给这三条指令重新定价,提案状态是Final,随2020年的Istanbul升级进入主网。这份两页纸的提案没有引入任何新机制,它做的事情是把Gas价格和真实执行成本重新对齐。
降价的起因是一行代码的替换
提案动机写得很朴素:2018年官方Go实现换用了性能更好的底层库,同一批椭圆曲线运算的实际耗时大幅下降,可Gas价格还是按旧成本收的。预编译的本意是用固定Gas换取可预测的本地计算,价格与实际耗时脱钩意味着两件事:正常用户为同样的验证多付了几倍的钱;而定价按最坏情况留足余量的话,攻击者又总能找到计价规则里最划算的滥用点。与其两头不讨好,不如重新量一遍表。
一张价目表怎么改
按提案的对照表:点加从500降到150;标量乘从40000降到6000;配对检查从每次100000加每对80000改为45000加每对34000。调整覆盖的是EIP-196和EIP-197定的旧价。定价方法值得细看:作者把ecrecover预编译当作标尺——它的执行时间约116微秒,对应3000Gas,折出每微秒约25.86Gas的汇率;再实测配对运算,1次配对耗时3037微秒、10次14663微秒,拆出固定开销约1745微秒加每对1292微秒的线性项,乘回汇率就得到约35000加34000每对的公式,取整定案。一个细节是基准客户端:实测以当时性能较差的那家客户端为准——共识安全不看最快的节点,看最慢的 honest 节点会不会被拖垮。
谁从降价里受益
提案列举的用例全是当年最热的链上密码学应用:AZTEC用alt_bn128做隐私代币交易、各类SNARK验证器、群签名和匿名凭证。降价的直接效果是给这一整层应用减负:一次链上SNARK验证的总Gas里,配对检查能占大头,固定项从10万到4.5万、边际从8万到3.4万,等于验证开销立省近半。更微妙的是长尾影响:ZK应用的Gas门槛决定它的可行商业半径,每一轮预编译降价都会重画一次这个半径。后来BN256curve的验证成本继续被各类聚合方案压低,但1108是第一次系统性审计。
一张账单的前后对照
拿最常见的验证形态算一笔粗账:一次SNARK验证要跑一次配对检查,配对数k通常在一到四之间。旧价下固定项十万加每对八万,k等于二时账单二十六万Gas;新价下四万五加每对三万四,同一笔验证十二万二,直接砍半有余。若验证外层还包着聚合器的多条配对,节省随k线性放大。再看曲线运算的零头:点加从五百降到一百五,一次哈希到曲线的电路验证常做上百次点加,零头也省下几万次加法的量级。把这些数字放回2018年的Gas价目表里,等于给整条ZK应用赛道发了一张批发价折扣券——后来的事实是,链上隐私协议与Rollup的验证器设计,都建立在这种被重新校准过的成本曲线之上。
快速问答
问:为什么只调alt_bn128这三条? 答:因为实测显示只有它们与真实成本偏差大;其他预编译如sha256、ripemd160的计价仍然合理。 问:降价会不会引发新的DoS面? 答:提案考虑过——新价按最慢客户端基准定,且Gas计价只是防止成本外部化,真实耗时才是安全边界,客户端仍需自带执行限额。 问:它跟后来的BLS预编译是什么关系? 答:alt_bn128是以太坊早期的妥协选择,后续提案另起炉灶给新曲线定价;1108只负责给旧三条续命降本。
风险提示:本文描述协议机制与历史定价,不构成任何投资建议。Gas数值以EIP原文与当前客户端文档为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。