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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