¿Cómo generar keccak256 (CADENA, ENTERO) desde Javascript?

En mi código de solidez utilizo bytes32generado 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?

Respuestas (1)

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