【问题标题】:Web3.js view method call() errors out as Returned values aren't valid, did it run out of gasWeb3.js 视图方法 call() 错误,因为返回值无效,是否耗尽了气体
【发布时间】:2020-02-10 23:32:05
【问题描述】:

我正在尝试调用我的合约的视图方法,该方法在内部调用另一个合约的视图方法。

合同:

//In Contract A (imports Contract B)
function getContractData() public view returns(string memory data){
  ContractB instance = ContractB(<address where ContractB is available>));
  return instance.getData();
}

//In Contract B
function getData() public view returns(string memory data){
  return "Hello";
}

JS:

//Calling function
instance = await new web3.eth.Contract(JSON.parse(<ContractA ABI>, <ContractA Address>);
console.log(await instance.methods.getContractData().call());

我的方法在 Remix 浏览器中按预期工作,但是当使用 Web3 在 geth 上的网络上运行时,我收到错误 Returned Values are not valid, 难道它用尽了 Gas?

我发现了一些更改 web3 版本的解决方案,它们对我不起作用,我尝试添加 from 帐户和 gas,即使它对视图方法没有意义,但没有任何效果。

我似乎在哪里出错了?

【问题讨论】:

  • 作为附加信息,不引用另一个方法实例的视图方法按预期工作。如果我试图引用另一个合约的实例,是否意味着它现在需要 gas?
  • 我猜instance 没有正确声明。缺少)。如果ContractA ABI 已经在 J​​SON 中,那么您不必解析它。
  • 这是我在这里犯的一个错误。该实例确实已正确声明,我通过调用仅从 ContractA 返回消息的视图方法确保了这一点。
  • 代码在我这边运行良好,智能合约也可以在 remix 上运行。你的 web3 版本是什么,我的是 "web3": "^1.2.1"。我正在使用solidity版本0.5.1
  • 你试过 ethers.js 吗?它有效吗? github.com/ethers-io/ethers.js

标签: node.js ethereum solidity web3


【解决方案1】:

在 Github 上查看 the issue。此类错误可能是由 solc 编译器引起的,升级有助于解决。

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2021-10-15
    • 1970-01-01
    • 2022-07-16
    • 2019-10-08
    • 2020-02-25
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多