> **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.

# Address

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

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`](/docs/utilities/address/types#address) can be instantiated from a hex string using [`Address.from`](/docs/utilities/address/from):

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

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

### Validating Addresses

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

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

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

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

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

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

### Addresses from ECDSA Public Keys

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

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

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

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

## Functions

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

## Errors

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

## Types

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