Солидность: возвращение двухмерного массива с фиксированной длиной 1 размер дает исключение для массива вложенной памяти - PullRequest
0 голосов
/ 12 октября 2019

У меня всего два вопроса

Вопрос1: Скажите, пожалуйста, почему это работает:

pragma solidity ^0.5.0;

contract con1 {
    byte[100][] a;
    bytes32[] b;

    function getArrays () public view returns (byte[100][] memory arr_a, bytes32[] memory arr_b) {
        return (a, b);
    }
}

, а этого нет (без добавления прагматической экспериментальной строки)

pragma solidity ^0.5.0;

contract con1 {
    function getArrays () public view returns (byte[100][] memory arr_a, bytes32[] memory arr_b) {}
}

contract con2 {
    byte[100][] a;
    bytes32[] b;
    con1 iCon1;

    constructor(address _c1) public {
        iCon1 = con1(_c1);
    }

    function getArrays () public view returns (byte[100][] memory arr_a, bytes32[] memory arr_b) {
        return iCon1.getArrays();
    }
}

Выдает следующую ошибку:

Dynamic exception type: boost::exception_detail::clone_impl<langutil::UnimplementedFeatureError>
std::exception::what: Nested memory arrays not yet implemented here.
[dev::tag_comment*] = Nested memory arrays not yet implemented here.

Вопрос2:

Он компилируется после добавления - прагма экспериментальная ABIEncoderV2;

Скажите, пожалуйста, насколько это рискованноиспользовать экспериментальные функции для этой конкретной функции. Это не так много, просто вернуть 2d массив с 1 фиксированной длиной из другого контракта.

...