所需的gas超过限额或总是在Geth私有区块链上失败,但在其他区块链上运行良好

Far*_*azi 6 blockchain ethereum solidity smartcontracts geth

我已经使用geth. 我还有一个合约,其中有一个函数调用另一个函数,它是第三个合约来设置地址。我可以在本地区块链上调用这个函数,比如 testRPC 和 Ganache 区块链,即使它在 TestNet 中也能工作。但是一旦我使用 ( geth)设置了私有区块链。我收到此错误:

气体估计错误并显示以下消息(见下文)。事务执行可能会失败。您要强制发送吗?

所需的gas超过限额或总是失败的交易

我在来电者帐户中有足够的 ETH,而且

  • 我在来电者帐户中有足够的 ETH,而且
  • GasLimit 足够高
  • 函数没有任何循环或花哨的操作,设置地址和一些条件检查
  • 节点是 Ubuntu 16.04
  • geth -v --> 1.8.12-stable
 // in contract 1 
 function func(address addr) public returns (bool result) {
    Cantract2 c = Cantract2(addr);
    if (!c.setAddress(..)) {
       return false;
    }
       .....
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

Afr*_*Afr 1

您可能想检查私有测试链的创世文件/链规范。

有一个称为区块 Gas Limit 的变量,它会影响您可以在每个区块上花费的 Gas 量。我记得以前的默认值非常低,也许您正在使用这样的配置。你可以做什么:

  • 检查开发链配置中的区块气体限制并根据您的需要增加它
  • 或者让本地测试链运行一段时间,因为客户端会慢慢投票决定默认区块气体限制,从而允许每个区块进行更大的交易