У меня всего два вопроса
Вопрос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 фиксированной длиной из другого контракта.