---
title: "What is an ABI?"
description: "An introduction to Application Binary Interface (ABI)."
url: https://info.etherscan.com/what-is-an-abi/
tags: ["Developer"]
published: 2024-02-21
updated: 2026-06-21
---

# What is an ABI?

Smart contract code is written in human-readable languages, such as Solidity and Vyper. When compiled and stored on the Ethereum Virtual Machine (EVM), it is converted into bytecode, a machine-recognizable format.

Attempting to read and write smart contracts on Ethereum without an interface to translate between human and machine-readable language would make interaction with the smart contracts difficult.

An ABI (Application Binary Interface) serves as an interface that translates human-readable instructions (function calls and parameters) into machine-executable code (calldata) and vice versa.

With the ABI, smart contracts can communicate with other applications and smart contracts. The ABI is produced by a smart contract compiler, outlining the entire scope of functions a smart contract has, the types of arguments those functions take, and the kind of values they return.

[![](https://info.etherscan.com/what-is-an-abi/images/2024/02/image-28.png)](https://medium.com/@eiki1212/explaining-ethereum-contract-abi-evm-bytecode-6afa6e917c3b)

Source: medium.com/@eiki1212

For example, when a user wants to initiate an ERC-20 transfer, they will call the function `transfer(address _to, uint _value) public`. The ABI will send a message in the form of bytecode, such as `0xa9059cbb0000000000000000000000000320b7c5b1c31d43de7ea9d13fbf9ff82067585d00000000000000000000000000000000000000000000000000000000af79e000`, to the smart contract for execution.

Understanding what a smart contract is doing is possible without reading the code, simply by referring to the ABI. The ABI for the function call as represented in JSON:

```
{
    "constant":false,
    "inputs":[
                {
                    "name":"_to",
                    "type":"address"
                },
                {
                    "name":"_value",
                    "type":"uint256"
                }
             ],
    "name":"transfer",
    "outputs":[],
    "payable":false,
    "stateMutability":"nonpayable",
    "type":"function"
}
```

You can obtain the ABI of a verified contract on Etherscan under the code tab.  
For example:

[![](https://info.etherscan.com/what-is-an-abi/images/2024/02/image-30.png)](https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#code)

Click image to view it on Etherscan

### Further reading:

-   [Explaining Ethereum Contract ABI & EVM Bytecode](https://medium.com/@eiki1212/explaining-ethereum-contract-abi-evm-bytecode-6afa6e917c3b)
