Why Can't Bech32m Be Mixed with Bech32?

 / 
4

Bech32m cannot be mixed with Bech32. The fundamental reason is that their checksum algorithms are incompatible, and Bitcoin address format rules require strict separation of encoding methods based on the SegWit version: version 0 addresses (P2WPKH, P2WSH) must use Bech32, while version 1 and above addresses (including Taproot's P2TR) must use Bech32m. A valid Bech32 string and a valid Bech32m string, even if they are the same length, will differ in at least three characters and cannot pass both checksums at the same time. Allowing them to be mixed would directly weaken the error detection ability of addresses.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

Why Can't We "Accept Both"?

BIP350 gives a specific reason for not allowing version 0 addresses to accept both Bech32 and Bech32m: allowing two encodings to coexist would reduce the effective checksum strength to only 29 bits instead of the originally designed 30 bits. The core value of address checksums is that when you copy an address by hand or paste it, a single character error can be caught with high probability. Mixing the rules is equivalent to actively lowering the sensitivity of this protection.

Wallet software decoding logic also confirms that this incompatibility is a hard design requirement. In common implementations, the decoder first tries to verify the Bech32m checksum, and if that fails, it tries Bech32. It then performs a second check based on the decoded witness version number: if the version is 0 but Bech32m was used, it throws an error; if the version is 1 or higher but Bech32 was used, it also throws an error. The encoding method and version number must be paired. There is no room for "either one works."

Why Was Bech32m Needed in the First Place?

Bech32 was introduced in 2017 along with SegWit, but it had a weakness that was discovered later: when the last character of a string is p, inserting or deleting any number of q characters immediately before it does not break the checksum. This insertion weakness has limited impact on version 0 addresses because the length of P2WPKH and P2WSH addresses is fixed, leaving a very narrow attack window. However, for future address versions where length restrictions may not be as rigid, this weakness could be exploited.

Bech32m makes a very small change: it only changes the final XOR constant in the checksum calculation from 1 to 0x2bc830a3. All other encoding rules remain unchanged. This change is enough to eliminate the insertion weakness while preserving Bech32's ability to detect substitution errors.

What Happens If Wallets Don't Distinguish Them?

The compatibility section of BIP350 records a key finding: during experiments with the Taproot proposal, it was discovered that almost no wallets or services supported payments to higher-version SegWit outputs, and some implementations, if they processed a version 1 address using old rules, could cause user funds to be burned. This is the practical reason for choosing a "clean break" rather than a "compatible transition" — making new addresses incompatible with the old Bech32 checksum means old software will simply reject Bech32m addresses with an error, rather than "appearing to succeed" and sending coins to an output it cannot correctly understand.

Conversely, new software supports both checksum algorithms during decoding so it can read old addresses. But it must check whether the encoding matches the decoded version number and reject it if there is a mismatch. This design of "able to read, but not accepting wrong combinations" is the technical implementation of why mixing is not allowed.

What This Means for You

As a user, you do not need to manually decide which encoding an address should use. Wallets automatically select the correct format based on the version when generating addresses. What you need to pay attention to is the sending process: if you are using an older wallet or exchange platform, it may not recognize or may say the address is invalid when you try to send to a Taproot address starting with bc1p (version 1, Bech32m). This does not mean the address is wrong; it means the sender's software has not been updated to support Bech32m. Do not try to "bypass" the checksum in any way, and do not try to convert the address to Bech32 format — that will only result in the transaction being rejected by the network or loss of funds. Updating your wallet software or using a different sending channel that confirms support for Taproot addresses is the only correct way to handle this.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

References

  1. Bitcoin BIPs·BIP 350: Bech32m format for v1+ witness addresses,2026-10-26
  2. Bitcoin Optech·Bech32(m),2026-10-26
  3. Bitcoin.org·BIP 350,2026-10-26