web-dev-qa-db-fra.com

Tableau de chaînes en solidité

Je suis tombé sur un problème assez commun qui semble ne pas pouvoir être résolu de manière élégante et efficace en toute solidité.

Je dois passer un long tableau arbitraire de longues chaînes arbitraires à un contrat de solidité.

Dans mon esprit, ça devrait être quelque chose comme

function setStrings(string [] row)

mais il semble que cela ne peut pas être fait.

Comment puis-je résoudre ce problème?

8
Fabio

Ceci est une limitation de Solidity, et la raison en est que string est fondamentalement un tableau d'octets de longueur arbitraire (c'est-à-dire byte[]), et donc string[] est un tableau d'octets à deux dimensions (c'est-à-dire byte[][]). Selon Références de solidité , les tableaux bidimensionnels en tant que paramètres ne sont pas encore pris en charge.

Une fonction de contrat peut-elle accepter un tableau à deux dimensions?

Ceci n'est pas encore implémenté pour les appels externes et les tableaux dynamiques - vous ne pouvez utiliser qu'un seul niveau de tableaux dynamiques.

Une façon de résoudre ce problème est de savoir si vous connaissez à l'avance la longueur maximale de toutes vos chaînes (ce qui est possible dans la plupart des cas), vous pouvez le faire:

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

23
Dat Nguyen

string array n'est pas disponible dans Solidity car String est fondamentalement un tableau de caractères Tableaux dynamiques imbriqués non implémentés 

1
Nguyen Nguyen

Vous pouvez convertir les éléments du tableau en chaîne d'octet, puis désérialiser cette chaîne d'octet dans le tableau de la fonction. Bien que cela puisse s'avérer assez coûteux, vous pouvez l'essayer si vous n'avez pas le choix. Vous pouvez suivre this short article pour sérialiser/désérialiser tout type de données en toute solidité.

1
Vaibhav Saini

Les tableaux de chaînes en tant que paramètres ne sont pas encore pris en charge de manière solide.

1
AppsAndGo