Tengo un contrato que devuelve una variable de tipo bytes32 y actualmente lo estoy probando con truffle y javascript. los datos originales
['Roberto', 'Juan', 'Andrea']
Esta matriz es lo que obtengo como respuesta de mi contrato:
[ '0x526f626572746f00000000000000000000000000000000000000000000000000',
'0x4a75616e00000000000000000000000000000000000000000000000000000000',
'0x416e647265610000000000000000000000000000000000000000000000000000' ]
Y este mi codigo
let cands = [];
let length = Number(await voting.candidateListLength());
for (let i = 0; i < length; i++)
cands.push(web3.toAscii(await voting.candidateList(i)));
console.log(cands);
El uso del método web3.toAscii() en cada elemento para obtener una cadena amigable produce lo siguiente:
[ 'Roberto\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
'Juan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
'Andrea\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' ]
¿Hay alguna forma de eliminar los caracteres adicionales que vienen con los datos originales?
web3.toUtf8()
hará la magia por ti
El web3.toAscii
no hará eso por ti. Este es el código original ( ref ):
var str = "";
var i = 0, l = hex.length;
if (hex.substring(0, 2) === '0x') {
i = 2;
}
for (; i < l; i+=2) {
var code = parseInt(hex.substr(i, 2), 16);
str += String.fromCharCode(code);
}
pero nadie te impide crear tu propia función para evitar este comportamiento. Ejemplo:
function toAscii(hex) {
var str = "";
var i = 0, l = hex.length;
if (hex.substring(0, 2) === '0x') {
i = 2;
}
for (; i < l; i+=2) {
var code = parseInt(hex.substr(i, 2), 16);
if(code != 0) {
str += String.fromCharCode(code);
}
}
return str;
}
web3 1.0 debería solucionar este problema ref usandoweb3.utils.hexToUtf8
web3.utils.hexToUtf8
buena vibración
bytes32
y nostring
? (en cuyo caso, podrías simplemente deshacerte delweb3.toAscii
lado del cliente).roberto c