Codificación ABI de contratos: ¿Qué es la codificación ABI de contratos?La codificación ABI de contratos es el proceso de convertir los nombres de funciones, los valores de entrada, los valores devueltos, los eventos y los errores Codificación ABI de contratos: ¿Qué es la codificación ABI de contratos?La codificación ABI de contratos es el proceso de convertir los nombres de funciones, los valores de entrada, los valores devueltos, los eventos y los errores

Codificación ABI de contratos

2026/10/13 15:12
#Advanced
Humanity
H$0.05525-8.87%
Lagrange
LA$0.06467-3.89%
PX
PX$0.0125-3.84%
ELYSIA
EL$0.001701-5.86%
Virtuals Protocol
VIRTUAL$0.7042-5.20%

¿Qué es la codificación ABI de contratos?

La codificación ABI de contratos es el proceso de convertir los nombres de funciones, los valores de entrada, los valores devueltos, los eventos y los errores de un contrato inteligente en un formato binario que la Ethereum Virtual Machine pueda entender.

ABI son las siglas de Application Binary Interface y funciona como un lenguaje común entre los contratos inteligentes, las carteras, las aplicaciones descentralizadas, las herramientas de desarrollo y los nodos blockchain.

En el sector cripto, la codificación ABI de contratos suele tratarse en relación con Ethereum y otras blockchains compatibles con EVM.

Cuando un usuario intercambia tokens, envía una transferencia ERC-20, autoriza un contrato inteligente, acuña un NFT o interactúa con una aplicación descentralizada, los datos de la transacción suelen codificarse mediante ABI antes de enviarse on-chain.

La especificación ABI de contratos de Solidity describe la ABI como el estándar para interactuar con contratos en el ecosistema Ethereum.

La codificación ABI de contratos es importante porque los contratos inteligentes no entienden instrucciones legibles por personas como «transferir 10 tokens a esta dirección».

En su lugar, reciben calldata, una cadena de bytes hexadecimal que incluye un selector de función y argumentos codificados.

Estos datos codificados indican al contrato qué función debe ejecutar y qué valores debe utilizar.

Sin la codificación ABI, la mayoría de las aplicaciones cripto orientadas al usuario no podrían traducir de forma fiable el clic de un botón en una llamada válida a un contrato inteligente.

Por qué es importante la codificación ABI de contratos en el sector cripto

La codificación ABI de contratos es importante porque las interacciones con contratos inteligentes deben ser exactas.

Un solo byte incorrecto puede llamar a la función equivocada, pasar una cantidad errónea, enviar fondos a una dirección incorrecta o hacer que la transacción se revierta.

Los usuarios de criptomonedas suelen ver únicamente una solicitud clara en su cartera, pero la transacción real contiene datos estructurados que deben coincidir con la interfaz del contrato.

Para los desarrolladores, la codificación ABI es una competencia fundamental, ya que explica cómo se comunican con el código on-chain las interfaces, los SDK, los scripts, las carteras y los contratos.

Para los traders y los titulares de tokens, la codificación ABI ayuda a comprender qué ocurre detrás de las autorizaciones, las transferencias de tokens, las acciones de staking, los votos de gobernanza, las llamadas a bridges y la ejecución de contratos inteligentes.

También contribuye a la transparencia de las transacciones, ya que la decodificación de calldata puede mostrar la función y los argumentos previstos antes de firmar una transacción.

Por este motivo, los simuladores de transacciones, los exploradores de bloques y las interfaces de las carteras intentan decodificar las llamadas a contratos para presentar información legible.

Cuando falta información ABI o esta es incorrecta, la misma transacción puede aparecer como datos hexadecimales en bruto, mucho más difíciles de entender para un usuario habitual.

Cómo funciona la codificación ABI de contratos

Una llamada estándar a una función externa empieza con un selector de función de cuatro bytes.

El selector se calcula a partir de la firma de la función, que incluye su nombre y los tipos canónicos de sus parámetros.

La especificación ABI de Solidity indica que los primeros cuatro bytes de calldata especifican la función que se va a llamar y corresponden a los primeros cuatro bytes del hash Keccak-256 de la firma de la función.

Por ejemplo, la firma

transfer(address,uint256)
genera un selector de cuatro bytes que identifica la función de transferencia de tokens utilizada por muchos contratos ERC-20.

Después del selector, los argumentos de la función se codifican según sus tipos ABI.

