Мне нужно сохранить соответствие между строкой и элементами длиной 128 байтов в контракте solidity
.Проблема в том, что самый длинный тип данных байтов - bytes32
, что недостаточно долго, и если я пытаюсь сохранить свои строки в 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;
}
}