Вложенные структуры, которые являются частью отображения, не работают в Solidity 0.5.0?

Следующий код успешно скомпилирован с 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

Кто-нибудь знает, как это решить?

Ответы (1)

Вы можете решить эту проблему, удалив слово publicиз файла mapping.

Сама структура хранения приемлема, и можно ожидать, что она будет работать. Однако «бесплатный» геттер для такой структуры в компиляторе не реализован.

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

Надеюсь, поможет.