查看函数错误:返回的值无效,是否耗尽了汽油?



我在Ganache中调用部署的智能合约中的方法。其他方法工作正常,但是视图函数返回一个错误。

下面是Solidity中的view函数:

mapping (address => Count) private counts;
function getCounts (address user)
public
view
returns(uint a, uint b, uint total){
return(counts[user].a, counts[user].b, counts[user].total);
}
下面是我如何调用这个方法的:
web3.eth.getAccounts(function(error, accounts){
if(error){
console.log(error);
}
var account = accounts[0];
contracts.SampleContract.deployed().then(function(instance){
credsInstance = instance;

return credsInstance.getCounts.call(account, {from: account});
}).then(function(creds){
console.log(creds[0]);
}).catch(function(error){
console.log(error.message);
});
});

getCounts的ABI

{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getCounts",
"outputs": [
{
"internalType": "uint256",
"name": "academic",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "workExp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "total",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"constant": true
},

我得到这个错误:

返回值无效,是否运行完Gas?如果您没有为正在检索数据的合约使用正确的ABI,从不存在的块号请求数据,或者查询未完全同步的节点,您也可能会看到此错误。

我还有最新的web3。我该如何解决这个问题?

编辑:

初始化合同时,我使用了Truffle的官方文档。下面是代码:

var contract = require('@truffle/contract');
$.getJSON('../build/contracts/SampleContract.json', function(data) {
// Get the necessary contract artifact file and instantiate it with @truffle/contract
var CredsArtifact = data;
contracts.SampleContract = TruffleContract(CredsArtifact);

// Set the provider for our contract
contracts.SampleContract.setProvider(web3Provider);
});

我也有同样的问题,我使用的是Hardhat。

在花了几个小时没有解决后,我切换了Rinkeby测试网络,一切都很顺利。

参考:https://ethereum.stackexchange.com/a/129721/30431

最新更新