Web3.js 视图方法 call() 错误,因为返回值无效,是不是耗尽了气体
Posted
技术标签:
【中文标题】Web3.js 视图方法 call() 错误,因为返回值无效,是不是耗尽了气体【英文标题】: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
已经在 JSON 中,那么您不必解析它。
这是我在这里犯的一个错误。该实例确实已正确声明,我通过调用仅从 ContractA 返回消息的视图方法确保了这一点。
代码在我这边运行良好,智能合约也可以在 remix 上运行。你的 web3 版本是什么,我的是 "web3": "^1.2.1"
。我正在使用solidity版本0.5.1
你试过 ethers.js 吗?它有效吗? github.com/ethers-io/ethers.js
【参考方案1】:
在 Github 上查看 the issue。此类错误可能是由 solc 编译器引起的,升级有助于解决。
【讨论】:
以上是关于Web3.js 视图方法 call() 错误,因为返回值无效,是不是耗尽了气体的主要内容,如果未能解决你的问题,请参考以下文章