我一直在围绕这个问题进行研究,但找不到确切答案。我正在使用稳固度0.4.24。
我有这样的合同:
contract {
struct FutureOperation is Ownable {
uint256 date;
uint256 price;
uint256 amount;
string name;
}
FutureOperation[] futureOperations;
// ...
function getAllFutureOperations() public onlyOwner returns (FutureOperation[]) {
return futureOperations;
}
}
当我在Remix中编译它时,出现以下错误:
browser/myfuturetoken.sol:53:64: TypeError: This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature.
我发现一些博客文章说,我应该对结构中的字段进行解构,以将它们作为原始类型的数组返回。因此,在这种情况下,它将看起来像这样:
function getAllFutureOperations() public onlyOwner returns (uint256[] dates, uint256[] prices, uint256[] amounts, string[] names) {
return futureOperations;
}
有替代方案吗?较新的编译器是否能够返回结构数组?
谢谢。
答案 0 :(得分:1)
如错误所述,编译器尚不支持返回动态数组。但是,实验功能支持它。要使用实验性编译器,您需要进行如下更改,
pragma experimental ABIEncoderV2;
contract myContract{
struct FutureOperation {
uint256 date;
uint256 price;
uint256 amount;
string name;
}
string[] futureOperations;
function getAllFutureOperations() public view returns (string[] memory) {
return futureOperations;
}
}
注意:请确保不要在生产版本中使用实验性的东西