Не удалось вернуть массив строк из геттера - PullRequest
1 голос
/ 24 апреля 2019

У меня есть функция получения контракта солидности для массива строк:

string[] public flightsRegistered;

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

{
  return flightsRegistered;
}

При компиляции с трюфелем я получаю

Ошибка компиляции трюфеля

TypeError: Этот тип поддерживается только в новом экспериментальном кодере ABI.Используйте "Прагма экспериментальная ABIEncoderV2;"чтобы включить функцию.возвращает (строка [])

Любая другая работа?

Web3 v1.0.0-beta.37

Трюфель v5.0.9

Твердость v0.4.24 (solc-js)

1 Ответ

1 голос
/ 25 апреля 2019

В настоящее время солидность поддерживает возврат массива, только если вы используете прагматический эксперимент ABIEncoderV2. Если вы не хотите использовать это, вам нужно создать еще одну функцию, которая будет возвращать длину массива, а в 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;
}
}
...