Wenn ich versuche, eine Funktion mit einem Array von Strings als Argument zu definieren, gibt mir solc den folgenden Fehler:
Error: Internal type is not allowed for public or external functions.
function test(string[] x){}
^--------^
Das funktioniert gut:
function test(int[] x){}
Und das gilt auch:
function test(string[] x) private {}
Übersehe ich etwas Offensichtliches?
Nein, das glaube ich nicht. So wie ich es verstehe, hat Solidity noch keine eingebaute Möglichkeit, String-Arrays zu deserialisieren. Es kann schummeln, wenn der Vertrag ein selbst erstelltes Array an sich selbst weitergibt, weshalb es mit privaten Funktionen arbeitet. Aber wenn Sie String-Arrays von außen nehmen möchten, müssen Sie die Serialisierung und Deserialisierung von einem String (oder Bytes) selbst durchführen. (z. B. Verketten von Elementen mit fester Länge oder Verwenden von Nullzeichen als Trennzeichen oder Verwenden von Kommas usw.)
Sie können die Array-Elemente in einen Byte-String konvertieren und diesen Byte-String dann wieder in das Array innerhalb der Funktion deserialisieren. Obwohl sich dies als ziemlich teuer erweisen kann, können Sie es versuchen, wenn Sie keine Wahl haben. Sie können diesem kurzen Artikel folgen , um jeden Datentyp in Solidität zu serialisieren/deserialisieren.
eth