【发布时间】: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
标签: node.js ethereum solidity web3