Solidity TypeError: This type is only supported in the new experimental ABI encoder

Solidity TypeError: This type is only supported in the new experimental ABI encoder

我正在练习我的 Solidity 技能,虽然我预计会出现错误,但没想到会出现这个错误

TypeError: This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature. function getArray() public view returns (string[]) {

这是我在 Remix 中的代码:

pragma solidity ^0.4.17;

contract Test {
    string[] public myArray;

    function Test() public {
        myArray.push("hola");
    }

    function getArray() public view returns (string[]) {
        return myArray;
    }
}

这里有什么?

这是因为标准ABI不支持动态嵌套数组吗?

我只是想确认一下我对错误的理解。它告诉我,函数参数和 return 值中的任意嵌套数组在我当前的版本中不受支持,但在新的实验性 ABI 编码器中,这是它的意思吗?

那是因为string[]

是的,因为还不支持动态嵌套数组,它仍处于实验阶段。您可以通过在源代码顶部添加 pragma experimental ABIEncoderV2; 来启用该功能。

web3 包在最新的 web3 1.0.0-beta36 版本中才开始支持它。 Truffle 仍然依赖于以前的 web3 版本,所以如果你想使用 Truffle 测试你的合约,你需要等待一段时间(大约一个月)。