> ## 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.

# Function.decodeResult

> Decode function return values from ABI-encoded data

<Tabs />

## Usage Examples

### Single Return Value

```typescript theme={null}
import { Function } from 'tevm'

const totalSupplyFn = new Function({
  type: "function",
  name: "totalSupply",
  inputs: [],
  outputs: [{ type: "uint256", name: "supply" }]
})

// Call contract and decode
const result = await provider.call({
  to: tokenAddress,
  data: totalSupplyFn.encodeParams([])
})

const [totalSupply] = totalSupplyFn.decodeResult(result)
console.log(totalSupply)  // 1000000n
```

### Multiple Return Values

```typescript theme={null}
import { Function } from 'tevm'

const getReservesFn = new Function({
  type: "function",
  name: "getReserves",
  outputs: [
    { type: "uint112", name: "reserve0" },
    { type: "uint112", name: "reserve1" },
    { type: "uint32", name: "blockTimestampLast" }
  ]
})

const result = await provider.call({
  to: pairAddress,
  data: getReservesFn.encodeParams([])
})

const [reserve0, reserve1, timestamp] = getReservesFn.decodeResult(result)
console.log({ reserve0, reserve1, timestamp })
```

### Boolean Return

```typescript theme={null}
import { Function } from 'tevm'

const transferFn = new Function({
  type: "function",
  name: "transfer",
  inputs: [
    { type: "address", name: "to" },
    { type: "uint256", name: "amount" }
  ],
  outputs: [{ type: "bool", name: "success" }]
})

const result = await provider.call({
  to: tokenAddress,
  data: transferFn.encodeParams([recipient, amount])
})

const [success] = transferFn.decodeResult(result)
console.log(success)  // true or false
```

### Dynamic Return Types

```typescript theme={null}
import { Function } from 'tevm'

const getNameFn = new Function({
  type: "function",
  name: "name",
  outputs: [{ type: "string", name: "name" }]
})

const result = await provider.call({
  to: tokenAddress,
  data: getNameFn.encodeParams([])
})

const [name] = getNameFn.decodeResult(result)
console.log(name)  // "MyToken"
```

### Array Returns

```typescript theme={null}
import { Function } from 'tevm'

const getHoldersFn = new Function({
  type: "function",
  name: "getHolders",
  outputs: [{ type: "address[]", name: "holders" }]
})

const result = await provider.call({
  to: tokenAddress,
  data: getHoldersFn.encodeParams([])
})

const [holders] = getHoldersFn.decodeResult(result)
console.log(holders)  // ["0x...", "0x...", ...]
```

### Struct/Tuple Returns

```typescript theme={null}
import { Function } from 'tevm'

const getOrderFn = new Function({
  type: "function",
  name: "getOrder",
  inputs: [{ type: "uint256", name: "orderId" }],
  outputs: [
    {
      type: "tuple",
      name: "order",
      components: [
        { type: "address", name: "maker" },
        { type: "uint256", name: "amount" },
        { type: "uint256", name: "price" }
      ]
    }
  ]
})

const result = await provider.call({
  to: exchangeAddress,
  data: getOrderFn.encodeParams([1n])
})

const [order] = getOrderFn.decodeResult(result)
console.log(order.maker)   // "0x..."
console.log(order.amount)  // 1000n
console.log(order.price)   // 5n
```

## Error Handling

```typescript theme={null}
import { Function } from 'tevm'
import { AbiDecodingError } from 'tevm'

const balanceOfFn = new Function({
  type: "function",
  name: "balanceOf",
  inputs: [{ type: "address", name: "owner" }],
  outputs: [{ type: "uint256", name: "balance" }]
})

try {
  const result = await provider.call({
    to: tokenAddress,
    data: balanceOfFn.encodeParams([address])
  })

  const [balance] = balanceOfFn.decodeResult(result)
  console.log(balance)
} catch (error) {
  if (error instanceof AbiDecodingError) {
    console.error("Failed to decode return data:", error.message)
  }
}
```

## See Also

* [encodeResult](/primitives/abi/function/encode-result) - Encode function return values
* [encodeParams](/primitives/abi/function/encode-params) - Encode function calldata
* [decodeParams](/primitives/abi/function/decode-params) - Decode function parameters
