Tool · Keys & addresses

Key forge

From a private key to a prl1 address, one step at a time

Key forge

Private key → public key → Taproot tweak → prl1 address

For learning only. A key shown on a web page is not secret. Never send real PRL to an address made here.

Key 1 is the most famous key there is: its public key is the generator point G itself. Anyone can spend from its addresses.

  1. 1

    Private key d

    A secret number between 1 and n − 1 (n ≈ 1.16 × 10⁷⁷). 32 bytes.

    0000000000000000000000000000000000000000000000000000000000000001

  2. 2

    Public key P = d·G

    Multiply the curve’s starting point G by d. Compressed: a parity byte, then x.

    0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

    02 · y is even Taproot keeps only x (32 bytes, “x-only”) and assumes the even y.

  3. 3

    Tweak t

    t = TaggedHash(“TapTweak”, P.x)

    3cf5216d476a5e637bf0da674e50ddf55c403270dd36494dfcca438132fa30e7

    BIP-86: no script tree, so the tweak commits to the key alone. It proves there is no hidden script.

  4. 4

    Output key Q = P + t·G

    The key that actually goes on the chain. Its private key is d + t (with d negated first if P’s y was odd).

    da4710964f7852695de2da025290e24af6d8c281de5a0b902b7135fd9fd74d21

  5. 5

    Address bech32m

    Prefix + “1” + witness version 1 (“p”) + Q in 5-bit letters + a 6-letter checksum.

    prl1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sse9xfq3

    scriptPubKey 51 20 da 47 10 96… (63 characters)

Runs in your browser · nothing is sent · keys are never saved src/lib/keys.ts · bech32m.ts

What it does

Start from a private key (a small number like 1, 2, 3…, a random one, or one you type) and follow it through five cards to a Pearl address. Switch the network to see the same key as a prl1, tprl1 or rprl1 address.

How to read it

  1. Private key d: a secret number from 1 to just under 2²⁵⁶.
  2. Public key P = d·G: the curve’s starting point G multiplied by d. Compressed, it is a parity byte (02 or 03) and the 32-byte x-coordinate. Taproot keeps only x.
  3. Tweak t = TaggedHash(“TapTweak”, P.x). With no script tree (BIP-86) the tweak commits to the key alone.
  4. Output key Q = P + t·G: the key that appears on the chain.
  5. Address: the prefix, the separator 1, the witness version (p = 1), Q in 5-bit letters, and a 6-letter checksum.

Key 1 gives prl1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sse9xfq3, a test vector in the site’s research.

Pearl specifics

  • Pearl wallets make exactly these BIP-86 Taproot addresses by default, with the prefixes prl (mainnet), tprl (testnet) and rprl (regtest). A mainnet address is 63 characters.
  • A real wallet derives its keys from 12 words along m/86'/808276'/0'/0/i; this tool starts from the private key itself.
  • For learning only. A key shown on a web page is not secret. Never send PRL to an address made here. Small keys like 1, 2 or 3 are known to everyone. The page never saves a key, and only small-number keys go in the share link.

Under the hood

Runs entirely in your browser. Keys, the tweak and the address come from src/lib/keys.ts (privToPub, bip86Details) and src/lib/bech32m.ts, on top of the audited @noble/curves. Unit tests reproduce the research’s key-to-address vectors (public key, tweak, output key, address) and the official BIP-86 vectors.

Suggested

Up and down arrows move through the results, Enter opens one, Escape closes. Anywhere on the site, slash or Command K opens this search, and the square brackets [ and ] go to the previous and next page.