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
相关产品推荐
相关产品推荐

