2017-03-10 1 views
2

Je suis tombé sur un problème assez commun qu'il semble que je ne peux pas résoudre avec élégance et efficacité dans la solidité.Tableau de cordes dans la solidité

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

Dans mon esprit, il devrait être quelque chose comme

function setStrings(string [] row) 

, mais il semble que ce ne peut pas être fait.

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

Répondre

13

Ceci est une limitation de la solidité, et la raison en est que string est essentiellement un tableau d'octets de longueur arbitraire (à savoir byte[]), et ainsi string[] est un tableau d'octets à deux dimensions (à savoir byte[][]). Selon Solidity references, 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 savez à l'avance la longueur maximum de toutes vos cordes (qui, dans la plupart des cas sont possibles), alors vous pouvez le faire:

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

1

Les tableaux de chaînes en tant que paramètres ne sont pas encore pris en charge dans la solidité.