# AbiError

Utilities & types for working with [Errors](https://docs.soliditylang.org/en/latest/abi-spec.html#json) on ABIs.

`AbiError` is a sub-type of [`AbiItem`](/api/AbiItem).

## Examples

Below are some examples demonstrating common usages of the `AbiError` module:

* [Instantiating via JSON ABI](#instantiating-via-json-abi)

* [Instantiating via Human-Readable ABI Item](#instantiating-via-human-readable-abi-item)

* [Decoding Error Data](#decoding-error-data)

### Instantiating via JSON ABI

An `AbiError` can be instantiated from a JSON ABI by using [`AbiError.fromAbi`](/api/AbiError/fromAbi):

```ts twoslash
import { Abi, AbiError } from 'ox'

const abi = Abi.from([
  'function foo()',
  'error BadSignatureV(uint8 v)',
  'function bar(string a) returns (uint256 x)'
])

const item = AbiError.fromAbi(abi, 'BadSignatureV') // [!code focus]
//    ^?
```

### Instantiating via Human-Readable ABI Item

An `AbiError` can be instantiated from a human-readable ABI by using [`AbiError.from`](/api/AbiError/from):

```ts twoslash
import { AbiError } from 'ox'

const error = AbiError.from('error BadSignatureV(uint8 v)')

error
//^?
```

### Decoding Error Data

Error data can be ABI-decoded using the [`AbiError.decode`](/api/AbiError/decode) function.

```ts twoslash
// @noErrors
import { Abi, AbiError } from 'ox'

const abi = Abi.from([...])
const error = AbiError.fromAbi(abi, 'InvalidSignature')

const value = AbiError.decode(error, '0xecde634900000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001') // [!code focus]
// @log: [420n, 69n, 1]
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`AbiError.decode`](/api/AbiError/decode) | ABI-decodes the provided error input (`inputs`). |
| [`AbiError.encode`](/api/AbiError/encode) | ABI-encodes the provided error input (`inputs`), prefixed with the 4 byte error selector. |
| [`AbiError.extract`](/api/AbiError/extract) | Extracts an [`AbiError.AbiError`](/api/AbiError/types#abierror) from an [`Abi.Abi`](/api/Abi/types#abi) and decodes its arguments from error data. |
| [`AbiError.format`](/api/AbiError/format) | Formats an [`AbiError.AbiError`](/api/AbiError/types#abierror) into a **Human Readable ABI Error**. |
| [`AbiError.from`](/api/AbiError/from) | Parses an arbitrary **JSON ABI Error** or **Human Readable ABI Error** into a typed [`AbiError.AbiError`](/api/AbiError/types#abierror). |
| [`AbiError.fromAbi`](/api/AbiError/fromAbi) | Extracts an [`AbiError.AbiError`](/api/AbiError/types#abierror) from an [`Abi.Abi`](/api/Abi/types#abi) given a name and optional arguments. |
| [`AbiError.getSelector`](/api/AbiError/getSelector) | Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an [`AbiError.AbiError`](/api/AbiError/types#abierror). |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`AbiError.AbiError`](/api/AbiError/types#abierrorabierror) | Root type for an [`AbiItem.AbiItem`](/api/AbiItem/types#abiitem) with an `error` type. |
| [`AbiError.ExtractNames`](/api/AbiError/types#abierrorextractnames) |  |
| [`AbiError.FromAbi`](/api/AbiError/types#abierrorfromabi) | Extracts an [`AbiError.AbiError`](/api/AbiError/types#abierror) item from an [`Abi.Abi`](/api/Abi/types#abi), given a name. |
| [`AbiError.Name`](/api/AbiError/types#abierrorname) | Extracts the names of all [`AbiError.AbiError`](/api/AbiError/types#abierror) items in an [`Abi.Abi`](/api/Abi/types#abi). |