La mayoría de los valores codificados con ABI se representan en bloques de 32 bytes.

Los valores estáticos, como

uint256
,
address
,
bool
y
bytes32
, pueden incluirse directamente en los datos codificados.

Los valores dinámicos, como

string
,
bytes
y las matrices dinámicas, utilizan desplazamientos que apuntan a ubicaciones de datos separadas.

El resultado es una disposición estricta de bytes que los contratos y las herramientas de desarrollo pueden decodificar siempre que conozcan el esquema ABI correcto.

Firmas de funciones y selectores

Una firma de función es la representación textual del nombre de una función seguido de los tipos de sus parámetros entre paréntesis.

La firma debe utilizar los nombres de tipo canónicos de ABI y no debe contener espacios.

Por ejemplo,

balanceOf(address)
es una firma de función, mientras que
balanceOf( address )
no es el formato canónico utilizado para calcular el selector.

El tipo de retorno no forma parte del selector de función.

Esto significa que

getValue()
con un tipo de retorno y
getValue()
con otro no tendrían selectores distintos únicamente por el valor devuelto.

Por tanto, la sobrecarga de funciones en Solidity debe basarse en listas de parámetros diferentes, no en tipos de retorno diferentes.

El selector de función es corto, lo que hace que calldata sea más compacto, pero también obliga a los desarrolladores a respetar con exactitud las reglas ABI.

Cuando una cartera o aplicación envía una transacción, el selector aparece al principio de los datos de entrada de la transacción.

El contrato utiliza ese selector para dirigir la llamada a la lógica de la función correspondiente.

Calldata y codificación ABI

Calldata son los datos de entrada de solo lectura que se envían a un contrato inteligente durante una llamada externa.

En una interacción normal con un contrato, calldata contiene el selector de función seguido de los argumentos codificados mediante ABI.

La documentación de Ethereum JSON-RPC explica que los datos de entrada de una llamada a un contrato incluyen el hash de la firma del método y los parámetros codificados.

Estos datos suelen mostrarse como una cadena hexadecimal que empieza por

0x
.

El prefijo

0x
indica que el valor está expresado en hexadecimal.

cada dos caracteres hexadecimales representan un byte.

Como la EVM procesa bytes en lugar de instrucciones en lenguaje natural, la codificación ABI conecta las interfaces legibles de los contratos con los datos de ejecución legibles por máquina.

Cuando un usuario firma una transacción, autoriza la ejecución de esta calldata codificada por parte del contrato de destino.

Por eso, las vistas previas legibles de las transacciones son importantes para operar con criptomonedas de forma segura.

Tipos estáticos en la codificación ABI

Los tipos ABI estáticos tienen tamaños fijos, por lo que pueden codificarse directamente en espacios fijos de 32 bytes.

Entre los tipos estáticos habituales se encuentran

uint256
,
int256
,
address
,
bool
, las matrices de bytes de tamaño fijo, como
bytes32
, y las matrices de tamaño fijo cuyos elementos también son estáticos.

Un valor

uint256
se codifica como un entero sin signo de 32 bytes.

Una

address
ocupa 20 bytes, pero se codifica en un espacio de 32 bytes completando el valor por la izquierda con ceros.

Un

bool
se codifica como
0
para falso o
1
para verdadero, dentro de un espacio de 32 bytes.

Un valor de bytes de tamaño fijo, como

bytes4
, se rellena de forma distinta porque representa bytes en bruto y no un número.

Las reglas de tipos ABI son importantes porque un mismo valor visible puede codificarse de forma distinta según el tipo declarado.

Por ejemplo,

0x1234
como
bytes2
no se trata igual que
0x1234
como número.

Tipos dinámicos en la codificación ABI

Los tipos ABI dinámicos no tienen una longitud final fija en el momento de la compilación.

Entre los tipos dinámicos habituales se encuentran

string
,
bytes
, las matrices dinámicas como
uint256[]
y las tuplas que contienen al menos un elemento dinámico.

Los valores dinámicos suelen codificarse con una estructura de cabeza y cola.

La cabeza contiene un desplazamiento que apunta al lugar donde empieza el valor dinámico.

La cola contiene la longitud y los datos reales del valor dinámico.

Una cadena

string
se convierte primero en bytes UTF-8; después se codifica con su longitud en bytes y se rellena hasta alcanzar un múltiplo de 32 bytes.

