> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://v3.viem.sh/api/mcp` to find what you need.

# Authorization

:::info
`Authorization` is a re-export of ox's [`Authorization`](https://oxlib.sh/api/Authorization). Refer to the ox documentation for the full reference.
:::

Utility functions for working with [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization lists & tuples.

## Examples

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

* [Instantiating Authorizations](#instantiating-authorizations)

* [Computing Sign Payload](#computing-sign-payload)

* [Attaching Signatures to Authorizations](#attaching-signatures-to-authorizations)

### Instantiating Authorizations

An Authorization can be instantiated using [`Authorization.from`](/docs/utilities/authorization/from):

```ts twoslash
// @noErrors
import { Authorization } from 'viem/utils'

const authorization = Authorization.from({
  address: '0x1234567890abcdef1234567890abcdef12345678',
  chainId: 1,
  nonce: 69n
})
```

### Computing Sign Payload

A signing payload can be computed using [`Authorization.getSignPayload`](/docs/utilities/authorization/getSignPayload). The result can then be passed to signing functions like [`Secp256k1.sign`](/docs/utilities/secp256k1/sign).

```ts twoslash
// @noErrors
import { Authorization, Secp256k1 } from 'viem/utils'

const authorization = Authorization.from({
  address: '0x1234567890abcdef1234567890abcdef12345678',
  chainId: 1,
  nonce: 69n
})

const payload = Authorization.getSignPayload(authorization) // [!code focus]

const signature = Secp256k1.sign({
  payload,
  privateKey: '0x...'
})
```

### Attaching Signatures to Authorizations

A signature can be attached to an Authorization using [`Authorization.from`](/docs/utilities/authorization/from):

```ts twoslash
// @noErrors
import {
  Authorization,
  Secp256k1,
  TxEnvelopeEip7702,
  Value
} from 'viem/utils'

const authorization = Authorization.from({
  address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
  chainId: 1,
  nonce: 40n
})

const signature = Secp256k1.sign({
  payload: Authorization.getSignPayload(authorization),
  privateKey: '0x...'
})

const authorization_signed = Authorization.from(
  authorization,
  { signature }
) // [!code focus]

const envelope = TxEnvelopeEip7702.from({
  authorizationList: [authorization_signed],
  chainId: 1,
  maxFeePerGas: Value.fromGwei('10'),
  to: '0x0000000000000000000000000000000000000000',
  value: Value.fromEther('1')
})
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Authorization.from`](/docs/utilities/authorization/from) | Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.fromRpc`](/docs/utilities/authorization/fromRpc) | Converts an [`Authorization.Rpc`](/docs/utilities/authorization/types#rpc) to an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.fromRpcList`](/docs/utilities/authorization/fromRpcList) | Converts an [`Authorization.ListRpc`](/docs/utilities/authorization/types#listrpc) to an [`Authorization.List`](/docs/utilities/authorization/types#list). |
| [`Authorization.fromTuple`](/docs/utilities/authorization/fromTuple) | Converts an [`Authorization.Tuple`](/docs/utilities/authorization/types#tuple) to an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.fromTupleList`](/docs/utilities/authorization/fromTupleList) | Converts an [`Authorization.TupleList`](/docs/utilities/authorization/types#tuplelist) to an [`Authorization.List`](/docs/utilities/authorization/types#list). |
| [`Authorization.getSignPayload`](/docs/utilities/authorization/getSignPayload) | Computes the sign payload for an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization) in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`. |
| [`Authorization.hash`](/docs/utilities/authorization/hash) | Computes the hash for an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization) in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`. |
| [`Authorization.toRpc`](/docs/utilities/authorization/toRpc) | Converts an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization) to an [`Authorization.Rpc`](/docs/utilities/authorization/types#rpc). |
| [`Authorization.toRpcList`](/docs/utilities/authorization/toRpcList) | Converts an [`Authorization.List`](/docs/utilities/authorization/types#list) to an [`Authorization.ListRpc`](/docs/utilities/authorization/types#listrpc). |
| [`Authorization.toTuple`](/docs/utilities/authorization/toTuple) | Converts an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization) to an [`Authorization.Tuple`](/docs/utilities/authorization/types#tuple). |
| [`Authorization.toTupleList`](/docs/utilities/authorization/toTupleList) | Converts an [`Authorization.List`](/docs/utilities/authorization/types#list) to an [`Authorization.TupleList`](/docs/utilities/authorization/types#tuplelist). |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Authorization.Authorization`](/docs/utilities/authorization/types#authorizationauthorization) | Root type for an EIP-7702 Authorization. |
| [`Authorization.List`](/docs/utilities/authorization/types#authorizationlist) | List of [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.ListRpc`](/docs/utilities/authorization/types#authorizationlistrpc) | RPC representation of an [`Authorization.List`](/docs/utilities/authorization/types#list). |
| [`Authorization.ListSigned`](/docs/utilities/authorization/types#authorizationlistsigned) | Signed representation of a list of [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.Rpc`](/docs/utilities/authorization/types#authorizationrpc) | RPC representation of an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.Signed`](/docs/utilities/authorization/types#authorizationsigned) | Signed representation of an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.Tuple`](/docs/utilities/authorization/types#authorizationtuple) | Tuple representation of an [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.TupleList`](/docs/utilities/authorization/types#authorizationtuplelist) | Tuple representation of a list of [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.TupleListSigned`](/docs/utilities/authorization/types#authorizationtuplelistsigned) | Tuple representation of a list of signed [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |
| [`Authorization.TupleSigned`](/docs/utilities/authorization/types#authorizationtuplesigned) | Tuple representation of a signed [`Authorization.Authorization`](/docs/utilities/authorization/types#authorization). |

## Viem Helpers

Functions added by Viem on top of the `Authorization` module.

| Name | Description |
| ---- | ----------- |
| [`Authorization.recoverAddress`](/docs/utilities/authorization/recoverAddress) | Recovers the authorizing address of an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) authorization. |
| [`Authorization.verify`](/docs/utilities/authorization/verify) | Verifies that an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) authorization was signed by the provided address (or public key). |
