En mi código de solidez utilizo bytes32
generado por keccak256("STRING_VALUE',INTEGER)
para almacenar valores en el mapa.
Uno de los valores de muestra que se generan es
0x728021dd1e605706a029ef0f0a96028fab0d170608cbfcc8b28ff7786d985dcf
Ahora quiero generar este hash en mi código JS, he intentado usar bibliotecas como js-sha3
, keccak
, solidity-sha3
. Ninguno de ellos toma Integer como parámetro y también devuelve un hash que es irrelevante para lo que se genera arriba.
¿Cómo genero un hash similar en el JS?
Simplemente convierta su número entero en base 16 y agregue a la cadena original, finalmente, calcule el hash. Será igual.
function solSha3 (...args) {
args = args.map(arg => {
if (typeof arg === 'string') {
if (arg.substring(0, 2) === '0x') {
return arg.slice(2)
} else {
return web3.toHex(arg).slice(2)
}
}
if (typeof arg === 'number') {
return leftPad((arg).toString(16), 64, 0)
} else {
return ''
}
})
args = args.join('')
return '0x' + web3.sha3(args, { encoding: 'hex' })
}
Para obtener más detalles, consulte el enlace de Github