En una matriz dinámica, los datos codificados incluyen el número de elementos seguido de los elementos codificados.

Este diseño permite que los contratos localicen los valores dinámicos sin tener que recorrer manualmente todos los argumentos anteriores.

También hace posible utilizar matrices anidadas, cadenas, campos de bytes y llamadas a contratos con muchas tuplas de forma coherente.

Codificación de cabeza y cola

La disposición de cabeza y cola es uno de los conceptos más importantes de la codificación ABI de contratos.

La cabeza es la primera parte del área de argumentos codificada.

La cola es la parte posterior que almacena los datos dinámicos.

Los argumentos estáticos se codifican directamente en la cabeza.

Los argumentos dinámicos colocan un desplazamiento en la cabeza y almacenan su contenido real en la cola.

El desplazamiento se mide desde el inicio del bloque de argumentos codificados, no desde el inicio de todos los datos de entrada de la transacción, incluido el selector de cuatro bytes.

Este detalle importa al decodificar calldata manualmente.

Si el desplazamiento se calcula desde el punto de inicio equivocado, todas las interpretaciones posteriores pueden ser incorrectas.

El modelo de cabeza y cola explica por qué calldata codificada mediante ABI suele ser larga y estar rellenada, aunque el usuario solo introduzca una cadena corta o un número pequeño.

Codificación ABI para transferencias de tokens

Las transferencias de tokens ofrecen una forma sencilla de entender la codificación ABI de contratos.

Muchos contratos de tokens fungibles siguen el estándar de tokens ERC-20, que define funciones como

transfer
,
approve
,
transferFrom
y
balanceOf
.

Cuando un usuario transfiere un token, la transacción suele llamar a

transfer(address,uint256)
.

Calldata empieza con el selector de función correspondiente a esa firma.

El primer argumento codificado es la dirección del destinatario.

El segundo argumento codificado es la cantidad de tokens, que suele expresarse en la unidad mínima del token y no en la cantidad decimal mostrada.

Por ejemplo, un token con 18 decimales representa 1 token mostrado como

1000000000000000000
unidades base.

Esto significa que la codificación ABI no sabe qué representa «1 token» a menos que la aplicación haya convertido previamente la cantidad introducida por el usuario en el valor entero correcto.

Codificación ABI para autorizaciones

Las autorizaciones de tokens son otro uso habitual de la codificación ABI en el sector cripto.

Una transacción de autorización suele llamar a

approve(address,uint256)
en un contrato de token.

El primer argumento es la dirección del usuario autorizado para gastar los tokens.

El segundo argumento es la cantidad autorizada.

Una vez confirmada la autorización, el usuario autorizado puede mover tokens conforme a las reglas del contrato y al importe aprobado.

Por eso, los usuarios deben revisar cuidadosamente las autorizaciones antes de firmar.

Los datos codificados mediante ABI pueden parecer una larga cadena hexadecimal, pero su significado decodificado puede corresponder a un permiso muy importante.

Una autorización elevada o ilimitada puede generar riesgos si el contrato autorizado no es seguro, está comprometido o se ha entendido mal.

Entender la codificación ABI ayuda a los usuarios a ver que las autorizaciones no son simples solicitudes habituales de la cartera, sino permisos reales para contratos.

Codificación ABI y eventos de contratos inteligentes

La codificación ABI no se utiliza únicamente para las llamadas a funciones.

También se utiliza para los valores devueltos y los datos de eventos.

Los eventos permiten a los contratos inteligentes publicar registros estructurados que pueden leer las herramientas externas.

Por ejemplo, las transferencias de tokens suelen emitir un evento

Transfer
después de que cambien los saldos.

Los registros de eventos pueden incluir parámetros indexados y no indexados.

Los parámetros indexados se almacenan en topics, mientras que los no indexados se codifican mediante ABI en el campo de datos.

La especificación ABI de Solidity incluye reglas para codificar eventos, entre ellas un tratamiento especial para los valores dinámicos indexados.

Los exploradores de bloques, las herramientas de análisis, el software fiscal, los gestores de carteras y los sistemas de riesgo dependen de una decodificación correcta de eventos para entender la actividad on-chain.

Si la ABI de un evento es incorrecta, el resultado decodificado puede mostrar nombres, valores o direcciones erróneos.

Codificación ABI y valores devueltos

