Следующий код успешно скомпилирован с Soldity 0.4.21 . С 0.5.0 он вызывает фатальную ошибку компиляции следующим образом:
UnimplementedFeatureError: Encoding type "struct TestNestedStructInMapping.structNested memory" not yet implemented.
Compilation failed. See above.
Truffle v5.0.0-beta.2 (core: 5.0.0-beta.2)
Solidity v0.5.0 (solc-js)
Node v8.11.1
Вот код:
pragma solidity ^0.5.0;
contract TestNestedStructInMapping {
// The struct that is nested.
struct structNested {
uint dummy;
}
// The struct that holds the nested struct.
struct structMain {
structNested gamePaymentsSummary;
}
// The map that maps a game ID to a specific game.
mapping(uint256 => structMain) public s_mapOfNestedStructs;
}
Вот ссылка на проект Truffle, который вы можете загрузить и протестировать:
https://github.com/roschler/nested-structs-tests.git
Кто-нибудь знает, как это решить?
Вы можете решить эту проблему, удалив слово public
из файла mapping
.
Сама структура хранения приемлема, и можно ожидать, что она будет работать. Однако «бесплатный» геттер для такой структуры в компиляторе не реализован.
Похоже, вы правы насчет критического изменения, учитывая, что оно без проблем компилируется в версии 0.4.25. Возможно, еще одна добрая душа откликнется и даст точный ответ об ограничении и о том, куда мы идем дальше. В любом случае, я ожидаю, что вы сможете продолжить свои собственные явные функции получения.
Надеюсь, поможет.