¿Es imposible usar una matriz de cadenas como argumento para la función de solidez?

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?

Respuestas (2)

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.)

Tal vez esto podría agregarse a ethereum.stackexchange.com/q/305/42 ya que tomar una matriz de cadenas es fácil y común en la mayoría de los otros idiomas.

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.

¿Por qué se rechazó esta respuesta? Describe una solución alternativa que debería ayudar, incluso si el costo del gas podría ser mayor.
Solo porque agregué el enlace a la respuesta en lugar de escribir el artículo completo aquí.