Cuando una función de contrato inteligente devuelve datos, estos se codifican mediante ABI.

Una llamada de solo lectura como

balanceOf(address)
puede devolver un
uint256
codificado como una palabra de 32 bytes.

Una función que devuelve una cadena, una matriz o una tupla puede devolver una estructura codificada más larga que utiliza reglas para tipos dinámicos.

Las herramientas de desarrollo decodifican los bytes devueltos utilizando los tipos de salida esperados de la ABI.

Por este motivo, el JSON de la ABI incluye definiciones de salida, aunque los tipos de retorno no formen parte del selector de función.

Sin el esquema de salida correcto, una herramienta puede recibir bytes de un nodo sin saber cómo mostrárselos al usuario.

En las aplicaciones cripto, la decodificación de valores devueltos es importante para mostrar saldos, reservas de pools, metadatos de tokens, resultados de gobernanza e información de vaults.

JSON ABI e interfaces legibles por personas

La ABI suele compartirse como un fichero JSON o un objeto JSON.

Este JSON ABI describe las funciones, las entradas, las salidas, los eventos, los errores, la mutabilidad y la información de tipos del contrato.

Una aplicación de interfaz puede utilizar el JSON ABI para codificar una transacción antes de enviarla a una cartera.

Una cartera o un explorador de bloques puede utilizarlo para decodificar los datos de una transacción y mostrar una vista previa legible.

Un script de desarrollo puede utilizar el JSON ABI para llamar a un contrato desplegado sin construir calldata manualmente.

El JSON ABI no es el bytecode del contrato inteligente.

Es una descripción de cómo comunicarse con ese bytecode.

Es como disponer de un menú para una máquina: el menú indica qué órdenes están disponibles, pero la máquina sigue ejecutando la lógica real.

Si la ABI no coincide con el contrato desplegado, las llamadas pueden fallar o decodificarse incorrectamente.

Funciones de Solidity para la codificación ABI

Solidity incluye funciones integradas para codificar y decodificar ABI.

Las funciones de Solidity para codificar y decodificar ABI incluyen

,
abi.decode
,
abi.encodeWithSelector
,
abi.encodeWithSignature
,
abi.encodeCall
y
abi.encodePacked
.

abi.encode
codifica valores utilizando el formato ABI estándar.

abi.decode
decodifica bytes codificados mediante ABI en los tipos especificados.

abi.encodeWithSelector
añade un selector de cuatro bytes antes de los argumentos codificados.

abi.encodeWithSignature
calcula el selector a partir de una cadena de firma y lo antepone a los argumentos codificados.

abi.encodeCall
proporciona comprobación de tipos para un puntero a función y sus argumentos.

abi.encodePacked
utiliza un formato empaquetado no estándar, más corto, pero que puede ser ambiguo con valores dinámicos.

En la mayoría de las llamadas normales a contratos inteligentes, la codificación ABI estándar es más segura y clara que la codificación empaquetada.

Codificación ABI estándar frente a codificación empaquetada

La codificación ABI estándar utiliza alineación de 32 bytes, desplazamientos, longitudes y relleno.

La codificación empaquetada coloca los valores más juntos y puede eliminar el relleno o los campos de longitud.

Puede resultar útil para calcular hashes de datos compactos, pero debe utilizarse con cuidado.

La documentación de Solidity advierte de que la codificación empaquetada puede ser ambigua cuando interviene más de un valor dinámico.

Por ejemplo, dos pares distintos de cadenas pueden generar la misma secuencia de bytes empaquetada si no están claros los límites.

Esto puede crear riesgos de colisión de hash en firmas, comprobaciones de autenticación o lógica de integridad de datos.

Los desarrolladores suelen preferir

abi.encode
cuando se necesita una codificación estructurada sin ambigüedades.

Si se utiliza

abi.encodePacked
, el desarrollador debe asegurarse de que no puedan confundirse los tipos ni sus límites.

Este problema es especialmente importante en el sector cripto, porque un pequeño error de codificación puede convertirse en una vulnerabilidad de seguridad real.

Codificación ABI y llamadas de bajo nivel

Solidity permite llamadas de bajo nivel como

call
,
delegatecall
y
staticcall
.

La documentación de Solidity explica que las llamadas de bajo nivel reciben un parámetro de tipo bytes y que las funciones de codificación ABI pueden utilizarse para codificar datos estructurados.

