You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity内联汇编提示Builtin function "gas" must be called问题问询

问题原因

确实是Solidity版本迭代导致的语法变更:从Solidity v0.8.20版本开始,Yul内联汇编中的gas从直接读取的内置变量,修改为必须显式调用的内置函数,你使用的教程示例基于v0.8.19及更早版本编写,直接写gas就会触发对应报错。

修复方案

只需要把delegatecall参数里的gas改为gas()即可,同版本变更中returndatasize也同步调整为必须显式调用的函数,建议同步修改避免后续触发同类报错,修改后的完整汇编代码如下:

assembly {
        let result := delegatecall(gas(), implementation, add(data, 0x20), mload(data), 0, 0)
        let size := returndatasize()
        let ptr := mload(0x40)
        returndatacopy(ptr, 0, size)
        switch result   
        case 0 {revert(ptr, size)}  
        default{return(ptr, size)}  
}

补充说明

如果你需要预留部分gas给代理合约本身的后续操作,可以在转发时扣除对应数值,比如写作gas() - 200,避免将所有剩余gas都转发给实现合约,导致代理侧后续操作gas不足。

内容的提问来源于stack exchange,提问作者EmmerichS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:54:03