dieju8330 2018-11-30 14:59 采纳率: 0%
浏览 885

solidity 为何使用require,gas反而被耗尽?无论设置多大的gas都一样

图片说明

代码如下:

 pragma solidity ^0.4.25;

contract aPlusb{
    function aPlusb(){}
    uint a=1;
    event happen(uint input,uint output);
    function plus(address addr,uint a,uint b) returns (uint){
        require(a==2);
        uint aa;
        uint bb;
        uint cc;
        uint dd;
        aa+=bb;
        bb+=1;
        cc+=3;
        dd+=cc;
        happen(a,a+1);
        return a+1;
    }
}

在remix-ide里直接使用它的jvm虚拟机测试没问题,但是一旦连接到我geth启动的私链,再调用plus函数,就会使我的gas耗尽,并不返回gas。。头疼

  • 写回答

1条回答 默认 最新

  • lowkey-lau 2023-07-04 15:12
    关注

    不建议用 require() 来返回错误信息,使用自定义Error可以省下不少的Gas费

    error ErrorMsg(uint256 num); //error需要写在合约的外面
    
    contract TestContract {
      uint256 public num = 1;
    
      function test() public view
      {
        require(num != 1, 'ErrorMsg'); //替换成下面这个
    
        if(num == 1)
        {
          revert ErrorMsg(num);
        }
      }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook
  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题