Solidity 中的动态数组

Dynamic array in Solidity

我想声明一个简单的数组(动态列表),一个 set 函数来压入一个字符串和一个 get 函数,其中 returns 所有字符串都保存在动态列表中数组。

我搜索了很多但找不到这个简单的东西。

这是我的解决方案,您需要 experimental ABIEncoderV2 到 return 个字符串数组。

pragma solidity ^0.5.2;
pragma experimental ABIEncoderV2;

contract Test {

    string[] array;

    function push(string calldata _text) external {
        array.push(_text);
    }

    function get() external view returns(string[] memory) {
        return array;
    }
}

最后,如果您想在应用程序中使用 web3j(对于 java)或 web3js(javascript)等工具与您的智能合约进行交互,由于这些库中存在一些错误,因此无法使用动态数组。
在这种情况下,您应该序列化您的输出数组。如果您有输入数组,同样适用。