¿Cómo saber el código hexadecimal que se utilizará en los datos para llamar a una función de contrato específica?

Por ejemplo, en el sitio BAT ico , puede ver la dirección del contrato de venta colectiva , el ABI y también una cadena para usar en la parte de datos de su transacción si no desea llamar a la función del contrato usando el ABI.

El dato a poner en la transacción es 0xb4427263 que corresponde a la función createTokens().

¿Cómo lograron obtener este valor hexadecimal 0xb4427263? ¿Tuvieron que hacer una transacción usando el ABI primero y luego obtener los datos de la transacción o hay una forma directa de obtener el valor sin enviar una transacción?

Respuestas (1)

Para este ejemplo específico, toma la firma del método createToken()y calcula su hash SHA3 0xb4427263722d66ea37c3d76cba9c56b0f1a7d6e049effc1f9f75567547fd47eb, luego toma los primeros 4 bytes (8 caracteres hexadecimales) y tiene 0xb4427263. Como no hay argumentos para pasar, esos son todos los datos.

web3.sha3("createTokens()").substr(0,10)

Las especificaciones completas para esta codificación se pueden encontrar en https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI