Массив строк в solidity

я столкнулся с довольно распространенной проблемой, которую, похоже, я не могу решить элегантно и эффективно в солидности.

Я должен передать произвольный длинный массив произвольных длинных строк контракту солидности.

на мой взгляд, это должно быть что-то вроде

function setStrings(string [] row)

но, кажется, это невозможно сделать.

Как я могу решить эту проблему?

4 ответов


это ограничение прочности, и причина в том, что string-Это в основном массив байтов произвольной длины (т. е. byte[]), а так string[] - двумерный байтовый массив (т. е. byte[][]). Согласно солидности ссылок, двумерные массивы в качестве параметров, пока не поддерживаются.

может ли контрактная функция принимать двумерный массив?

Это еще не реализовано для внешних вызовов и динамических массивы - вы можете использовать только один уровень динамических массивов.

один из способов решить эту проблему - если вы знаете в advanced максимальную длину всех ваших строк( что в большинстве случаев возможно), то вы можете сделать это:

function setStrings(byte[MAX_LENGTH][] row) {...}


строковые массивы как параметры еще не поддерживаются в solidity.


вы можете преобразовать элементы массива в байтовую строку, а затем десериализовать эту байтовую строку обратно в массив внутри функции. Хотя это может оказаться довольно дорогим, вы можете попробовать, если у вас нет выбора. Вы можете следовать этой короткая статья для сериализации / десериализации любого типа данных в solidity.


массив строк недоступен в Solidity потому что String-это в основном массив символов Вложенные динамические массивы не реализованы