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

# PublicKey

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

Utility functions for working with ECDSA public keys.

## Examples

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

* [Serializing Public Keys](#serializing-public-keys)

* [Deserializing Public Keys](#deserializing-public-keys)

### Serializing Public Keys

Public Keys can be serialized to Hex or Bytes using [`PublicKey.toHex`](/docs/utilities/publickey/toHex):

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

const publicKey = PublicKey.from({
  prefix: 4,
  x: '0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75',
  y: '0x3547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'
})

const serialized = PublicKey.toHex(publicKey) // [!code focus]
// @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'
```

### Deserializing Public Keys

Public Keys can be deserialized from Hex or Bytes using [`PublicKey.fromHex`](/docs/utilities/publickey/fromHex):

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

const publicKey = PublicKey.fromHex(
  '0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'
)
// @log: {
// @log:   prefix: 4,
// @log:   x: '0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75',
// @log:   y: '0x3547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',
// @log: }
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`PublicKey.assert`](/docs/utilities/publickey/assert) | Asserts that a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) is valid. |
| [`PublicKey.compress`](/docs/utilities/publickey/compress) | Compresses a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey). |
| [`PublicKey.from`](/docs/utilities/publickey/from) | Instantiates a typed [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) object from a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey), [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes), or [`Hex.Hex`](/docs/utilities/hex/types#hex). |
| [`PublicKey.fromBytes`](/docs/utilities/publickey/fromBytes) | Deserializes a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) from a [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes) value. |
| [`PublicKey.fromHex`](/docs/utilities/publickey/fromHex) | Deserializes a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) from a [`Hex.Hex`](/docs/utilities/hex/types#hex) value. |
| [`PublicKey.toBytes`](/docs/utilities/publickey/toBytes) | Serializes a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) to [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes). |
| [`PublicKey.toHex`](/docs/utilities/publickey/toHex) | Serializes a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey) to [`Hex.Hex`](/docs/utilities/hex/types#hex). |
| [`PublicKey.validate`](/docs/utilities/publickey/validate) | Validates a [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickey). Returns `true` if valid, `false` otherwise. |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`PublicKey.InvalidCompressedPrefixError`](/docs/utilities/publickey/errors#publickeyinvalidcompressedprefixerror) | Thrown when the public key has an invalid prefix for a compressed public key. |
| [`PublicKey.InvalidError`](/docs/utilities/publickey/errors#publickeyinvaliderror) | Thrown when a public key is invalid. |
| [`PublicKey.InvalidPrefixError`](/docs/utilities/publickey/errors#publickeyinvalidprefixerror) | Thrown when a public key has an invalid prefix. |
| [`PublicKey.InvalidSerializedSizeError`](/docs/utilities/publickey/errors#publickeyinvalidserializedsizeerror) | Thrown when the public key has an invalid serialized size. |
| [`PublicKey.InvalidUncompressedPrefixError`](/docs/utilities/publickey/errors#publickeyinvaliduncompressedprefixerror) | Thrown when the public key has an invalid prefix for an uncompressed public key. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`PublicKey.PublicKey`](/docs/utilities/publickey/types#publickeypublickey) | Root type for an ECDSA Public Key. |
