我在尝试使用 call() 调用现有的智能合约函数时遇到错误。错误是“返回的值无效,它是否用尽了 Gas?如果您没有为从中检索数据的合约使用正确的 ABI,从不存在的块号请求数据,您也可能会看到此错误存在,或查询未完全同步的节点。” 我的代码如下
let url = 'https://api.etherscan.io/api?module=contract&action=getabi&address=0x672C1f1C978b8FD1E9AE18e25D0E55176824989c&apikey=<api-key>';
request(url, (err, res, body) => {
if (err) {
console.log(err);
}
let data = JSON.parse(body);
let contract_abi = JSON.parse(data.result);
let contract_address = '0x672C1f1C978b8FD1E9AE18e25D0E55176824989c';
const contract = new web3.eth.Contract(contract_abi, contract_address);
contract.methods.totalSupply().call()
.then(result => {
console.log('result', result);
}).catch(err => {
console.log('error: ', err);
})
})
当我使用 send() 执行相同的函数时,它可以工作,但是我需要函数的返回值,这就是我想使用 call() 的原因。我正在使用 ganache 建立一个运行良好的本地测试网络。谢谢!