# Virtual Addresses

:::info
This guide is intended to be low-level. If you are looking for a high-level abstraction, check out
[Viem's Virtual Addresses guide](https://viem.sh/tempo/guides/virtual-addresses).
:::

## Overview

TIP-1022 virtual addresses let a service assign a distinct payment address to each customer while
forwarding supported payments to one registered master address. A virtual address encodes a
4-byte master ID and a 6-byte user tag in a normal 20-byte address.

Ox separates the local data operations from the network operations. Use
[`VirtualMaster`](/tempo/reference/VirtualMaster) to mine and verify a registration salt, and use
[`VirtualAddress`](/tempo/reference/VirtualAddress) to derive and parse virtual addresses. Registering
a master and resolving its current onchain record require a Tempo client or direct contract calls.

[See the Virtual Addresses specification](https://docs.tempo.xyz/protocol/tip20/virtual-addresses)

## See More

<Cards>
  <Card icon="lucide:user-plus" title="Register a Master Address" description="Mine and verify the proof-of-work salt used by a master registration." to="/tempo/guides/virtual-addresses/register-a-master-address" />

  <Card icon="lucide:scan-search" title="Create and Parse Addresses" description="Derive tagged addresses locally and recover their encoded parts." to="/tempo/guides/virtual-addresses/create-and-parse-addresses" />

  <Card icon="lucide:book-open" title="Viem: Virtual Addresses" description="Register, derive, and resolve virtual addresses with a Viem client." to="https://viem.sh/tempo/guides/virtual-addresses" />
</Cards>
