Si trato de definir una función usando una matriz de cadenas como argumento, solc me da el siguiente error:
Error: Internal type is not allowed for public or external functions.
function test(string[] x){}
^--------^
Esto funciona bien:
function test(int[] x){}
Y también esto:
function test(string[] x) private {}
¿Me estoy perdiendo algo obvio?
No, no lo creo. Según tengo entendido, Solidity aún no tiene una forma integrada de deserializar matrices de cadenas. Puede hacer trampa cuando el contrato pasa una matriz que él mismo creó, por lo que funciona con funciones privadas. Pero si desea tomar matrices de cadenas desde el exterior, tendrá que manejar la serialización y deserialización de una cadena (o bytes) usted mismo. (Por ejemplo, concatenar elementos de longitud fija, o usar caracteres nulos como separadores, o usar comas, etc.)
Puede convertir los elementos de la matriz en una cadena de bytes y luego deserializar esa cadena de bytes de nuevo a la matriz dentro de la función. Aunque esto puede resultar bastante costoso, puede probarlo si no tiene otra opción. Puede seguir este breve artículo para serializar/deserializar cualquier tipo de datos en Solidity.
ética