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

标签 blockchain ethereum solidity smartcontracts geth

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

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?

gas required exceeds allowance or always failing transaction



我在来电者帐户中有足够的 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;
      }
    

    最佳答案

    您可能想要检查您的私有(private)测试链的创世文件/链规范。
    有一个称为区块 gas limit 的变量,它会影响您可以在每个区块上花费多少 gas。我记得过去的默认值过去非常低,也许您正在使用这样的配置。你可以做什么:

  • 检查开发链配置中的区块gas限制并根据您的需要增加它
  • 或者让本地测试链运行一段时间,因为客户端会缓慢投票提高默认区块的gas限制,让你每个区块进行更大的交易
  • 关于blockchain - 所需的gas超过限额或总是在Geth私有(private)区 block 链上失败,但在其他区 block 链上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333536/

    相关文章:

    transactions - 以太坊可以进行私有(private)交易吗?

    android - 智能合约包装器的交易哈希和超时异常

    blockchain - UniswapV3 位置类型转换算法无法根据我传入的参数获得正确的池地址

    javascript - 使用 Web3 从 Solidity 调用函数

    javascript - 将 HTML 表单中的值提交到 Node-js

    node.js - 币安测试网部署错误 : Could not create addresses from your mnemonic or private key(s)

    java - 区 block 链技术如何验证工作证明

    hyperledger-fabric - super 账本结构调用.js "Error: 2 UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]"

    javascript - 安全帽 "deployed()"有什么作用?

    javascript - 如何使用 bitcoinjs-lib 发送和接收比特币?