Массив строк в solidity
я столкнулся с довольно распространенной проблемой, которую, похоже, я не могу решить элегантно и эффективно в солидности.
Я должен передать произвольный длинный массив произвольных длинных строк контракту солидности.
на мой взгляд, это должно быть что-то вроде
function setStrings(string [] row)
но, кажется, это невозможно сделать.
Как я могу решить эту проблему?
4 ответов
это ограничение прочности, и причина в том, что string
-Это в основном массив байтов произвольной длины (т. е. byte[]
), а так string[]
- двумерный байтовый массив (т. е. byte[][]
). Согласно солидности ссылок, двумерные массивы в качестве параметров, пока не поддерживаются.
может ли контрактная функция принимать двумерный массив?
Это еще не реализовано для внешних вызовов и динамических массивы - вы можете использовать только один уровень динамических массивов.
один из способов решить эту проблему - если вы знаете в advanced максимальную длину всех ваших строк( что в большинстве случаев возможно), то вы можете сделать это:
function setStrings(byte[MAX_LENGTH][] row) {...}
вы можете преобразовать элементы массива в байтовую строку, а затем десериализовать эту байтовую строку обратно в массив внутри функции. Хотя это может оказаться довольно дорогим, вы можете попробовать, если у вас нет выбора. Вы можете следовать этой короткая статья для сериализации / десериализации любого типа данных в solidity.
массив строк недоступен в Solidity потому что String-это в основном массив символов Вложенные динамические массивы не реализованы