Decodificador de ABI de Ethereum gratis

Decodifica los datos de llamada a contratos inteligentes de Ethereum usando un ABI en JSON. Analiza selectores de función y decodifica parámetros uint256, address, bool, string y bytes32.

Actualizado

Share:
Home/Utility Tools/Ethereum ABI Decoder

Ethereum ABI Decoder

Decode Ethereum transaction calldata using ABI definitions. Inspect function calls and parameter values.

ABI JSON

Preguntas Frecuentes

¿Qué tipos de parámetros se pueden decodificar?

uint256, address, bool, string y bytes32. Los tipos dinámicos (arrays, tuplas) requieren inspección manual.

¿Qué es un selector de función?

Los primeros 4 bytes de los datos de llamada, derivados del hash keccak256 de la firma de la función (por ejemplo, "transfer(address,uint256)").

¿Es gratis?

Sí, completamente gratis.

¿Están seguros mis datos con esta herramienta?

Por supuesto. El Decodificador de ABI de Ethereum procesa todo del lado del cliente, en tu navegador. No se sube ni se almacena ningún dato en ningún servidor. Tu contenido permanece privado en tu dispositivo en todo momento.

¿Funciona el Decodificador de ABI de Ethereum en dispositivos móviles?

Sí, el Decodificador de ABI de Ethereum es totalmente adaptable y funciona en smartphones y tablets. Puedes usarlo en cualquier dispositivo con un navegador web moderno, sin necesidad de descargar ninguna app.

¿Necesito crear una cuenta para usar esta herramienta?

No se necesita ninguna cuenta ni registro. Simplemente abre el Decodificador de ABI de Ethereum en tu navegador y empieza a usarlo de inmediato. No hay muros de registro ni restricciones de uso.

¿Cómo uso el Decodificador de ABI de Ethereum?

Solo ingresa tus datos en el campo correspondiente, ajusta la configuración a tu gusto y la herramienta lo procesará al instante. Luego puedes copiar el resultado al portapapeles o descargarlo.

¿Qué navegadores son compatibles?

El Decodificador de ABI de Ethereum funciona en todos los navegadores modernos, incluidos Chrome, Firefox, Safari, Edge y Opera. Para una mejor experiencia, usa la última versión de tu navegador preferido.

¿Cómo leo los importes uint256 decodificados de un calldata ERC-20?

Un uint256 en el calldata es un entero puro sin punto decimal, así que el importe de una transferencia de tokens aparece como un número muy grande medido en la unidad más pequeña del token. En la mayoría de los tokens ERC-20 eso significa unidades tipo wei con 18 decimales: el valor 1000000000000000000 (0xde0b6b3a7640000) equivale exactamente a 1 token. Para convertirlo, divide el entero decodificado entre 10 elevado a los decimales del token. USDC y USDT usan 6 decimales, así que 1000000 equivale a 1,00, mientras que WBTC usa 8. El decodificador lee el bloque de 32 bytes en big-endian y te muestra tanto el entero exacto como el hexadecimal en bruto del que proviene, para que puedas verificar el importe tú mismo. Pega tu ABI y tu calldata para ver la cifra precisa antes de confiar en una solicitud de la wallet.

¿Por qué el decodificador indica que no se encontró ninguna función coincidente?

El decodificador calcula un selector Keccak-256 para cada función de tu ABI y lo compara con los primeros 4 bytes de tu calldata. Cuando no hay coincidencia, significa que el ABI que pegaste no contiene la función que realmente se llamó. Las causas habituales son usar el ABI de un contrato equivocado, un contrato proxy que reenvía las llamadas a una implementación distinta, o un ABI al que le falta esa función concreta. Incluso una sola diferencia de carácter en un tipo de parámetro, como uint frente a uint256, cambia el selector y rompe la coincidencia. La solución es cargar el ABI verificado del contrato exacto desde un explorador de bloques y volver a decodificar. El propio error es una señal útil de que la transacción no es lo que suponías. Verifica la fuente e inténtalo de nuevo con el ABI correcto.

¿Cuál es la diferencia entre un selector de función y un ABI completo?

Un selector de función son solo 4 bytes, la porción inicial del hash Keccak-256 de una firma canónica como transfer(address,uint256), que identifica a qué función apunta una transacción. Te indica la función, pero nada sobre los nombres de los parámetros ni cómo interpretar los bytes que la siguen. Un ABI completo es la descripción JSON completa de las funciones de un contrato, incluyendo el nombre y el tipo de cada entrada y sus salidas. El decodificador necesita el ABI, no solo el selector, porque los bloques de 32 bytes de los argumentos no significan nada hasta que sabes que uno contiene una address y el siguiente un uint256. Con solo un selector puedes buscar una firma probable; con el ABI obtienes valores nombrados y tipados. Pega aquí el array del ABI para convertir un hexadecimal en bruto en un desglose de parámetros con etiquetas.

¿Puede esta herramienta decodificar tipos dinámicos como string, bytes y arrays?

Maneja string y bytes siguiendo las reglas de codificación del ABI: el bloque estático contiene un puntero de desplazamiento hacia una región separada donde primero se almacena la longitud, seguida de los datos reales. El decodificador lee ese puntero, salta hasta la longitud y reconstruye el texto o el valor hexadecimal. Los tipos estáticos de tamaño fijo, como uint256, int, address, bool y bytes32, ocupan cada uno un bloque de 32 bytes y se decodifican de forma limpia siempre. Donde se queda corto es en estructuras dinámicas complejas, como arrays de longitud variable y tuplas anidadas, que usan una codificación de varias partes que puede requerir inspección manual en lugar de un valor único y limpio. Para llamadas cotidianas como transferencias, aprobaciones y setters simples de ERC-20, el resultado automático es completo. Pega tu calldata para ver qué parámetros se resuelven directamente.

