Also covering Bech32m, BIP173, and Native segwit address
Bech32 is an address format used to pay native segwit outputs.
Using only 32 letters and numbers, the bech32 address format is case insensitive and includes an error-correction code that can catch almost all address typos (and even identify where the typos occur in some cases). Addresses encode a segwit version, making them forward compatible with a large range of conceivable upgrades.
After a problem was discovered with bech32 error detection for future upgrades under some rare circumstances, a new bech32 modified (bech32m) format was proposed. It is expected that bech32m will be used for taproot and future segwit-based script upgrades, requiring wallets and services that implemented support for paying the original bech32 address format to upgrade if they want to support paying taproot address and future upgrades. No upgrade is required to continue paying the original (version 0) segwit addresses for P2WPKH and P2WSH scripts.
Primary code and documentation
Optech newsletter and website mentions
- 2020 year in review: taproot’s need for a modified bech32 address format
- Q&A: What is the difference between ‘native segwit’ and ‘bech32’?
- Problems with QR-encoded bech32 BIP21 invoices with uppercase schema
- Bech32 algorithm revision research and proposal
- Discussion about updates to BIP173 bech32 to address mutability concerns
- Proposed updates to BIP173 bech32 to address mutability concerns
- 2019 year-in-review: bech32 mutability
- Proposed plan to deal with bech32 malleability in variable-length addresses
- Analysis of bech32 error detection capability
- LND #3767 rejects malformed BOLT11 invoices with a valid bech32 checksum
- How does the bech32 length-extension mutation weakness work?
- Impact of bech32 length-change mutability on v1 segwit script length
- Bech32 sending support (24-part series)