# Address

Utility functions for working with Ethereum addresses.

## Examples

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

* [Instantiating Addresses](#instantiating-addresses)

* [Validating Addresses](#validating-addresses)

* [Addresses from ECDSA Public Keys](#addresses-from-ecdsa-public-keys)

### Instantiating Addresses

An [`Address.Address`](/api/Address/types#address) can be instantiated from a hex string using [`Address.from`](/api/Address/from):

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

const address = Address.from(
  '0xa0cf798816d4b9b9866b5330eea46a18382f251e'
)
// @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'
```

### Validating Addresses

The [`Address.validate`](/api/Address/validate) function will return `true` if the address is valid, and `false` otherwise:

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

const valid = Address.validate(
  '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'
)
// @log: true
```

The [`Address.assert`](/api/Address/assert) function will throw an error if the address is invalid:

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

Address.assert('0xdeadbeef')
// @error: InvalidAddressError: Address "0xdeadbeef" is invalid.
```

### Addresses from ECDSA Public Keys

An [`Address.Address`](/api/Address/types#address) can be computed from an ECDSA public key using [`Address.fromPublicKey`](/api/Address/fromPublicKey):

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

const privateKey = Secp256k1.randomPrivateKey()
const publicKey = Secp256k1.getPublicKey({ privateKey })

const address = Address.fromPublicKey(publicKey)
// @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Address.assert`](/api/Address/assert) | Asserts that the given value is a valid [`Address.Address`](/api/Address/types#address). |
| [`Address.checksum`](/api/Address/checksum) | Computes the checksum address for the given [`Address.Address`](/api/Address/types#address). |
| [`Address.from`](/api/Address/from) | Converts a stringified address to a typed (optionally checksummed) [`Address.Address`](/api/Address/types#address). |
| [`Address.fromPublicKey`](/api/Address/fromPublicKey) | Converts an ECDSA public key to an [`Address.Address`](/api/Address/types#address). |
| [`Address.isEqual`](/api/Address/isEqual) | Checks if two [`Address.Address`](/api/Address/types#address) are equal. |
| [`Address.validate`](/api/Address/validate) | Checks if the given address is a valid [`Address.Address`](/api/Address/types#address). |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Address.InvalidAddressError`](/api/Address/errors#addressinvalidaddresserror) | Thrown when an address is invalid. |
| [`Address.InvalidChecksumError`](/api/Address/errors#addressinvalidchecksumerror) | Thrown when an address does not match its checksum counterpart. |
| [`Address.InvalidInputError`](/api/Address/errors#addressinvalidinputerror) | Thrown when an address is not a 20 byte (40 hexadecimal character) value. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Address.Address`](/api/Address/types#addressaddress) | Root type for Address. |
