From 750064483e9d79749662b564480c221d459112d1 Mon Sep 17 00:00:00 2001 From: uttam12331 Date: Tue, 11 Aug 2026 10:47:21 +0530 Subject: [PATCH] Fix BTC segwit regex to accept testnet (tb) prefix The bech32/segwit branch guard routes both `bc` (mainnet) and `tb` (testnet) HRPs into the regex, but the regex accepted `(bc|tc)`. `tc` is not a valid Bitcoin HRP (mainnet is `bc`, testnet is `tb`), and since the guard never lets a `tc`-prefixed value reach the regex, that alternative was dead code. As a result every valid testnet segwit address was rejected. Change the regex alternative to `(bc|tb)` and add a testnet address test. --- src/validators/crypto_addresses/btc_address.py | 2 +- tests/crypto_addresses/test_btc_address.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/validators/crypto_addresses/btc_address.py b/src/validators/crypto_addresses/btc_address.py index ff401114..a23a071d 100644 --- a/src/validators/crypto_addresses/btc_address.py +++ b/src/validators/crypto_addresses/btc_address.py @@ -50,7 +50,7 @@ def btc_address(value: str, /): return ( # segwit pattern - re.compile(r"^(bc|tc)[0-3][02-9ac-hj-np-z]{14,74}$").match(value) + re.compile(r"^(bc|tb)[0-3][02-9ac-hj-np-z]{14,74}$").match(value) if value[:2] in ("bc", "tb") else _validate_old_btc_address(value) ) diff --git a/tests/crypto_addresses/test_btc_address.py b/tests/crypto_addresses/test_btc_address.py index f9c4482e..6f739308 100644 --- a/tests/crypto_addresses/test_btc_address.py +++ b/tests/crypto_addresses/test_btc_address.py @@ -17,6 +17,8 @@ # Bech32/segwit type "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq", "bc1qc7slrfxkknqcq2jevvvkdgvrt8080852dfjewde450xdlk4ugp7szw5tk9", + # Bech32/segwit type, testnet (tb) HRP + "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", ], ) def test_returns_true_on_valid_btc_address(value: str):