Bech32m
Also called: bech32m address, bc1p, Taproot address format, BIP350.
Bech32m is the modified Bech32 address format from BIP 350, used for SegWit version 1 and later, such as Taproot addresses starting with bc1p.
Bech32m is a small change to the Bech32 address format, defined in BIP 350 by Pieter Wuille. It is used for SegWit outputs of version 1 and higher, which today means Taproot addresses starting with bc1p.
What changed
Everything about Bech32 stays the same (the bc or tb prefix, the 1 separator, the 32-character alphabet and the 6-character checksum) except one constant. Bech32 XORs the checksum with 1; Bech32m uses 0x2bc830a3. That fixes a weakness found in Bech32: when the last character is p, inserting or deleting any number of q characters right before it leaves the checksum valid. No string can be valid under both encodings.
Which addresses use which
| Witness version | Encoding | Prefix |
|---|---|---|
| 0 (P2WPKH, P2WSH) | Bech32 (BIP 173) | bc1q |
| 1 (P2TR) | Bech32m | bc1p |
| 2 to 16 (not yet defined) | Bech32m | bc1z, bc1r, ... |
A decoder must check that the encoding matches the version: a bc1p address with a Bech32 checksum is invalid.
A deliberate break
Making version 1+ addresses fail in old Bech32 validators was intentional. BIP 350 notes that testing found some software would have burned funds when sending to version 1 addresses, and a clean break makes such software reject the address instead. Wallets therefore need Bech32m support to pay Taproot users. BIP 350 also asks implementers to accept every version from 1 to 16, so future upgrades work without further changes.
Silent payment addresses (BIP 352) also use Bech32m. Compare the two formats in BIP 173 vs BIP 350.