¿Cómo se calcula el selector de función a partir de una firma?

Empieza con la firma canónica: el nombre de la función seguido de sus tipos de parámetros entre paréntesis, separados por comas, sin espacios y sin nombres de parámetro, por ejemplo transfer(address,uint256). Pasa esa cadena exacta por la función de hash Keccak-256 y toma los primeros 4 bytes del resultado de 32 bytes. Para transfer eso produce 0xa9059cbb. La forma canónica importa porque uint debe escribirse como su alias completo uint256, e int como int256; de lo contrario, el hash y el selector cambian por completo. Esta herramienta calcula los selectores con una implementación de Keccak-256 integrada directamente en tu navegador, así que nunca necesita las extensas bases de datos de firmas en línea para hacer coincidir una llamada. Carga el ejemplo de transferencia ERC-20 para ver cómo una firma real se resuelve en su selector, y luego prueba con tu propia función para confirmar qué llama una transacción.

Acerca del Decodificador de ABI de Ethereum

El Decodificador de ABI de Ethereum convierte el calldata en bruto de una transacción en una llamada a función legible por humanos. Pegas el ABI JSON de un contrato y una cadena de calldata en hexadecimal, y la herramienta te indica qué función se llamó, su selector de 4 bytes y el valor decodificado de cada parámetro. Está pensada para desarrolladores de Solidity, auditores de contratos inteligentes y cualquiera que necesite entender exactamente qué hace una transacción pendiente o histórica antes de firmarla o después de haberla ejecutado.

Todo ocurre localmente en tu navegador. El ABI, el calldata y el resultado decodificado nunca salen de tu dispositivo: no hay llamadas a ninguna API, no hay conexión de wallet y no hace falta registrarse. Eso es clave cuando estás inspeccionando el calldata de una dApp poco conocida o de una transacción en la que todavía no confías.

Qué hace realmente la decodificación de ABI

En Ethereum, una llamada a un contrato es simplemente un bloque de bytes. Los primeros 4 bytes son el selector de función: los 4 bytes iniciales del hash Keccak-256 de la firma canónica de la función, como transfer(address,uint256), que produce 0xa9059cbb. Todo lo que viene después de esos 4 bytes son los argumentos codificados, empaquetados en bloques de 32 bytes (256 bits).

Este decodificador calcula los selectores a partir de tu ABI usando una implementación de Keccak-256 integrada, y luego compara el selector al inicio de tu calldata con cada función del ABI. Cuando encuentra una coincidencia, divide el resto de los bytes en palabras de 32 bytes e interpreta cada una según el tipo declarado del parámetro. El resultado muestra el nombre de la función, el selector y un desglose por parámetro con el nombre, el tipo, el valor decodificado y el bloque de 32 bytes en bruto del que proviene.

Tipos de parámetros que puedes decodificar

El decodificador maneja los tipos estáticos (de tamaño fijo) más comunes de Solidity, cada uno de los cuales ocupa exactamente un bloque de 32 bytes:

  • uint256 / uint e int — se leen en formato big-endian y alineados a la derecha; los valores con signo int se interpretan correctamente mediante complemento a dos.
  • address — los 20 bytes significativos se toman desde la derecha del bloque, que se rellena con ceros por la izquierda.
  • bool — se decodifica como true o false a partir del último byte.
  • bytes32 — se muestra como el valor hexadecimal completo de 32 bytes.

También intenta decodificar string y bytes, que son tipos dinámicos codificados como un puntero de desplazamiento (offset) hacia una región de datos precedida por su longitud. Como estas y otras estructuras dinámicas (arrays de longitud variable y tuplas) usan una codificación de varias partes, el anidamiento complejo puede requerir una inspección manual en lugar de un valor limpio en una sola línea.

Un flujo de trabajo práctico

Haz clic en Cargar ejemplo de transferencia ERC-20 para ver una llamada real a transfer decodificada de principio a fin: el selector 0xa9059cbb, una dirección de destinatario y un importe en wei (por ejemplo 0xde0b6b3a7640000, que equivale exactamente a 1 token con 18 decimales). A partir de ahí, sustituye esos datos por los tuyos.

Situaciones reales en las que esto ahorra tiempo:

  • Verificar una solicitud de la wallet — antes de aprobar una transacción, confirma la función y el destinatario y el importe exactos, en lugar de fiarte de una cadena hexadecimal confusa.
  • Depurar una llamada fallida o inesperada — reconstruye qué argumentos se enviaron realmente a un contrato.
  • Auditoría e ingeniería inversa — inspecciona el calldata extraído de un explorador de bloques cuando tienes el ABI pero no una vista de código fuente verificado.

Una pestaña independiente, Guía de codificación ABI, explica las reglas de codificación —selectores, bloques estáticos y punteros de tipos dinámicos— para que el resultado tenga sentido incluso si eres nuevo en los datos de bajo nivel de la EVM.

Para decodificar, pega el ABI como un array JSON de objetos de función (cada uno con name, type e inputs), pega el calldata con o sin el prefijo 0x, y pulsa Decodificar. Si el selector inicial no coincide con ninguna función del ABI, la herramienta te lo indica: una señal rápida de que estás usando el ABI equivocado para esa transacción.