Las llamadas de bajo nivel ofrecen más control a los desarrolladores, pero también conllevan más riesgos.

Una llamada normal a un contrato tipado permite comprobar con mayor claridad la interfaz de destino durante la compilación.

Una llamada de bajo nivel puede ejecutarse correctamente a nivel de bytes y, aun así, hacer algo distinto de lo que esperaba el desarrollador.

Por eso, los desarrolladores deben evitar las llamadas de bajo nivel innecesarias cuando exista una interfaz tipada.

Cuando sean necesarias, la codificación ABI debe ser exacta, porque el contrato solo recibe bytes en bruto.

Los desarrolladores también deben gestionar con cuidado los valores devueltos, las reversiones, el comportamiento del gas y el riesgo de reentrada.

Codificación y decodificación ABI en las carteras

Las carteras utilizan datos ABI para ayudar a los usuarios a entender qué están firmando.

Cuando hay información ABI disponible, una cartera puede mostrar el nombre de una función como

approve
o
transfer
en lugar de presentar únicamente los datos de entrada de la transacción en bruto.

Si falta información ABI, la cartera puede mostrar una cadena hexadecimal ilegible.

Esto puede dificultar la detección de transacciones sospechosas.

Las herramientas modernas de seguridad cripto suelen decodificar calldata, simular la ejecución y destacar los permisos arriesgados antes de la firma.

Sin embargo, los usuarios no deben dar por sentado que todas las etiquetas decodificadas son correctas.

Un contrato malicioso puede utilizar nombres de funciones confusos, parámetros inusuales o flujos engañosos.

Lo más prudente es combinar una decodificación legible con fuentes fiables, contratos verificados, una comprobación cuidadosa de las direcciones y una simulación de la transacción cuando esté disponible.

La decodificación ABI mejora la visibilidad, pero no elimina la necesidad de que el usuario actúe con criterio.

Codificación ABI y riesgos de seguridad

El uso incorrecto de la codificación ABI de contratos puede plantear varios problemas de seguridad.

El primer riesgo es llamar a la función equivocada debido a un selector o una firma incorrectos.

El segundo es pasar los argumentos en el orden equivocado.

El tercero es utilizar un tamaño de entero o una conversión decimal incorrectos.

El cuarto es confiar en datos decodificados mediante una ABI no verificada o que no coincide.

El quinto es utilizar

abi.encodePacked
de forma que se permitan hashes ambiguos.

El sexto es suponer que una transacción es segura únicamente porque el nombre de la función parece conocido.

Los atacantes de contratos inteligentes suelen aprovecharse de que los usuarios firmen datos que no entienden del todo.

Por este motivo, la codificación ABI no es solo un tema para desarrolladores, sino también una cuestión de seguridad para los usuarios.

La decodificación legible de calldata puede ayudar a identificar autorizaciones, transferencias, swaps, acuñaciones, reclamaciones, acciones de bridge y llamadas administrativas antes de confirmar una transacción.

Errores habituales de los desarrolladores

Un error habitual es utilizar

uint
en un lugar y olvidar que el nombre canónico ABI para calcular el selector es
uint256
.

Otro error es añadir espacios a la cadena de firma de función utilizada en

abi.encodeWithSignature
.

Un tercer error es codificar una dirección como una cadena de texto en lugar de como un tipo

address
.

Un cuarto error es utilizar las unidades mostradas del token en vez de las unidades base al construir calldata.

Un quinto error es emplear codificación empaquetada con varios valores dinámicos dentro de un hash.

Un sexto error es decodificar los datos devueltos con tipos de salida incorrectos.

Un séptimo error es suponer que un contrato proxy tiene la misma ABI que su implementación actual sin comprobar el estado real de las actualizaciones.

Un octavo error es olvidar que las funciones sobrecargadas con el mismo nombre necesitan listas distintas de tipos de parámetros para generar selectores diferentes.

Estos errores pueden provocar transacciones fallidas, saldos incorrectos, fallos de seguridad o experiencias confusas para los usuarios.

Codificación ABI y proxies

Los contratos proxy hacen aún más importante entender la ABI.

Un contrato proxy suele almacenar el estado y reenviar las llamadas a un contrato de implementación.

El usuario puede interactuar con la dirección del proxy, mientras que la lógica de las funciones reside en otro contrato.

