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);
        }
      }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况