Codificador / Decodificador ABI
Codifica llamadas a función en calldata o decodifica input data de transacciones Ethereum, Polygon, BSC y cualquier EVM. Soporta tuples, arrays, structs.
¿Qué es el Codificador / Decodificador ABI?
El Codificador/Decodificador ABI (Application Binary Interface) es una herramienta gratuita para codificar y decodificar datos de llamadas de funciones de contratos inteligentes de Ethereum. Convierte firmas de funciones y parámetros legibles en calldata hexadecimal que se puede enviar a contratos inteligentes, y viceversa.
Esta herramienta es esencial para desarrolladores de blockchain que trabajan con contratos inteligentes, depuran transacciones o construyen dApps en Ethereum y cadenas compatibles con EVM.
¿Qué es ABI en Ethereum?
ABI (Application Binary Interface) es una especificación que define cómo interactuar con contratos inteligentes de Ethereum. Describe las funciones disponibles en un contrato, sus parámetros y tipos de retorno. El codificador ABI convierte llamadas de funciones en bytecode que la EVM puede ejecutar.
¿Qué es calldata?
Calldata son los datos codificados enviados con una transacción a un contrato inteligente. Consiste en un selector de función de 4 bytes (primeros 8 caracteres hex después de 0x) seguido de parámetros codificados en ABI. Por ejemplo, llamar a transfer(address,uint256) genera calldata como 0xa9059cbb000000...
¿Cómo codifico una llamada de función?
Ingrese la firma de la función (ej., transfer(address,uint256)) y los parámetros como un array JSON. La herramienta generará el calldata completo incluyendo el selector de función y los parámetros codificados. Este calldata se puede usar en transacciones web3 o para depuración.
¿Cómo decodifico datos de entrada de transacción?
Pegue los datos de entrada de la transacción (calldata) de cualquier transacción EVM. Si conoce la firma de la función, proporciónela para decodificación detallada de parámetros. De lo contrario, la herramienta mostrará el selector de función y datos en bruto. Esto es útil para analizar transacciones en exploradores de bloques.
¿Qué blockchains están soportadas?
Esta herramienta funciona con todas las blockchains compatibles con EVM incluyendo Ethereum, BSC, Polygon, Arbitrum, Optimism, Avalanche y cualquier otra cadena que use la Máquina Virtual de Ethereum y siga los estándares de codificación ABI.
¿Cómo se calcula el selector de 4 bytes desde la firma?
Toma la firma como transfer(address,uint256), aplica Keccak-256 (NO SHA-256 normal) y coge los 4 primeros bytes. La firma debe NO tener espacios y usar nombres canónicos: address, uint256 no uint, bytes32 no bytes. transfer(address,uint256) genera 0xa9059cbb...

¿Cómo maneja ABI los tipos dinámicos como string y bytes?
Los tipos dinámicos usan esquema head/tail: head contiene offsets (32 bytes cada uno), tail contiene longitud + datos paddeados. Para transfer(address,uint256) todos son estáticos y se empaquetan directo. Para setMessage(string), el string emite su offset en head y su longitud UTF-8 + contenido paddeado a 32 bytes en tail.
¿Puedo decodificar calldata sin saber la firma?
Parcialmente. Los primeros 4 bytes son el selector — consúltalo en bases abiertas como 4byte.directory o Openchain.xyz para encontrar firmas candidatas. Sin la firma no puedes decodificar parámetros con fiabilidad porque ABI conoce los tipos. La herramienta enlaza con estas bases para lookup.
¿Por qué mi calldata difiere de la salida de ethers.js?
Ethers.js usa alias canónicos (uint -> uint256, int -> int256, bytes dinámicos) y puede diferir si pasas tipos no canónicos. Revisa el orden de parámetros — los arrays JSON deben coincidir con la firma. Ethers también codifica function() como selector 0x sin args; algunas herramientas omiten los bytes finales en cero.
¿Se envía mi calldata a algún servidor? ¿Es privada esta herramienta?
La codificación y decodificación se ejecutan 100% en tu navegador con ethers.js — ningún calldata, firma ni parámetro se sube a nuestros servidores. Es segura para datos de transacciones sin firmar o pendientes. La única llamada de red opcional es la búsqueda de selector desconocido, que envía solo el selector público de 4 bytes (nunca claves privadas, frases semilla ni cargas completas) a registros públicos de firmas; omítela introduciendo tú mismo la firma.
¿Cómo paso una tupla, struct o array anidado como parámetro?
Los parámetros son un array JSON en el orden de la firma. Una tupla/struct es a su vez un array JSON de sus campos en orden: para foo((address,uint256),bool) pasa [["0xabc...", "100"], true]. Los arrays dinámicos son arrays JSON: para bar(uint256[],address[]) pasa [["1","2","3"], ["0x...","0x..."]]. Anida tan profundo como exija el tipo, y cita siempre los enteros grandes como cadenas para evitar la pérdida de precisión de los floats de JavaScript.
¿Cómo decodifico calldata cuando no tengo el ABI ni la firma?
Cambia a Decodificar, deja en blanco la firma de función y pega el calldata. La herramienta lee el selector de 4 bytes y consulta automáticamente los registros públicos de firmas Openchain.xyz y 4byte.directory, y luego lista cada firma candidata legible. Haz clic en una candidata y la herramienta vuelve a decodificar la carga en una lista de parámetros con tipos — convirtiendo un blob desconocido de Etherscan o un multisig en una transacción legible con un solo clic.
Casos de Uso Comunes
- Codificar transferencias de tokens ERC20 para interacciones con contratos
- Decodificar datos de entrada de transacciones desde Etherscan o exploradores de bloques
- Probar llamadas de funciones de contratos inteligentes antes del despliegue
- Depurar transacciones fallidas analizando calldata
- Construir transacciones personalizadas para wallets multisig
- Analizar interacciones de protocolos DeFi (swaps de Uniswap, etc.)
