---
title: "¿Qué es el ABI (application binary interface) de Solidity?"
description: "Todo lo que necesitas saber sobre la Application Binary Interface (ABI) de Solidity"
---

# ¿Qué es el ABI (application binary interface) de Solidity?

Los desarrolladores de Ethereum usan el lenguaje de programación Solidity para [escribir código de smart contracts](https://www.alchemy.com/overviews/solidity-smart-contract) para la red de Ethereum. Pero, ¿cómo funciona Solidity y cómo interactúa con la [Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) \(EVM\)? Todo comienza con la compilación de smart contracts.

Este artículo explica:

- Qué es [el ABI de Solidity](https://www.alchemy.com/overviews/what-is-an-abi-of-a-smart-contract-examples-and-usage), a través de la necesidad de la compilación de smart contracts
- Cómo funciona el ABI como el compilador de Solidity
- Qué es el bytecode y su función en el proceso de compilación
- Qué es el ABI de Solidity y en qué se diferencia de una API.
- Cómo funcionan los ABI \(con ejemplos\)

## **¿Qué es la compilación de smart contracts?**

La compilación de smart contracts es el proceso que convierte el código de smart contracts de Solidity en un lenguaje compatible con el lenguaje de la Ethereum Virtual Machine.

Los desarrolladores escriben smart contracts en Solidity, [un lenguaje de programación de alto nivel](https://www.alchemy.com/overviews/solidity) que solo es legible y comprensible para humanos. La EVM no puede entender Solidity. Dado que la máquina virtual no puede entender Solidity, la compilación convierte el código de Solidity comprensible para humanos en un lenguaje legible por máquina. El [ecosistema de Ethereum](https://www.alchemy.com/dapps/ecosystem/ethereum) usa el compilador de Solidity para compilar sus smart contracts.

### **¿Qué es el compilador de Solidity?**

El [**compilador de Solidity**](https://www.alchemy.com/overviews/solidity-compiler), también conocido como solc, compila smart contracts basados en Solidity en bytecode comprensible para la EVM y en la [**Application Binary Interface \(ABI\)**](https://docs.soliditylang.org/en/v0.8.13/abi-spec.html). El bytecode y el ABI del contrato de Solidity son los componentes principales para interactuar con smart contracts de Ethereum.

## **¿Qué es el bytecode?**

El bytecode es la información del smart contract en formato binario en la Ethereum Virtual Machine. El bytecode no es legible para humanos y solo puede ser leído por una máquina \(EVM\). En otras palabras, Solidity se compila y se traduce a bytecode legible por máquina para que la EVM pueda ejecutar las funciones necesarias.

El bytecode contiene una serie de instrucciones comprensibles para la máquina llamadas opcodes, cada uno de un byte \(ocho bits\) de longitud. Por lo tanto, un bytecode es una combinación de opcodes de un byte.

El bytecode se divide en dos tipos:

1. Bytecode de creación
1. Bytecode de runtime

### **¿Qué es el bytecode de creación?**

**La compilación de smart contracts genera el bytecode de creación, que contiene la lógica del constructor y los parámetros del constructor de los smart contracts.** El bytecode de creación es responsable de generar el bytecode de runtime.

Cuando haces clic en "detalles de compilación" para un smart contract en cualquier [plataforma de Integrated Development Environment \(IDE\)](https://www.alchemy.com/overviews/solidity-ide), ves el bytecode de creación. El bytecode de creación se ejecuta solo una vez durante el despliegue.

Para obtener el bytecode de creación on-chain, usa:

Para obtener el bytecode de creación off-chain mediante una llamada JSON RPC, usa este método: [`getTransactionByHash`](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-transaction-by-hash)*.*

### **¿Qué es el bytecode de runtime?**

El bytecode de runtime son los datos compilados del smart contract almacenados on-chain como el código ejecutable permanente. A diferencia del bytecode de creación, el bytecode de runtime no contiene la lógica del constructor ni los parámetros del constructor.

Para obtener el bytecode de runtime on-chain, usa:

Para obtener el bytecode de runtime off-chain mediante una llamada JSON RPC, usa este método: [`getCode`](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-code)

### **Cómo interactuar con el bytecode**

Los datos de los smart contracts se almacenan en la EVM en bytecode legible por máquina, y se almacenan en aplicaciones externas en Javascript y en otros smart contracts en lenguaje Solidity legible para humanos, ya que no pueden comunicarse con el bytecode. Aquí es donde el segundo componente de la compilación de smart contracts, la Application Binary Interface \(ABI\), hace posible la interacción.

## **¿Qué es la application binary interface \(ABI\) en Solidity?**

La [**Application Binary Interface (ABI)**](https://www.alchemy.com/overviews/what-is-an-abi-of-a-smart-contract-examples-and-usage) es un intérprete que facilita la comunicación con el bytecode de la EVM. El ABI de Solidity es una lista legible para humanos de métodos de un smart contract para ejecutar funciones particulares. Puedes usar el ABI con una librería como [ethers.js](https://www.alchemy.com/dapps/ethers-js) para interactuar con smart contracts.

Un ABI en Solidity es similar a una API \(Application Program Interface\), pero también diferente.

### **¿Cuál es la diferencia entre el ABI de Solidity y una API?**

En web2, las APIs facilitan la interacción entre las aplicaciones web y los servidores centralizados, y el ABI de Solidity proporciona datos del smart contract a las aplicaciones y a otros contratos. Cuando una aplicación usa una API para solicitar datos de un servidor, la API se los provee, mientras que los ABIs acceden a los datos del smart contract en formato binario de bytecode, conocido como Solidity Binaries.

En la siguiente sección, explicamos qué son los Solidity Binaries.

### **¿Qué son los Solidity binaries?**

Los Solidity Binaries son una infraestructura de almacenamiento de datos única para smart contracts en el ecosistema de Ethereum.

Los desarrolladores no pueden desplegar el código de Solidity legible para humanos en la blockchain de Ethereum. En cambio, los datos del smart contract de Solidity se almacenan como bytecode sin procesar en formato binario \(es decir, una cadena larga de caracteres hexadecimales\). Esto se conoce como [Solidity Binaries](https://www.alchemy.com/overviews/solidity-binaries), lo que hace que sea eficiente en costos almacenar datos en la blockchain.

Pero, ¿cómo accede el ABI a los Solidity Binaries? Lo hace mediante un proceso llamado ABI encoding.

### **¿Qué es el ABI encoding de Solidity?**

**El ABI invoca al smart contract con firmas de función y declaraciones de variables que el bytecode basado en la EVM puede entender.** Esto se conoce como ABI encoding, en donde el ABI codifica la información necesaria para que el bytecode legible por máquina la procese. En la mayoría de los casos, el ABI encoding es automático y lo realizan los compiladores de smart contracts.

### **¿Qué es el ABI decoding?**

**Cuando el bytecode de la EVM ejecuta una instrucción y devuelve un resultado, este está en formato hexadecimal sin procesar, y el ABI decodifica ese formato hexadecimal, que no es legible para humanos, a un lenguaje legible para humanos.** Esto se conoce como ABI decoding.

Obtienes el código de Solidity a partir del ABI, y básicamente el ABI actúa como la interfaz para codificar/decodificar datos hacia y desde el código de máquina.

### **¿Cómo se mapea el código de Solidity a los opcodes de la EVM?**

El bytecode de la EVM está compuesto por varios [opcodes](https://ethereum.org/en/developers/docs/evm/opcodes/). **Cuando el ABI encoding invoca una función, hace referencia a un opcode particular.** Después de procesar la transacción, el opcode devuelve un resultado, que el ABI decodifica para el usuario.

## **¿Cómo funcionan los ABIs en Solidity?**

**Un ABI especifica qué función invocar \(encoding\), y ejecuta la función para devolver datos al usuario \(decoding\).** Un smart contract contiene varias funciones que se despliegan en la EVM como bytecode, y cada smart contract tiene su propio ABI, que se necesita para obtener los resultados.

Dado que los smart contracts se almacenan en formato binario, el ABI define las estructuras y los métodos para interactuar con el contrato binario. Tras la compilación, el smart contract genera un ABI representado en el formato Solidity JSON ABI.

Ciertos IDEs, como Remix, generan automáticamente el ABI del contrato. Sin embargo, también puedes crear el ABI manualmente usando el [paquete NPM del Solidity Compiler](https://www.npmjs.com/package/solc).

El Solidity JSON ABI genera los siguientes componentes:

- **Type**: define la naturaleza de la [función](https://www.alchemy.com/overviews/solidity-functions) \(receive, fallback, constructor\)
- **Name**: define el nombre de la función
- **Inputs**: arreglo de objetos con name, type, components
- **Outputs**: arreglo de objetos similar a inputs
- **stateMutability**: define la mutabilidad de la función \(pure, view, [non-payable o payable](https://www.alchemy.com/docs/solidity-payable-functions)\)

## **¿Cómo funciona una transacción con un ABI?**

Una transacción funciona con un archivo ABI de Solidity en 3 pasos:

1. El ABI de un smart contract se proporciona a la librería frontend, como EtherJS.
1. La librería frontend traduce la llamada al método y los argumentos en _calldata_, que se incluye como parte de una transacción a un nodo de Ethereum.
1. Después de que una transacción se valida, se genera un receipts trie que contiene los registros detallados y el gas \(las tarifas de transacción\) utilizado.

### ¿Qué es un receipts trie?

**Una transacción de Ethereum genera un recibo llamado "receipts trie" que registra el resultado de una transacción exitosa.** Un receipts trie consta de cuatro tipos de información:

1. Estado de la transacción
1. Gas acumulado utilizado
1. Conjunto de logs creados durante la ejecución
1. Filtro Bloom compuesto a partir de los logs

Para entender mejor cómo funciona una transacción, considera el siguiente ejemplo.

## Ejemplo de transferencia de un token ERC-20

Por ejemplo, quieres transferir un [token ERC-20](https://www.alchemy.com/overviews/erc20-solidity) de una wallet a otra. El siguiente código indica al ABI que envíe un mensaje al bytecode basado en la EVM.

El ABI encoding garantiza que el bytecode reconozca la función y ejecute la transacción. Después de generar un resultado, el ABI decoding traduce el resultado a un formato legible para humanos. El usuario recibe un recibo de que los tokens ERC-20 se transfirieron de una dirección a la otra.

## **Más información sobre el ABI de Solidity**

Mientras [aprendes Solidity](https://www.alchemy.com/overviews/learn-solidity), entenderás que el ABI es la piedra angular de los smart contracts de Ethereum. Los ABIs facilitan las transacciones en el ecosistema de blockchain. A pesar de la importancia de los ABIs en la tecnología de smart contracts, a menudo se pasan por alto en los tutoriales para desarrolladores. Aunque está fuera del alcance de este artículo, saber qué es la [interfaz de Solidity](https://www.alchemy.com/overviews/solidity-interface) profundizará tu comprensión de cómo interactúan los contratos entre sí.

Una comprensión profunda del ABI es el paso previo para desarrollar smart contracts y [apps](https://www.alchemy.com/dapps/top/defi-dapps) robustos, y para [convertirte en dev de Solidity](https://www.alchemy.com/overviews/how-to-become-a-solidity-developer).