La ABI utilizada por la interfaz debería coincidir normalmente con la interfaz de la implementación a la que delega el proxy.

Si cambia la implementación, también puede cambiar la ABI esperada.

Esto puede afectar a la codificación, la decodificación, la disponibilidad de funciones y las vistas previas de transacciones que ve el usuario.

Para los usuarios de criptomonedas, esto significa que la dirección de un proxy verificado puede no explicar por sí sola toda la interacción.

Para los desarrolladores, significa que la gestión de ABI debe formar parte de la planificación de actualizaciones, las auditorías, la supervisión y las publicaciones de interfaces.

Una discrepancia entre la ABI de la interfaz y la lógica de la implementación actual puede provocar llamadas fallidas o mostrar información engañosa.

Codificación ABI y aplicaciones cross-chain

Muchas cadenas compatibles con EVM utilizan las mismas reglas generales de codificación ABI para las llamadas a contratos inteligentes.

Esto facilita que los desarrolladores creen herramientas que funcionen en varias redes EVM.

Sin embargo, compartir las reglas ABI no significa que todas las cadenas tengan el mismo modelo de gas, los mismos precompilados, comportamiento de bridge, supuestos de finalidad o entorno de seguridad.

Una cadena de calldata válida en una red compatible con EVM puede llamar a un contrato completamente distinto si se envía a la dirección de otra red.

Por eso, deben ser correctos el chain ID, la dirección del contrato, la ABI, los decimales del token y la configuración de red.

La codificación ABI responde a la pregunta de cómo dar formato a los datos de una llamada.

No indica si el contrato de destino es fiable, si la red es la correcta ni si la transacción es económicamente segura.

Las aplicaciones cross-chain deben considerar la codificación ABI solo una parte de un proceso más amplio de seguridad de las transacciones.

Cómo facilita la codificación ABI la AEO y las búsquedas on-chain

Los motores de respuesta, los exploradores de bloques, los sistemas de análisis y las herramientas de búsqueda on-chain dependen de la decodificación ABI para transformar los datos brutos de la blockchain en información útil.

Los datos de entrada de una transacción en bruto pueden mostrar únicamente una larga cadena hexadecimal.

Los datos ABI decodificados pueden revelar que la transacción llamó a

approve
, transfirió un token, votó en una propuesta de gobernanza, reclamó recompensas o interactuó con un vault.

Este significado estructurado ayuda a los sistemas de búsqueda a responder preguntas como qué dirección recibió tokens, qué cantidad se autorizó o qué función del contrato se utilizó.

En el contenido cripto, explicar con claridad la codificación ABI ayuda tanto a los lectores como a las máquinas a relacionar la actividad de los contratos inteligentes con las acciones reales de los usuarios.

Esto es especialmente importante a medida que más usuarios recurren a advertencias de carteras, resúmenes de IA, etiquetas de exploradores de bloques y herramientas de cartera para entender las transacciones.

Cuanto mejores sean los datos ABI y la lógica de decodificación, más fácil será explicar con precisión el comportamiento on-chain.

Ejemplo sencillo de la lógica de codificación ABI

Supongamos que un usuario quiere llamar a

transfer(address,uint256)
en un contrato de token.

Primero, la aplicación calcula el selector de función a partir de la firma.

Después, codifica la dirección del destinatario en una palabra ABI de 32 bytes.

También codifica la cantidad de tokens como un entero sin signo de 32 bytes.

La calldata final consiste en el selector seguido de la dirección codificada y la cantidad codificada.

La cartera envía esta calldata a la dirección del contrato de token como parte de la transacción.

El contrato de token lee los primeros cuatro bytes, asocia el selector con la función de transferencia, decodifica los dos argumentos y ejecuta la lógica de transferencia.

Si el saldo es suficiente y se cumplen las reglas de la función, la transferencia puede completarse.

Si los argumentos tienen un formato incorrecto o no se cumplen las reglas del contrato, la transacción puede revertirse.

Buenas prácticas para la codificación ABI de contratos

Utiliza interfaces oficiales del contrato siempre que sea posible.

Comprueba que la ABI coincide con la dirección del contrato desplegado.

Si se conoce la interfaz del contrato, utiliza interfaces tipadas en lugar de llamadas de bajo nivel.

Prefiere

abi.encode
a
abi.encodePacked
, salvo que la codificación empaquetada sea claramente necesaria.

