BEGINNER_DOC_008 // BEGINNERS / KEYS-AND-ADDRESSES
KEYS &
ADDRESSES
ADDRESSES
Bitcoin addresses are not accounts — they are one-time destinations derived from
keys. The full chain runs from a secret private key, to a public key, to a hashed address.
Each step is a one-way transformation. Different address formats encode different spending
conditions and have evolved to become more efficient and private over time.
THE_FULL_DERIVATION_CHAIN
STEP 1 — PRIVATE KEY
Random 256-bit integer (keep secret)
E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262
STEP 2 — PUBLIC KEY (COMPRESSED, 33 BYTES)
0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
STEP 3 — PUBLIC KEY HASH (20 BYTES)
751E76E8199196F454F0D9D762E8B308E6895B14
version-byte-base58check/">VERSION BYTE + BASE58CHECK
STEP 4 — BITCOIN ADDRESS (HUMAN-READABLE)
1BpEi6DfDAUFd153wiGrvkiKW1J1EcUAFZ ← P2PKH (Legacy)
3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy ← P2SH
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 ← Bech32 (Native SegWit)
ADDRESS_FORMATS
P2PKH — Legacy Address
STARTS WITH 1
Pay-to-Public-Key-Hash. The original Bitcoin address format from 2009. Widely supported but least efficient in terms of transaction fees.
Version byte: 0x00 (mainnet)
Encoding: Base58Check
Example: 1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf Va
Script: OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Pay-to-Script-Hash. The address encodes a hash of a redeem script, enabling multisig and other complex conditions. Introduced in BIP16.
Version byte: 0x05 (mainnet)
Encoding: Base58Check
Example: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
Script: OP_HASH160 <ScriptHash> OP_EQUAL
Pay-to-Witness-Public-Key-Hash. SegWit v0 address format. Lower fees due to witness discount. No Base58 — uses Bech32 encoding (BIP173).
HRP: bc (human-readable part for mainnet)
Version: 0 (SegWit version 0)
Encoding: Bech32
Example: bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
Script: OP_0 <20-byte-hash>
Pay-to-Taproot. SegWit v1 address using schnorr-signatures/">Schnorr signatures and MAST. Most private and flexible format. Introduced in BIP 340/341/342 (2021).
HRP: bc (human-readable part for mainnet)
Version: 1 (SegWit version 1)
Encoding: Bech32m
Example: bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297
Script: OP_1 <32-byte-x-only-pubkey>
Taproot addresses encode a tweaked public key — it can be spent by a single key (looks like any other address) or by revealing a hidden script tree.
TERMINOLOGY_INDEX
Address
An encoded destination for bitcoin. Derived from a public key hash or script hash.
HASH160
SHA-256 followed by RIPEMD-160. Produces a 20-byte fingerprint of the public key.
Base58Check
Encoding for legacy addresses. Omits visually similar characters (0, O, I, l) and includes a 4-byte checksum.
Bech32
Encoding for SegWit v0 (P2WPKH, P2WSH) addresses. Error-detecting, lowercase only.
Bech32m
Improved Bech32 for SegWit v1+ (Taproot). Fixed a length-extension mutation bug in Bech32.
Checksum
Error-detection bytes appended to an address. Wallets reject addresses with invalid checksums.