1

我正在用 Solidity 编写代理合同。为了在我的后备函数中转发来电,我使用了内联汇编代码。我是一名学生,下面的代码是我的导师在教程中编写的代码。

我的代码收到以下错误:

必须调用内置函数“gas”。

我假设 Solidity 自教程制作以来已经发展,但我在网上找不到任何东西(谷歌或文档)。

这是代码:

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)}  
}

错误是指第 2 行中用红色下划线标出的单词“gas”。
有什么改变吗?

4

1 回答 1

3

在旧版本的文档(例如v0.4.24)中,它说:

对于不带参数的操作码,可以省略括号。

但是,较新版本的文档链接到中间语言的单独页面,现在称为 Yul。在该页面上,操作码现在也被称为“内置函数”,并且似乎不再允许省略括号。

所以你很可能应该使用gas()而不是gas.

于 2021-09-04T07:35:15.210 回答