Я провел некоторое исследование по этой проблеме, но не смог найти однозначного ответа.Я использую твердость 0.4.24.
У меня есть такой контракт:
contract {
struct FutureOperation is Ownable {
uint256 date;
uint256 price;
uint256 amount;
string name;
}
FutureOperation[] futureOperations;
// ...
function getAllFutureOperations() public onlyOwner returns (FutureOperation[]) {
return futureOperations;
}
}
Когда я компилирую это в Remix, я получаю следующую ошибку:
browser/myfuturetoken.sol:53:64: TypeError: This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature.
Я обнаружил некоторые сообщения в блоге, в которых говорилось, что я должен де-структурировать поля в структуре, чтобы они возвращались как массивы примитивных типов.Итак, в этом случае это будет выглядеть примерно так:
function getAllFutureOperations() public onlyOwner returns (uint256[] dates, uint256[] prices, uint256[] amounts, string[] names) {
return futureOperations;
}
Есть ли альтернатива этому?Способны ли новые компиляторы возвращать массив структур?
Спасибо.