Tengo contrato con diferentes categorías. Podemos suponer que son los siguientes aquí:
Supongamos que quiero agregar una nueva ciudad a la categoría ciudades. Supongo que esto tiene que ser una matriz, ya que necesito ser iterable.
Este código no compila pero muestra el tipo de cosas que quiero lograr
mapping(string => string[]) Categories;
// Add a record
function addCity(string _type, string _city) {
Categories[_type].push(_city);
}
Necesitaré que estas cadenas (las ciudades) se transmitan y aparentemente eso aún no es posible en Ethereum (ver aquí ).
Alternativamente, intenté hacer esto (omitiendo el código irrelevante)
mapping(string => bytes32[]) Categories;
function addCity(string _type, bytes32 _city) {
Categories[_type].push(_city);
}
Que compila. Sin embargo, cuando agrego
599437d068e6196203c2ec23
vuelvo
0x3539393433376430363865363139363230336332656332330000000000000000
y no sé qué hacer para convertirlo 599437d068e6196203c2ec23
al obtener el valor. Lo he intentado web3.toAscii()
pero no funcionó.
Mi pregunta es: ¿hay alguna forma alternativa que me esté faltando o, si no, cómo puedo volver a convertir el valor cuando lo necesito?
toAscii
me da el resultado que parece que estabas esperando, después de eliminar el relleno 0:
> hex_val = '0x3539393433376430363865363139363230336332656332330000000000000000'
"0x3539393433376430363865363139363230336332656332330000000000000000"
> padded_str = web3.toAscii(hex_val)
"599437d068e6196203c2ec23\x00\x00\x00\x00\x00\x00\x00\x00"
> first_null = padded_str.indexOf('\x00')
24
> trimmed_str = padded_str.slice(0, first_null)
"599437d068e6196203c2ec23"
tallista