web3和remixIDE不同的返回值

时间:2018-12-06 18:18:44

标签: ethereum smartcontracts web3 web3js remix

嘿,我是以太坊的新手。 我目前正在尝试在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);
    }
  });
}

remix return values

web return values

两种方法都可以调用!只有返回值是不同的。 为什么是这样? 谢谢!

0 个答案:

没有答案