From 644e484d4a8376cb8ba564a449999148aaaaf8f5 Mon Sep 17 00:00:00 2001 From: Ferdinando Ametrano Date: Fri, 31 Jul 2026 22:59:39 +0200 Subject: [PATCH] BIP321: make all example addresses intentionally invalid The base58 example address has an intentionally invalid checksum, but the bech32 and bech32m examples added later have valid checksums, so they are spendable addresses that a reader may pay by accident -- the very hazard that motivated the invalid base58 address in #119. Two of them are mainnet: bc1qufgy354j3kmvuch987xe4s40836x3h0lg8f5n2 (bech32, witness v0) bc1p5swkugezn...vep9m4p7339x5qzyrh4g (bech32m, witness v1) tb1qghfhmd4zh7ncpmxl3qzhmq566jk8ckq4gafnmg (bech32, testnet) Alter the final checksum character of each, and document the intent with the note BIP 21 received in #1861. Bech32 detects any single-character substitution, so the modified strings cannot be valid addresses. The human-readable part, charset and length are unchanged, so the examples remain structurally representative of P2WPKH and P2TR. The uppercase QR-code variants are updated to match, and the changed testnet address in the "Invalid URIs" section still demonstrates the same point (a `tb` address in the `bc` parameter). Alternative to #2228, which leaves the addresses untouched and instead words the note to match them. Co-Authored-By: Claude Opus 5 (1M context) --- bip-0321.mediawiki | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bip-0321.mediawiki b/bip-0321.mediawiki index 74a8689f..34604dae 100644 --- a/bip-0321.mediawiki +++ b/bip-0321.mediawiki @@ -142,6 +142,8 @@ Any existing BIP 21 implementation should automatically be fully compliant with === Examples === +Note: The addresses used in these examples are intentionally invalid to prevent accidental transactions. + ==== URIs ==== Just the address: @@ -181,14 +183,14 @@ Some future version that has variables which are (currently) not understood but bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?somethingyoudontunderstand=50&somethingelseyoudontget=999 Multiple segwit addresses may be included for various versions of segwit, note that the human-readable part for all of them is `bc` - bitcoin:?bc=bc1qufgy354j3kmvuch987xe4s40836x3h0lg8f5n2&bc=bc1p5swkugezn97763tl0yty6556856uug0q6jflljvep9m4p7339x5qzyrh4g + bitcoin:?bc=bc1qufgy354j3kmvuch987xe4s40836x3h0lg8f5nq&bc=bc1p5swkugezn97763tl0yty6556856uug0q6jflljvep9m4p7339x5qzyrh4q Many QR codes utilize all-uppercase URIs, which should be handled fine - BITCOIN:BC1QUFGY354J3KMVUCH987XE4S40836X3H0LG8F5N2?BC=BC1P5SWKUGEZN97763TL0YTY6556856UUG0Q6JFLLJVEP9M4P7339X5QZYRH4G - BITCOIN:?BC=BC1QUFGY354J3KMVUCH987XE4S40836X3H0LG8F5N2&BC=BC1P5SWKUGEZN97763TL0YTY6556856UUG0Q6JFLLJVEP9M4P7339X5QZYRH4G + BITCOIN:BC1QUFGY354J3KMVUCH987XE4S40836X3H0LG8F5NQ?BC=BC1P5SWKUGEZN97763TL0YTY6556856UUG0Q6JFLLJVEP9M4P7339X5QZYRH4Q + BITCOIN:?BC=BC1QUFGY354J3KMVUCH987XE4S40836X3H0LG8F5NQ&BC=BC1P5SWKUGEZN97763TL0YTY6556856UUG0Q6JFLLJVEP9M4P7339X5QZYRH4Q A testnet segwit addresses must be included in the `tb` parameter - bitcoin:?tb=tb1qghfhmd4zh7ncpmxl3qzhmq566jk8ckq4gafnmg + bitcoin:?tb=tb1qghfhmd4zh7ncpmxl3qzhmq566jk8ckq4gafnmq Characters must be URI encoded properly. @@ -207,7 +209,7 @@ Multiple proof of payment URIs must not appear, even if they are sometimes prefi bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?pop=callback%3a&req-pop=callback%3a A testnet segwit addresses must be included in the `tb` parameter, not the `bc` parameter. - bitcoin:?bc=tb1qghfhmd4zh7ncpmxl3qzhmq566jk8ckq4gafnmg + bitcoin:?bc=tb1qghfhmd4zh7ncpmxl3qzhmq566jk8ckq4gafnmq ==== Proof of Payment ====