# QRL address formats — Legacy vs QRL 2.0

> Both QRL chains use a Q-prefix address, but they are different lengths and derived differently. Here's how to tell them apart.

Both QRL chains write addresses starting with a capital `Q`. That shared prefix is convenient branding, but it hides an important fact: the two chains use **different address formats**, and the way to tell them apart is **length**, not prefix.

## The two formats

| | QRL Legacy | QRL 2.0 |
|---|---|---|
| Total length | **79 characters** | **41 characters** |
| Prefix | `Q` | `Q` |
| Hex characters | 78 | 40 |
| Binary size | 39 bytes | 20 bytes |
| Derived from | [XMSS](/learn/xmss-explained) public key | [ML-DSA-87](/learn/ml-dsa-87-explained) public key |

A glance at the length is all you need: **79 = Legacy, 41 = QRL 2.0**.

![Byte layout of both address formats. A QRL Legacy address is 39 bytes — a 3-byte descriptor, a 32-byte SHA-256 hash and a 4-byte checksum — written as 79 characters. A QRL 2.0 address is a single 20-byte account written as 41 characters.](diagram:address-anatomy "The two address formats side by side: Legacy packs 39 bytes into 79 characters; QRL 2.0 uses a 20-byte account in 41 characters. Both start with Q — length is the tell.")

## How a QRL Legacy address is built (39 bytes)

A Legacy address encodes 39 bytes, which become 78 hex characters after the `Q`:

- **3-byte descriptor** — records the signature scheme and its parameters (for example, the hash function and tree height).
- **32-byte hash** — a SHA-256 hash of the extended public key.
- **4-byte checksum** — the leading bytes of a second SHA-256, used to detect typos before a transaction is sent.

This structure comes straight from XMSS: because the address commits to the signature parameters in its descriptor, the chain knows how to verify signatures against it.

## How a QRL 2.0 address is built (20 bytes)

QRL 2.0 is EVM-compatible, so its addresses are the same **20-byte** size as Ethereum's — 40 hex characters after the `Q`. They are derived from the [ML-DSA-87](/learn/glossary#ml-dsa-87) public key using a hash (SHAKE-256) rather than the Keccak hash Ethereum uses, but the end result is the familiar 20-byte account address. The visible difference is the prefix: QRL 2.0 writes `Q…` where Ethereum writes `0x…`.

## Why you can't convert one to the other

A common misconception is that a holder's Legacy address and their QRL 2.0 address must be related. They are not. The two are derived from **different keys** (an XMSS key vs an ML-DSA-87 key) using **different schemes**. There is no function that turns one into the other.

When QRL Legacy value moves to QRL 2.0, the link between an old and a new address is a **claim** recorded during the process — not something anyone can compute from the addresses themselves. This explorer treats any such link as a claim, never as a derivable fact. The mechanics are covered in [the QRL → QRL 2.0 migration](/learn/the-qrl-migration).

## What this means on the explorer

- Paste either format into the search bar and the explorer routes it to the right chain automatically, using the length to decide.
- A 79-character result is always Legacy; a 41-character result is always QRL 2.0.
- The same person may hold addresses on both chains, but the explorer never assumes two addresses are "the same wallet" unless a migration claim says so.

## Where to go next

- [XMSS explained](/learn/xmss-explained) and [ML-DSA-87 explained](/learn/ml-dsa-87-explained) — the schemes behind each format.
- [Reading a block explorer](/learn/reading-a-block-explorer) — putting addresses, blocks and transactions together.
