我需要存储一个字符串到solidity
合同中 128 字节长的项目之间的映射。问题是最长的字节数据类型是bytes32
,它不够长,如果我尝试将字符串存储在 a 中,则会string array
出现以下错误:
This type is only supported in the experimental ABI encoder. Use "pragma experimental abiencoderv2;" to enable this feature
所以我不能使用bytes32
,因为它不够大。我不能使用bytes
,因为它不受支持。而且我不能使用string[]
,因为它是实验性的,不推荐在生产中使用。
有什么解决办法吗?
这是我正在使用的合同:
pragma solidity ^0.4.24;
contract SomeData {
struct Data {
string id;
string[3] items;
}
mapping (string => Data) dataItems;
function addData(string id, string[3] items) public {
Data memory data = Data(id, items);
data.id = id;
data.items = items;
dataItems[id] = data;
}
function getDataItems(string id) public view returns (string[3]){
return dataItems[id].items;
}
}