> ## Documentation Index
> Fetch the complete documentation index at: https://voltaire.tevm.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Abi.decode

> Decode function return data using a full ABI

<Card title="Try it Live" icon="play" href="https://playground.tevm.sh?example=primitives/abi.ts">
  Run ABI examples in the interactive playground
</Card>

## Overview

`Abi.decode` decodes **function return data** using a full ABI. It looks up the function by name and decodes the return values based on the function outputs.

## Quick Start

```typescript theme={null}
import { Abi } from '@tevm/voltaire/Abi';
import { Hex } from '@tevm/voltaire/Hex';

const abi = Abi([
  {
    type: 'function',
    name: 'balanceOf',
    stateMutability: 'view',
    inputs: [{ type: 'address', name: 'account' }],
    outputs: [{ type: 'uint256', name: 'balance' }]
  }
] as const);

const returnData = Hex.toBytes(
  '0x00000000000000000000000000000000000000000000000000000000000f4240'
);

const [balance] = abi.decode('balanceOf', returnData);
// balance = 1000000n
```

## Decode Without Abi Instance

If you already have the function item, decode directly:

```typescript theme={null}
import { Abi } from '@tevm/voltaire/Abi';

const balanceOf = {
  type: 'function',
  name: 'balanceOf',
  inputs: [{ type: 'address', name: 'account' }],
  outputs: [{ type: 'uint256', name: 'balance' }]
} as const;

const [balance] = Abi.Function.decodeResult(balanceOf, returnData);
```

## Overloads and Ambiguity

`Abi.decode` matches by function **name**. With overloads, pick the exact function by signature:

```typescript theme={null}
const signature = 'foo(address,uint256)';
const fn = abi.find(
  (item) =>
    item.type === 'function' &&
    Abi.Function.getSignature(item) === signature
);

const result = Abi.Function.decodeResult(fn, returnData);
```

## Error Handling

```typescript theme={null}
import { Abi, AbiItemNotFoundError, AbiDecodingError } from '@tevm/voltaire/Abi';

try {
  abi.decode('missingFunction', returnData);
} catch (error) {
  if (error instanceof AbiItemNotFoundError) {
    console.error('Function not found in ABI');
  }
  if (error instanceof AbiDecodingError) {
    console.error('Return data did not match output types');
  }
}
```

## See Also

* [encode](/primitives/abi/encode) - Encode function calls
* [decodeData](/primitives/abi/decode-data) - Decode calldata by selector
* [Function.decodeResult](/primitives/abi/function-decode-result) - Function-specific decoding
* [Encoding](/primitives/abi/encoding) - ABI encoding rules
