# Authorization

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`](/api/Authorization/from):

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

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

### Computing Sign Payload

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

```ts twoslash
import { Authorization, Secp256k1 } from 'ox'

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`](/api/Authorization/from):

```ts twoslash
import {
  Authorization,
  Secp256k1,
  TxEnvelopeEip7702,
  Value
} from 'ox'

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

## Types

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