嘿,我是以太坊的新手。 我目前正在尝试在Web应用程序中进行基本的调用/交易。 我写了一个返回字符串数组和地址数组的方法。 如果我在remixIde中调用此方法,则它正在工作,并且我获得了两个数组的值。但是,web3中的同一调用仅返回地址数组的值。字符串数组在那里,但所有值都为空。
我使用Ganache链进行测试,并将混音效果连接到它。 web3使用Metamask作为提供程序。我将“ Pragma实验性ABIEncoderV2”与Solidity一起使用。
Solidity函数:
function getAuthorityNames() view public returns(string[], address[]){
string[] memory names = new string[](authoritiesAddr.length);
for(uint256 i=0; i < authoritiesAddr.length ;i++){
names[i]=authorities[authoritiesAddr[i]].name;
}
return(names,authoritiesAddr);
}
js代码:
getAuthority: function(web3) {
var mainContractObj = web3.eth.contract(ethFunctions.mainContractAbi);
var mainContract = mainContractObj.at(ethFunctions.mainContractAddr);
mainContract.getAuthorityNames.call(function(error, result) {
if (error) {
console.log("Error with transaction!");
console.log(error);
} else {
console.log("Transaction successful!");
console.log(result);
}
});
}
两种方法都可以调用!只有返回值是不同的。 为什么是这样? 谢谢!