Возвращение массива Struct в солидность - PullRequest
0 голосов
/ 22 декабря 2018

Это мой код контракта.Здесь я пытаюсь сохранить координаты конкретной поездки.При хранении информации контракт оформляется штрафом.Но когда я получаю данные, он должен дать массив координат.Но он выдает ошибку.

причина: 'недостаточно данных для типа uint256'

contract TripHistory {
       struct Trip {
           string lat;
           string lon;
       }
        mapping(string => Trip[]) trips;

        function getTrip(string _trip_id) public view returns (Trip[]) {
            return trips[_trip_id];
        }
        function storeTrip(string _trip_id, string _lat, string _lon) public  {
           trips[_trip_id].push(Trip(_lat, _lon));
        }

}

Чего мне здесь не хватает.Есть ли другой способ добиться того, что я пытаюсь здесь?

PS: я новичок в солидности.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Невозможно вернуть массив структуры.

0 голосов
/ 23 декабря 2018

Первая из возвращаемых структур не поддерживается напрямую в Solidity.Вместо этого вам нужно вернуть каждый отдельный элемент в структуре, как показано ниже.

Function xyz(uint256 _value) returns(uint256 User.x, uint256 User.y)
public {}

Но есть экспериментальная функция, которая поможет вам вернуть struct.Все, что вам нужно сделать, это добавить следующее после вашей первой строки прагмы

pragma experimental ABIEncoderV2;

, а затем продолжить с вашим кодом.Это должно работать без изменений в вашем коде.

Пример структуры возврата abiencoderv2 можно найти по этой ссылке

...