§ 04 · Keys & addresses
Derivation paths
The street address of every key in your wallet
On this page 7 sections
A derivation pathDerivation path: The route through a wallet's key tree to one key, written like m/86'/808276'/0'/0/0 (Pearl's first receive address). 808276 comes from the letters P, R, L (codes 80, 82, 76). is a list of child numbers that leads from the master key to one particular key. Pearl’s first receive address lives at:
m/86'/808276'/0'/0/0
Read it left to right like a street address: master, then purpose, coin, account, branch, house number. Every Pearl wallet walks the same path, which is why the same 12 words give the same addresses in Oyster, oystercli and the desktop wallet.
Try it
Type a phrase and choose a path level. The tool shows each node of the tree and the address at the end.
What does each level mean?
| Field | Size | Description |
|---|---|---|
| m | – | The master key, made from the seed with HMAC-SHA512 ("Bitcoin seed"). |
| 86' | hardened | Purpose: BIP-86, single-key Taproot addresses. The only purpose Oyster uses for addresses. |
| 808276' | hardened | Coin type: Pearl mainnet. All test networks use 1'. |
| 0' | hardened | Account. The desktop wallet uses account 0. |
| 0 or 1 | normal | Branch: 0 = receive addresses you hand out, 1 = change the wallet pays back to itself. |
| i | normal | Index: 0, 1, 2… a new one each time you ask for an address. |
The ’ marks a hardenedHardened derivation: A way to make a child key that needs the parent's private key, marked with ' in a path (86'). Child numbers 2³¹ and up are hardened. A leaked child key then can't expose its siblings. level: its child number has 2³¹ added, and deriving it needs the parent’s private key. The first three levels are hardened, the last two are not. That split lets an account’s zpub derive every address in the account while keeping other accounts and coins separate.
Where does 808276 come from?
From the letters P, R, L. Their ASCII codes are 80, 82 and 76; write the three decimal numbers side by side and you get 808276. Pearl’s code says so in a comment: “Derived from ASCII ‘PRL’: 808276 (0xC5554)”.
| Value | |
|---|---|
| Coin typeCoin type: The second level of a wallet path, which keeps each coin's keys apart. Pearl mainnet uses 808276, the ASCII codes of P, R and L written as decimals; test networks use 1. | 808276 = 0x000C5554 |
| Hardened child number | 808276 + 2³¹ = 0x800C5554 |
| Bitcoin’s coin type, for comparison | 0 (0x80000000 hardened) |
| Test networks | 1 |
Note what it is not: the hex bytes of “PRL” (50 52 4c) read as one number would be 5,263,948. And as of 2026-10-20, 808276 is not registered in SLIP-44, the public list of coin types.
How does a phrase become an address?
Here is the BIP-39 test phrase (“abandon … about”, public, never use it) walked down the path with Pearl’s derivation:
| Path | Child number | Private key (first bytes) | Public key (compressed, first bytes) |
|---|---|---|---|
| m | – | 1837c1be… |
03d902f3… |
| m/86’ | 80000056 |
f27e267a… |
029d1bd8… |
| m/86’/808276’ | 800c5554 |
c4b834ae… |
023b77e1… |
| m/86’/808276’/0’ | 80000000 |
f97b8a1b… |
03ddeae3… |
| m/86’/808276’/0’/0 | 00000000 |
d6f68f41… |
03a34659… |
| m/86’/808276’/0’/0/0 | 00000000 |
c08fd707… |
02e0cafb… |
The last key is an ordinary private key. Its x-only public key e0cafb2d…f4ec4e gets the Taproot tweak, giving the output key 1e89c01f…0a4f76, and that becomes the address:
| Path | Address |
|---|---|
| m/86’/808276’/0’/0/0 | prl1pr6yuq8u2r95wjzzgpdy8cpnncpl7l8zgy6x5q0367pnc53s2famqg7pt74 |
| m/86’/808276’/0’/0/1 | prl1pyx3nlscz8rvsxqhcjtyqt2g5szuk9ss7m5saszu3afwwhvn9zp2sz62rhm |
| m/86’/808276’/0’/0/2 | prl1pfrfqcvcmghjc3mpsazm9p9ktttyuewzlfmn40dzkwh0muejgkr3sfx9jwd |
| m/86’/808276’/0’/1/0 (change) | prl1puwagcza86exfh3cx6ur08wq7njc32e66ep0zje7le6c7cak8lqeq655gqa |
| m/86’/1’/0’/0/0 (testnet) | tprl1p8wpt9v4frpf3tkn0srd97pksgsxc5hs52lafxwru9kgeephvs7rqm5v93u |
These match what a real Oyster wallet produced for the same phrase in the research for this site.
What is the m/222’ branch?
Pearl’s quantum-safe option. Every Oyster wallet also creates a second key scope, purpose 222, which is 0xDE, the byte of OP_CHECKXMSSSIG. It is used only when someone calls getnewaddress … pq=true:
- The normal Schnorr key comes from m/86’/808276’/0’/branch/index as usual.
- A second key comes from m/222’/808276’/0’/branch/index. Its public key is never used. Its private key is stretched with HKDF-SHA256 (info “XMSS-SEED-EXPANSION”) into the seeds of an XMSS key pair.
- The XMSS public key goes into a script leaf, and the leaf is committed into the Taproot tweak of the normal key.
Both keys come from the same 12 words, and the pq address takes the next index on the same branch counter. The desktop wallet never requests one, and change addresses never use it.
Why does Oyster’s README say m/44’?
It’s out of date. The wallet’s README and some comments describe a m/44'/<coin type>'/… path, from the BIP-44 wallets Oyster’s code was forked from. Pearl’s code registers only the BIP-86 scope and the PQ scope; BIP-44, 49 and 84 are commented out. “BIP-44 coin type” in the comments just names the coin-type level. Trust the code: purpose 86.
Why can another wallet show different addresses?
Because Oyster inherited an old bug from btcd, the Go library Pearl’s node and wallet are built on.
btcd stores a private key as a big number, which drops a leading zero byte: a key starting 00 is kept as 31 bytes. Its old hardened derivation, now called DeriveNonStandard, then copied those 31 bytes into the HMAC input one position off. The child it computes is a valid key, just not the one BIP-32 specifies. Oyster still uses that routine for the three hardened levels.
So when a hardened step’s parent key starts with a zero byte, Oyster’s child differs from everyone else’s, and every key below it does too. A real example:
| Phrase | duty grid canyon okay pledge turkey uniform cook disease garment satisfy luggage |
| m/86’ private key | 004f2e93f278324d… (starts with a zero byte) |
| Oyster, /0/0 | prl1p6ldp0y2w4d8v6mgt0fhvqqxw0ud5jzn5fdv4qyu25sv5a66ll6lqrzeuju |
| Standard BIP-32, /0/0 | prl1pfwfe3gt75qw665u7dhh676fc8x653u6cqy4xqa2gryfflmqsp6ksn5ae9l |
The master key is kept as 32 bytes, so only two hardened steps (from m/86’ and from m/86’/808276’) can be hit, each with a 1-in-256 chance. About 2 in 256 seeds are affected: the research for this site measured 160 of 20,000 seeds, 0.8%. The test phrase “abandon … about” is not one of them.