Calculadora de selectores de función & topics de eventos

Pega la firma de una función o evento para obtener su selector y hash de topic, o pega un selector que encontraste en el calldata para ver a qué función común pertenece.

Los nombres de parámetros, function, indexed, memory y la cláusula returns se eliminan automáticamente; uint se convierte en uint256.

Se calcula en tu navegador con JavaScript. Las direcciones nunca se suben ni se almacenan.

¿Qué es un selector de función?

Un selector de función son los primeros 4 bytes del hash Keccak-256 de la firma canónica de una función: el nombre seguido de los tipos de los parámetros entre paréntesis, sin espacios ni nombres, por ejemplo transfer(address,uint256) → 0xa9059cbb. Forma los primeros 4 bytes del calldata de cada llamada a un contrato y le indica al contrato qué función ejecutar; los bytes restantes son los argumentos codificados en ABI.

Selectores comunes

La tabla se calcula en esta página con la misma implementación de Keccak que usa la herramienta, así que también sirve como autocomprobación. Pega cualquier selector en el cuadro de arriba para buscarlo.

Ejemplo práctico

Toma function approve(address spender, uint256 amount) external returns (bool). Quita la palabra clave, los nombres de parámetros, la visibilidad y el tipo de retorno para obtener approve(address,uint256). El Keccak-256 de esa cadena ASCII empieza por 0x095ea7b3…, así que el selector es 0x095ea7b3. El calldata para aprobar 1 USDT (6 decimales) es el selector, la dirección del spender rellenada por la izquierda hasta 32 bytes y 1000000 como palabra de 32 bytes: 4 + 32 + 32 = 68 bytes.

Selectores ERC-20 que verás con más frecuencia

FirmaSelector
totalSupply()0x18160ddd
balanceOf(address)0x70a08231
transfer(address,uint256)0xa9059cbb
transferFrom(address,address,uint256)0x23b872dd
approve(address,uint256)0x095ea7b3
allowance(address,address)0xdd62ed3e

Errores comunes

Formatos de entrada aceptados

Para construir o leer el calldata completo, continúa con el codificador / decodificador ABI.

Preguntas frecuentes

¿Qué es un selector de función?

Los primeros cuatro bytes del hash Keccak-256 de la firma canónica de la función: nombre más tipos de parámetros, sin espacios ni nombres, por ejemplo transfer(address,uint256) → 0xa9059cbb. La EVM lo usa para dirigir la llamada a la función correcta.

¿Por qué debo usar uint256 y no uint?

La firma canónica usa los nombres completos de los tipos. uint es un alias de uint256 en Solidity, y hacer el hash del alias da un selector incorrecto. Esta herramienta reescribe uint/int automáticamente y elimina los nombres de parámetros y las palabras clave de ubicación de datos.

¿Cómo se escriben las tuplas (structs)?

Como listas de tipos entre paréntesis: exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160)). Escribe los campos del struct en orden; el nombre del struct no forma parte de la firma.

¿Qué es un topic de evento?

El Keccak-256 completo de 32 bytes de la firma del evento, almacenado como topics[0] en cada log que emite ese evento, por ejemplo Transfer(address,address,uint256) → 0xddf252ad…. Los parámetros indexed se convierten en topics[1..3].

¿Cuántos selectores posibles hay?

4 bytes dan 232 valores posibles, unos 4300 millones. Con decenas de miles de firmas conocidas, las colisiones son raras pero reales; dentro de un mismo contrato el compilador de Solidity rechaza dos funciones con el mismo selector.

¿Pueden dos funciones compartir un selector?

Sí, existen colisiones porque solo se usan 4 bytes; por eso la búsqueda puede devolver varias firmas y la EVM no puede distinguirlas dentro del mismo contrato. Para selectores desconocidos, usa las bases de datos públicas 4byte.directory y openchain.xyz.