Overview
Bech32 is an address encoding format specified in BIP173, designed for native SegWit addresses. It replaced the older Base58Check encoding for SegWit-compatible addresses, offering significant improvements in usability and error detection. An updated version, Bech32m (BIP350), was introduced for Taproot addresses.
Key Features
- Case-insensitive: Bech32 addresses use only lowercase letters and numbers, eliminating confusion between upper and lowercase characters
- Better error detection: Can detect up to 4 errors and locate up to 2 errors in an address
- Lower fees: Native SegWit transactions are smaller in terms of weight units, resulting in lower fees
- QR-friendly: Produces more compact QR codes since the encoding is more efficient
Address Structure
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
│ │ │
│ │ └── Data (witness program, encoded)
│ └──── Separator (always "1")
└─────── Human-readable part ("bc" for mainnet, "tb" for testnet)
Bech32m (Taproot):
bc1p5cyxnuxmeuwuvkwfem96lqzszee2457nljy653y...
│ │
│ └── "p" indicates witness version 1 (Taproot)
└───── Same "bc" prefix for mainnet
Bech32 vs Bech32m
The original Bech32 encoding had a weakness where certain types of errors in the last character could go undetected for witness version 1 and above. Bech32m (BIP350) fixes this by using a different constant in the checksum calculation. All Taproot (version 1) addresses use Bech32m, while version 0 SegWit addresses continue to use Bech32.
Adoption
Since its introduction, Bech32 adoption has grown steadily. Most modern wallets generate Bech32 addresses by default. Some older services and wallets may not support sending to bc1 addresses, though this is increasingly rare.