# Contract ABIs: the interface used to encode calls

An Ethereum Application Binary Interface, or ABI, describes how to encode calls and decode results, errors and events for a contract. It is an interface schema, not the executable code or a security guarantee. A correct ABI must match the contract implementation being used, including any proxy context.

Evidence: [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html); [Proxy contracts](https://docs.openzeppelin.com/contracts/5.x/api/proxy)

Canonical: https://degreesofsatoshi.com/encyclopedia/ethereum-contract-abis/
Published: 2026-10-02
Substantively modified: 2026-10-02
Independently verified by an automated reviewer: 2026-10-02T18:12:41.505Z
Data current through: 2026-10-02

AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied.

## Key facts

- **Functions:** The ABI defines parameter and return types for function interfaces. ([Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html))
- **Events:** Event declarations distinguish indexed topics from encoded data. ([Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html))
- **Errors:** Custom error data can be decoded using its error signature and argument types. ([Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html))

## Translate a method call into bytes

A library combines a function selector with ABI-encoded arguments. When execution returns data, the declared return types tell the library how to interpret the bytes.

Dynamic values use offsets and lengths, while fixed-size values follow fixed encoding conventions. Human-readable names do not travel with every encoded argument.

Evidence: [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html)

## A plausible interface can still be the wrong interface

Using an ABI from another version can mislabel selectors, misdecode data or offer functions the deployed implementation does not support. Proxy upgrades make version context particularly important.

The ABI says how a function is called, not whether its implementation is honest. A function named withdraw can still contain restrictive or dangerous logic.

Evidence: [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html); [Proxy contracts](https://docs.openzeppelin.com/contracts/5.x/api/proxy)

## A read call and a signed transaction use different paths

A tool can use eth_call to execute against a selected state without publishing a transaction. A state-changing transaction requires authorization and inclusion before its effects become part of the chain.

The same ABI can support both workflows. A simulation result is not a receipt for an executed transaction.

Evidence: [Ethereum JSON-RPC](https://ethereum.org/en/developers/docs/apis/json-rpc/); [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html)

## Questions

### Does an ABI contain private keys?

An ABI is an interface description and does not require private keys. Signing authority is separate from the schema used to encode or decode calls.

Evidence: [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html); [Ethereum accounts](https://ethereum.org/en/developers/docs/accounts/)

## Claims and scope

### ethereum-contract-abis-quick-answer

An Ethereum Application Binary Interface, or ABI, describes how to encode calls and decode results, errors and events for a contract. It is an interface schema, not the executable code or a security guarantee. A correct ABI must match the contract implementation being used, including any proxy context.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### ethereum-contract-abis-fact-functions

Functions: The ABI defines parameter and return types for function interfaces.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### ethereum-contract-abis-fact-events

Events: Event declarations distinguish indexed topics from encoded data.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### ethereum-contract-abis-fact-errors

Errors: Custom error data can be decoded using its error signature and argument types.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

## Sources

- [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.30/abi-spec.html) — Solidity contributors. ABI encoding, selectors, event topics and event data. Locator: Function Selector; Argument Encoding; Events; Errors; JSON. Retrieved: 2026-10-02T17:03:42.824Z.
- [Proxy contracts](https://docs.openzeppelin.com/contracts/5.x/api/proxy) — OpenZeppelin. Proxy implementation slots, delegated execution and upgrade authority. Locator: TransparentUpgradeableProxy; UUPSUpgradeable; ERC1967Proxy. Retrieved: 2026-10-02T17:03:43.024Z.
- [Ethereum JSON-RPC](https://ethereum.org/en/developers/docs/apis/json-rpc/) — ethereum.org contributors. RPC response fields, transaction receipts, call simulation and log filtering. Locator: eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter. Retrieved: 2026-10-02T17:03:42.060Z.
- [Ethereum accounts](https://ethereum.org/en/developers/docs/accounts/) — ethereum.org contributors. Key-controlled and code-controlled accounts, balances, nonces and storage. Locator: Account types; An account examined; Account creation. Retrieved: 2026-10-02T17:03:41.958Z.

## Revision history

- 2026-10-02: First publication after primary-source research and independent automated verification.

## Cite this entry

Degrees of Satoshi editorial project. “Contract ABIs: the interface used to encode calls.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/ethereum-contract-abis/