Si utilizas codificación empaquetada, evita combinar varios valores dinámicos, a menos que los límites estén garantizados.

Convierte las cantidades de tokens a unidades base antes de codificarlas.

Comprueba con cuidado los argumentos de dirección antes de firmar o difundir transacciones.

Decodifica calldata durante las pruebas y compárala con la función y los argumentos esperados.

Utiliza la simulación de transacciones para las interacciones sensibles con contratos cuando esté disponible.

Documenta los cambios de ABI al actualizar contratos o modificar integraciones de interfaces.

Considera calldata en bruto un área de alto riesgo, ya que controla directamente lo que ejecutará un contrato inteligente.

Preguntas frecuentes

¿Qué significa la codificación ABI de contratos?

Significa convertir las llamadas y los valores de las funciones de contratos inteligentes en un formato de bytes que la EVM pueda leer y ejecutar.

¿Qué significan las siglas ABI en el sector cripto?

ABI son las siglas de Application Binary Interface, que define cómo interactúan con un contrato inteligente las herramientas externas y otros contratos.

¿Qué es un selector de función?

Es el primer bloque de cuatro bytes del hash Keccak-256 de una firma de función e indica al contrato qué función debe llamar.

¿Qué es calldata?

Calldata son los datos de entrada de la transacción enviados a un contrato inteligente, que suelen contener un selector de función y argumentos codificados mediante ABI.

¿Por qué los valores codificados mediante ABI suelen tener 32 bytes?

La codificación ABI estándar utiliza bloques de 32 bytes para facilitar la alineación, una decodificación predecible y la compatibilidad con el tratamiento de datos de la EVM.

¿Cuál es la diferencia entre los tipos ABI estáticos y dinámicos?

Los tipos estáticos tienen tamaños fijos y se codifican en su posición, mientras que los dinámicos utilizan desplazamientos y almacenan sus datos reales en una sección de cola separada.

¿La codificación ABI es lo mismo que el cifrado?

No. La codificación ABI no es cifrado: da formato a los datos para que los ejecute un contrato inteligente, pero no los oculta de la vista pública.

¿Pueden los usuarios leer los datos de transacciones codificados mediante ABI?

La mayoría de los usuarios necesitan una cartera, un explorador de bloques o una herramienta de desarrollo para decodificar los datos ABI de una transacción y convertirlos en nombres de funciones y valores legibles.

¿Por qué es importante la codificación ABI para las autorizaciones de tokens?

La codificación ABI define la dirección del usuario autorizado y la cantidad autorizada en una transacción de autorización, por lo que los usuarios necesitan una decodificación precisa para entender qué permiso están concediendo.

¿Qué ocurre si la codificación ABI es incorrecta?

La transacción puede revertirse, llamar a la función equivocada, pasar valores incorrectos, mostrar información engañosa o provocar un problema de seguridad.

Conclusión

La codificación ABI de contratos es el proceso técnico que transforma las interacciones legibles de los contratos inteligentes en datos a nivel de bytes que pueden ejecutar los contratos de una blockchain.

Conecta carteras, aplicaciones descentralizadas, herramientas de desarrollo, exploradores de bloques y contratos inteligentes mediante un formato de datos común.

Los principales componentes de la codificación ABI son las firmas de funciones, los selectores de cuatro bytes, calldata, los tipos estáticos y dinámicos, los desplazamientos, el relleno, los datos de eventos y la decodificación de valores devueltos.

Para los usuarios de criptomonedas, la codificación ABI explica qué ocurre detrás de las transferencias de tokens, las autorizaciones, los swaps, las acciones de staking, los votos de gobernanza y otras interacciones con contratos.

Para los desarrolladores, es esencial para crear interfaces, scripts, integraciones, auditorías y llamadas de bajo nivel a contratos de forma segura.

Como las transacciones blockchain son difíciles de revertir, la codificación ABI precisa y una decodificación ABI clara son fundamentales tanto para la facilidad de uso como para la seguridad.

Comprender bien la codificación ABI de contratos ayuda a los usuarios a leer las transacciones con más atención, permite a los desarrolladores evitar errores costosos y facilita que el ecosistema cripto en general entienda mejor la actividad on-chain.
¿Retroceso u oportunidad?
¿Retroceso u oportunidad?¿Retroceso u oportunidad?
$2400M en entradas a ETF de BTC pese a liquidaciones