【问题标题】:Could not return array of Strings from getter无法从 getter 返回字符串数组
【发布时间】:2019-04-24 13:52:45
【问题描述】:

我有一个用于字符串数组的solidity合约getter函数:

string[] public flightsRegistered;

function getFlightsRegistered
                          (
                          )
                          public
                          view
                          returns(string[])

{
  return flightsRegistered;
}

在使用 truffle 编译时,这就是我得到的

Truffle 编译错误

TypeError:此类型仅在新的实验性 ABI 中受支持 编码器。使用“pragma Experimental ABIEncoderV2;”启用 特征。 返回(字符串[])

还有其他解决方法吗?

Web3 v1.0.0-beta.37

松露 v5.0.9

坚固 v0.4.24 (solc-js)

【问题讨论】:

  • 错误信息很清楚。您是否有难以理解的具体内容?
  • 是的,这是将字符串数组返回给 DAPP 的正确方法吗?

标签: ethereum solidity smartcontracts web3 truffle


【解决方案1】:

如果你使用 pragma experimental ABIEncoderV2,目前solidity 只支持返回数组。如果你不想使用它,你必须再创建一个函数来返回数组的长度,并在 Dapp 中创建一个 for 循环并通过索引访问数组的元素。下面是示例代码

pragma solidity >=0.4.22 <0.6.0;
contract Array {

string[] public flightsRegistered;


function getFlightsRegistered(uint _index) public view returns(string memory){
  return flightsRegistered[_index];
}

function totalFlightsRegistered() public view returns (uint ){
    return flightsRegistered.length;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2020-03-18
    • 1970-01-01
    • 2021-09-14
    • 2022-01-23
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多