Actualmente estoy usando ether.camp para crear un contrato. En esta etapa simplemente obtiene y almacena algunos valores. Sin embargo, cuando intento obtener los valores, ¿están en bytes/hexadecimal aunque el tipo de retorno sea una cadena?
¿Cómo convierto esto de nuevo en cadena en el contrato de solidez? Intenté cómo convertir un bytes32 en una cadena, pero no tuve suerte .
Por ejemplo, almacenar "Hello World!" devoluciones0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c48656c6c6f20576f726c64210000000000000000000000000000000000000000
contract HelloWorld {
struct Items {
address id;
string data;
}
mapping(address => Items) items;
function getItem(address key) returns (string) {
return items[key].data;
}
function addItem (address key, string data) returns (bool) {
Items item = items[key];
item.data = data;
}
}
}
Puedo ver en la barra lateral de transacciones de ethercamp del IDE el mensaje "¡Hola mundo!" se guarda como una cadena pero getItem()
simplemente no puedo recuperarla?
Usa web3.js como contractInstance.getItem.call(key)
.
O marque getItem como constante: function getItem(address key) constant returns (string)
y luego puede usar:
contractInstance.getItem(key)
web3.js decodificará automáticamente los bytes por usted. Los contratos solo tienen datos binarios, hexadecimal es una forma más compacta de ver esos datos, y es por eso que ves hexadecimal. Los datos binarios también se codifican de acuerdo con un ABI , de modo que los valores se pueden distinguir, por ejemplo, entre lo que es solo un número y una cadena.
En general, también puede utilizar:
> web3.toUtf8("0x48656c6c6f20576f726c642100000000000000000000000000000000000000000") Hola Mundo!
usuario1202278
constant
lo resuelve, pero sé que entiendo que webjs lo decodificará automáticamente por míética
usuario1202278
items.count
oitems.length
en mente.tjaden hess