---
title: "O que é a Solidity ABI (application binary interface)?"
description: "Tudo o Que Você Precisa Saber Sobre a Application Binary Interface (ABI) da Solidity"
---

# O que é a Solidity ABI (application binary interface)?

Desenvolvedores Ethereum usam a linguagem de programação Solidity para [escrever código de smart contract](https://www.alchemy.com/overviews/solidity-smart-contract) para a rede Ethereum. Mas como o Solidity funciona e interage com a [Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) \(EVM\)? Tudo começa com a compilação de smart contracts.

Este artigo explica:

- O que é [a ABI do Solidity](https://www.alchemy.com/overviews/what-is-an-abi-of-a-smart-contract-examples-and-usage), introduzindo a necessidade da compilação de smart contracts
- Como a ABI funciona junto com o compilador Solidity
- O que é bytecode e sua função no processo de compilação
- O que é a ABI do Solidity e como ela é diferente de uma API
- Como as ABIs funcionam \(com exemplos\)

## **O que é a compilação de smart contracts?**

A compilação de smart contracts é o processo que converte o código de smart contract em Solidity para uma linguagem compatível com a Ethereum Virtual Machine.

Desenvolvedores escrevem smart contracts em Solidity, [uma linguagem de programação de alto nível](https://www.alchemy.com/overviews/solidity) legível e compreensível apenas por humanos. A EVM não consegue entender Solidity. Como a máquina virtual não consegue entender Solidity, a compilação converte o código Solidity, compreensível por humanos, em uma linguagem legível por máquina. O [ecossistema Ethereum](https://www.alchemy.com/dapps/ecosystem/ethereum) usa o compilador Solidity para compilar seus smart contracts.

### **O que é o compilador Solidity?**

O [**compilador Solidity**](https://www.alchemy.com/overviews/solidity-compiler), também conhecido como solc, compila smart contracts baseados em Solidity em bytecode compreensível pela EVM e na [**Application Binary Interface \(ABI\)**](https://docs.soliditylang.org/en/v0.8.13/abi-spec.html). O bytecode e a ABI do contrato Solidity são os principais componentes para interagir com smart contracts Ethereum.

## **O que é bytecode?**

O bytecode é a informação do smart contract em formato binário na Ethereum Virtual Machine. O bytecode não é legível por humanos e só pode ser lido por uma máquina \(EVM\). Em outras palavras, o Solidity é compilado e traduzido em bytecode legível por máquina para que a EVM possa executar as funções necessárias.

O bytecode contém uma série de instruções compreensíveis por máquina chamadas opcodes, cada uma com um byte (oito bits) de comprimento. Assim, um bytecode é um amálgama de opcodes de um byte.

O bytecode é dividido em dois tipos:

1. Creation bytecode
1. Runtime bytecode

### **O que é creation bytecode?**

**A compilação do smart contract gera o creation bytecode, que contém a lógica do construtor e os parâmetros do construtor dos smart contracts.** O creation bytecode é responsável por gerar o runtime bytecode.

Ao clicar em "compilation details" para um smart contract em qualquer [plataforma de Integrated Development Environment (IDE)](https://www.alchemy.com/overviews/solidity-ide), você vê o creation bytecode. O creation bytecode é executado apenas uma vez, durante o deployment.

Para recuperar o creation bytecode on-chain, use:

Para recuperar o creation bytecode off-chain por chamada JSON RPC, use este método: [`getTransactionByHash`](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-transaction-by-hash)*.*

### **O que é runtime bytecode?**

O runtime bytecode é o dado compilado do smart contract armazenado on-chain como o código executável permanente. Diferente do creation bytecode, o runtime bytecode não contém lógica nem parâmetros do construtor.

Para recuperar o runtime bytecode on-chain, use:

Para recuperar o runtime bytecode off-chain por chamada JSON RPC, use este método: [`getCode`](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-code)

### **Como interagir com o bytecode**

Os dados do smart contract são armazenados na EVM em bytecode legível por máquina, e armazenados em aplicações externas em Javascript e outros smart contracts em linguagem Solidity, legível por humanos, pois estes não conseguem se comunicar com bytecode. É aqui que o segundo componente da compilação de smart contracts, a Application Binary Interface \(ABI\), torna essa interação possível.

## **O que é a application binary interface \(ABI\) no Solidity?**

A [**Application Binary Interface (ABI)**](https://www.alchemy.com/overviews/what-is-an-abi-of-a-smart-contract-examples-and-usage) é um interpretador que facilita a comunicação com o bytecode da EVM. A ABI do Solidity é uma lista legível por humanos dos métodos de um smart contract para executar funções específicas. Você pode usar a ABI com uma biblioteca como [ethers.js](https://www.alchemy.com/dapps/ethers-js) para interagir com smart contracts.

Uma ABI no Solidity é parecida com uma API \(Application Program Interface\), mas também é diferente dela.

### **Qual é a diferença entre a ABI do Solidity e uma API?**

Na web2, APIs facilitam a interação entre aplicações web e servidores centralizados, e a ABI do Solidity fornece dados do smart contract para aplicações e outros contratos. Quando uma aplicação usa uma API para solicitar dados de um servidor, a API os fornece, enquanto as ABIs acessam dados de smart contract em formato binário de bytecode conhecido como Solidity Binaries.

Na próxima seção, explicamos o que são Solidity Binaries.

### **O que são Solidity binaries?**

Solidity Binaries são uma infraestrutura de armazenamento de dados exclusiva para smart contracts no ecossistema Ethereum.

Desenvolvedores não podem fazer deploy do código Solidity legível por humanos na blockchain Ethereum. Em vez disso, os dados do smart contract em Solidity são armazenados como bytecode bruto em formato binário \(ou seja, uma longa string de caracteres hexadecimais\). Isso é conhecido como [Solidity Binaries](https://www.alchemy.com/overviews/solidity-binaries), o que torna o armazenamento de dados na blockchain mais econômico.

Mas como a ABI acessa os Solidity Binaries? Ela faz isso por meio de um processo chamado ABI encoding.

### **O que é ABI encoding no Solidity?**

**A ABI chama o smart contract com assinaturas de função e declarações de variáveis que o bytecode baseado em EVM consegue entender.** Isso é conhecido como ABI encoding, no qual a ABI codifica as informações necessárias para que o bytecode legível por máquina as processe. Na maioria dos casos, o ABI encoding é automatizado e feito pelos compiladores de smart contract.

### **O que é ABI decoding?**

**Quando o bytecode da EVM executa uma instrução e retorna um resultado, este vem em formato hexadecimal bruto, e a ABI decodifica esse formato hexadecimal, que não é legível por humanos, para uma linguagem legível por humanos.** Isso é conhecido como ABI decoding.

Você obtém o código Solidity a partir da ABI, e basicamente a ABI atua como a interface para codificar/decodificar dados de e para o código de máquina.

### **Como o código Solidity é mapeado para os opcodes da EVM?**

O bytecode da EVM é composto por uma série de [opcodes](https://ethereum.org/en/developers/docs/evm/opcodes/). **Quando o ABI encoding chama uma função, ele se refere a um opcode específico.** Após processar a transação, o opcode retorna um resultado, que a ABI decodifica para o usuário.

## **Como as ABIs funcionam no Solidity?**

**Uma ABI especifica qual função invocar \(encoding\) e executa a função para retornar dados ao usuário \(decoding\).** Um smart contract contém várias funções que são implantadas na EVM como bytecode, e cada smart contract tem sua própria ABI, que é necessária para obter os resultados.

Como os smart contracts são armazenados em formato binário, a ABI define as estruturas e métodos para interagir com o contrato binário. Após a compilação, o smart contract gera uma ABI representada no formato Solidity JSON ABI.

Algumas IDEs, como o Remix, geram automaticamente a ABI do contrato. No entanto, você também pode criar a ABI manualmente usando o [pacote NPM do Solidity Compiler](https://www.npmjs.com/package/solc).

O Solidity JSON ABI gera os seguintes componentes:

- **Type** - define a natureza da [função](https://www.alchemy.com/overviews/solidity-functions) \(receive, fallback, constructor\)
- **Name** - define o nome da função
- **Inputs** - array de objetos com name, type, components
- **Outputs** - array de objetos semelhante ao inputs
- **stateMutability** - define a mutabilidade da função \(pure, view, [non-payable ou payable](https://www.alchemy.com/docs/solidity-payable-functions)\)

## **Como uma transação funciona com uma ABI?**

Uma transação funciona com um arquivo ABI do Solidity em 3 etapas:

1. A ABI de um smart contract é fornecida à biblioteca frontend, como a EtherJS.
1. A biblioteca frontend traduz a chamada de método e os argumentos em _calldata_, que é fornecida como parte de uma transação a um nó Ethereum.
1. Depois que uma transação é validada, ela gera uma receipts trie contendo os logs detalhados e o gas (taxas de transação) utilizado.

### O que é uma receipts trie?

**Uma transação Ethereum gera um recibo chamado "receipts trie", que registra o resultado de uma transação bem-sucedida.** Uma receipts trie consiste em quatro tipos de informação:

1. Estado da transação
1. Gas cumulativo utilizado
1. Conjunto de logs criados durante a execução
1. Bloom filter composto a partir dos logs

Para entender melhor como uma transação funciona, considere o exemplo a seguir.

## Exemplo de transferência de token ERC-20

Por exemplo, você quer transferir um [token ERC-20](https://www.alchemy.com/overviews/erc20-solidity) de uma carteira para outra. O código a seguir instrui a ABI a enviar uma mensagem para o bytecode baseado em EVM.

O ABI encoding garante que o bytecode reconheça a função e execute a transação. Após gerar um resultado, o ABI decoding traduz o resultado para um formato legível por humanos. O usuário recebe um recibo de que os tokens ERC-20 foram transferidos de um endereço para o outro.

## **Saiba mais sobre a ABI do Solidity**

Ao [aprender Solidity](https://www.alchemy.com/overviews/learn-solidity), você entenderá que a ABI é a base dos smart contracts Ethereum. As ABIs facilitam as transações no ecossistema blockchain. Apesar da importância das ABIs na tecnologia de smart contracts, elas costumam ser negligenciadas em tutoriais para desenvolvedores. Embora fuja do escopo deste artigo, saber o que é a [interface Solidity](https://www.alchemy.com/overviews/solidity-interface) vai aprofundar seu entendimento de como os contratos interagem entre si.

Um entendimento aprofundado da ABI é o ponto de partida para desenvolver smart contracts e [apps](https://www.alchemy.com/dapps/top/defi-dapps) robustos, e para [se tornar um dev Solidity](https://www.alchemy.com/overviews/how-to-become-a-solidity-developer).
