首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Solity0.6.0地址(此).balance抛出错误无效操作码

Solity0.6.0地址(此).balance抛出错误无效操作码
EN

Ethereum用户
提问于 2019-12-29 09:00:59
回答 2查看 1.7K关注 0票数 3

每当我尝试执行使用address(this).balance的函数时,我都会得到一个invalid opcode错误。它使用0.6.0进行精细编译。

使用松露调试,我得到以下错误:

代码语言:javascript
运行
复制
Transaction halted with a RUNTIME ERROR.

There was no revert message.  This may be due to an in intentional halting expression, such as assert(), revert(), or require(), or could be due to an unintentional exception such as out-of-gas exceptions.
Please inspect your transaction parameters and contract code to determine the meaning of this error.

我检查了文档,但是使用address(this).balance并没有改变。我是不是遗漏了什么?

编辑:我刚刚在混合中测试了这段代码,它也抛出了:

代码语言:javascript
运行
复制
    pragma solidity 0.6.0;

    contract A {
        uint public total;

        receive() external payable {
            total = address(this).balance;
        }
    }
EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-12-29 10:53:37

我通过在我的松露配置文件中显式定义EVM版本来修复它。这仍然很奇怪,因为Remix也支持这一点(如附件中所示),但仍然失败。

代码语言:javascript
运行
复制
  compilers: {
    solc: {
      version: "0.6.0",
      settings: {
        optimizer: {
          enabled: true
        },
        evmVersion: "petersburg"
      }
    }
  }

编辑:我为这里团队创建了一个问题。

票数 5
EN

Ethereum用户

发布于 2019-12-29 10:35:25

在总结上面的评论时,编译器版本0.5.13的更改日志提到了一个相关的修复:

代码生成器:如果使用伊斯坦布尔EVM,则为address(this).balance使用SELFBALANCE操作码。

所以我冒昧地猜测你的问题:

  1. 实际上是最近硬叉的结果
  2. 实际上可以追溯到编译器版本0.5.13

我想知道(并担心)在已经编译和部署的使用address(this).balance的合同中会发生什么.

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/78597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档