# AbiParameters

Utilities & types for encoding, decoding, and working with [ABI Parameters](https://docs.soliditylang.org/en/latest/abi-spec.html#types)

## Examples

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

* [Encoding ABI Parameters](#encoding-abi-parameters)

* [Decoding ABI Parameters](#decoding-abi-parameters)

* [JSON-ABI Parameters](#json-abi-parameters)

* [Human Readable ABI Parameters](#human-readable-abi-parameters)

### Encoding ABI Parameters

ABI Parameters can be ABI-encoded as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec) using [`AbiParameters.encode`](/api/AbiParameters/encode):

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

const data = AbiParameters.encode(
  AbiParameters.from('string, uint, bool'),
  ['wagmi', 420n, true]
)
```

:::tip
The example above uses [`AbiParameters.from`](/api/AbiParameters/from) to specify human-readable ABI Parameters.

However, you can also pass JSON-ABI Parameters:

```ts
import { AbiParameters } from 'ox'

const data = AbiParameters.encode(
  [{ type: 'string' }, { type: 'uint' }, { type: 'bool' }],
  ['wagmi', 420n, true]
)
```
:::

### Decoding ABI Parameters

ABI-encoded data can be decoded using [`AbiParameters.decode`](/api/AbiParameters/decode):

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

const data = AbiParameters.decode(
  AbiParameters.from('string, uint, bool'),
  '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000'
)
// @log: ['wagmi', 420n, true]
```

### JSON-ABI Parameters

JSON-ABI Parameters can be instantiated using [`AbiParameters.from`](/api/AbiParameters/from):

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

const parameters = AbiParameters.from([
  {
    name: 'spender',
    type: 'address'
  },
  {
    name: 'amount',
    type: 'uint256'
  }
])

parameters
//^?
```

### Human Readable ABI Parameters

Human Readable ABI Parameters can be instantiated using [`AbiParameters.from`](/api/AbiParameters/from):

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

const parameters = AbiParameters.from(
  'address spender, uint256 amount'
)

parameters
//^?
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`AbiParameters.decode`](/api/AbiParameters/decode) | Decodes ABI-encoded data into its respective primitive values based on ABI Parameters. |
| [`AbiParameters.encode`](/api/AbiParameters/encode) | Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec). |
| [`AbiParameters.encodePacked`](/api/AbiParameters/encodePacked) | Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode). |
| [`AbiParameters.format`](/api/AbiParameters/format) | Formats [`AbiParameters.AbiParameters`](/api/AbiParameters/types#abiparameters) into **Human Readable ABI Parameters**. |
| [`AbiParameters.from`](/api/AbiParameters/from) | Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed [`AbiParameters.AbiParameters`](/api/AbiParameters/types#abiparameters). |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`AbiParameters.ArrayLengthMismatchError`](/api/AbiParameters/errors#abiparametersarraylengthmismatcherror) | The length of the array value does not match the length specified in the corresponding ABI parameter. |
| [`AbiParameters.BytesSizeMismatchError`](/api/AbiParameters/errors#abiparametersbytessizemismatcherror) | The size of the bytes value does not match the size specified in the corresponding ABI parameter. |
| [`AbiParameters.DataSizeTooSmallError`](/api/AbiParameters/errors#abiparametersdatasizetoosmallerror) | Throws when the data size is too small for the given parameters. |
| [`AbiParameters.InvalidAbiParametersError`](/api/AbiParameters/errors#abiparametersinvalidabiparameterserror) |  |
| [`AbiParameters.InvalidAbiTypeParameterError`](/api/AbiParameters/errors#abiparametersinvalidabitypeparametererror) |  |
| [`AbiParameters.InvalidArrayError`](/api/AbiParameters/errors#abiparametersinvalidarrayerror) | The value provided is not a valid array as specified in the corresponding ABI parameter. |
| [`AbiParameters.InvalidFunctionModifierError`](/api/AbiParameters/errors#abiparametersinvalidfunctionmodifiererror) |  |
| [`AbiParameters.InvalidModifierError`](/api/AbiParameters/errors#abiparametersinvalidmodifiererror) |  |
| [`AbiParameters.InvalidParameterError`](/api/AbiParameters/errors#abiparametersinvalidparametererror) |  |
| [`AbiParameters.InvalidParenthesisError`](/api/AbiParameters/errors#abiparametersinvalidparenthesiserror) |  |
| [`AbiParameters.InvalidTypeError`](/api/AbiParameters/errors#abiparametersinvalidtypeerror) | Throws when the ABI parameter type is invalid. |
| [`AbiParameters.LengthMismatchError`](/api/AbiParameters/errors#abiparameterslengthmismatcherror) | The length of the values to encode does not match the length of the ABI parameters. |
| [`AbiParameters.SolidityProtectedKeywordError`](/api/AbiParameters/errors#abiparameterssolidityprotectedkeyworderror) |  |
| [`AbiParameters.ZeroDataError`](/api/AbiParameters/errors#abiparameterszerodataerror) | Throws when zero data is provided, but data is expected. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`AbiParameters.AbiParameters`](/api/AbiParameters/types#abiparametersabiparameters) | Root type for ABI parameters. |
| [`AbiParameters.PackedAbiType`](/api/AbiParameters/types#abiparameterspackedabitype) | A packed ABI type. |
| [`AbiParameters.Parameter`](/api/AbiParameters/types#abiparametersparameter) | A parameter on an [`AbiParameters.AbiParameters`](/api/AbiParameters/types#abiparameters). |
