BitcoinMachine
TERM_DEF // UPGRADES_BIPS / BIP_350_BECH32M_SPEC
BIP 350
(BECH32M SPEC)
BIP 350 (Bech32m Spec). The Bech32 variant fixing the witness-version mutation issue; used for v1+.

This page sits in the Upgrades & BIPs section — The proposal process and the major upgrades that shaped Bitcoin. Read on for what it is, why it exists, how it works under the hood, and what to watch out for.
BIP 350 (Bech32m Spec) — at a glance
UPGRADES
BIP 350 — "Bech32m Spec" is a proposal in the Addresses family, first published in 2021 with status final. The Bech32 variant fixing the witness-version mutation issue; used for v1+. Its technical mechanism: Bech32m — different polynomial constant (0x2bc830a3) than Bech32 (0x1). every "bc1p..." Taproot address; SegWit v1+
Why it exists
DESIGN
BIP 350 (Bech32m Spec) exists to solve a specific problem: fix a length-extension mutation in Bech32 that affected Taproot addresses. Without a written, numbered spec, every wallet and node implementer would interpret the requirement differently — and Bitcoin's value depends on every implementation agreeing exactly. BIP-350 is the single source of truth for this concern, so any new client built today can match the behaviour of every client built since 2021.
Mechanism
HOW IT WORKS
Mechanically, BIP-350 bech32m — different polynomial constant (0x2bc830a3) than Bech32 (0x1). Adoption today: every "bc1p..." Taproot address; SegWit v1+.
1. Author drafts BIP-350 against the BIP-2 template — abstract, motivation, specification, rationale. 2. The text + a reference implementation are posted on the bitcoin-dev list and as a PR to bitcoin/bips. 3. Reviewers tear it apart: ambiguities, security concerns, edge cases, interaction with prior BIPs. 4. Once stable, the BIP editor merges it; it gets a number (BIP-350) and the status "draft" or "proposed". 5. Implementations land in Bitcoin Core / wallets / other clients. For consensus changes: activation parameters chosen. 6. After deployment + adoption, BIP-350 is promoted to "final"; deprecated proposals get "replaced" or "withdrawn".
BIP-350 — quick reference card
EXAMPLE
BIP number : 350 Title : Bech32m Spec Area : Addresses First published: 2021 Status : final Fork class : no Motivation : fix a length-extension mutation in Bech32 that affected Taproot addresses. Mechanism : Bech32m — different polynomial constant (0x2bc830a3) than Bech32 (0x1). Where it shows up : every "bc1p..." Taproot address; SegWit v1+. Read the spec : https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
OPT-IN
No authority can force a BIP on anyone. Adoption depends entirely on whether the change is genuinely useful.
NUMBERED
Stable numeric reference — BIP-350 means the same thing across every wallet, miner, and node that has read this spec.
BIP-350 is not a consensus rule — clients can implement it without coordinating with the network at large.
DEPLOYED
Implementations of BIP-350 are in production. The behaviour is observable on mainnet today.
Things that catch people out
PITFALLS
  • Don't confuse "draft" / "proposed" / "final" status — read the BIP header before relying on it in production.
  • The BIP number is just an editorial counter — it doesn't imply correctness or stability. Always cross-reference with the latest bitcoin/bips repo.

TERMINOLOGY
BIP 350 (Bech32m Spec)
The Bech32 variant fixing the witness-version mutation issue; used for v1+.
Segregated Witness (SegWit, BIP 141)
The 2017 upgrade separating witness data, fixing tx malleability, and introducing weight units.
Taproot (BIP 341)
The 2021 upgrade introducing key-aggregable schnorr-signatures/">Schnorr signatures and Merkleized script trees.
Tapscript (BIP 342)
Script-language updates accompanying Taproot — new opcodes, removed limits.
Schnorr (BIP 340)
The Schnorr signature spec adopted by Taproot.
BIP Process
The community workflow for proposing, discussing, and tracking changes to Bitcoin.
Soft Fork Activation
The mechanism (versionbits, MASF, UASF, Speedy Trial) by which soft forks turn on.
MASF (Miner-Activated Soft Fork)
Activation triggered by miner signaling in block versions.