为什么我的 Solidity Ethereum 合约耗尽了 gas?

问题描述

松露迁移 --reset

正在编译您的合同...

一切都是最新的,没有什么可以编译的。

开始迁移...

网络名称:'发展' 网络 ID:5777 区块gas限制:672197500 (0x2810eb7c)

1_initial_migration.js

替换“迁移”

交易哈希:0xf41feee2b768ba375d95ded5c40a48e7af3d59554f616738102a2a9805824d77 块数:0 秒数:0 合约地址:0xe75Ea4aDD9728c9846778a695cE0CF32b66C1c52 块数:1 区块时间戳:1621246185 帐号:0x33b005e2f8d83120b4ab4bDde1bD7Ad704077801 余额:99.99626098 使用的气体:186951(0x2da47) 汽油价格:20 gwei 发送的价值:0 ETH 总成本:0.00373902 ETH

保存迁移到链。 保存工件


总成本:0.00373902 ETH

2_deploy_contracts.js

替换“CryptoBoys”

错误:*** 部署失败 ***

“CryptoBoys”耗尽了gas(使用您在网络配置或部署参数中设置的值。)

  • 块限制:672197500 (0x2810eb7c)
  • 气体发送:6721975 (0x6691b7)

当我写这个函数时,它导致了上面提到的错误

    function getAllTokensMintedByUser(address user) public view returns(CryptoBoy[] memory result){
        
        uint256 k=0;
        result=new CryptoBoy[](totalMintedTokens[user]);
        if(totalMintedTokens[user]!=0){
            for(uint256 i=1; i<=cryptoBoyCounter; i++) {
            
            CryptoBoy memory cryptoboy=allCryptoBoys[i];
            if(cryptoboy.mintedBy==user){
              result[k]=cryptoboy;
              k++;
            }
          }
        }
        
        return result;
      }

解决方法

您的合约可能超过 24KB 的代码限制。

但是,您可以尝试在您的 development 中手动设置用于部署到您的 truffle-config.js 网络的 gas 限制:

development : {
 ...
 gas: 6000000
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...