Created
February 25, 2024 19:32
-
-
Save leozc/7f4dc417cc38e0df49da4541d82d8405 to your computer and use it in GitHub Desktop.
BTC address type
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
def identify_btc_address_type(address): | |
# P2PKH: Starts with '1' | |
if address.startswith('1'): | |
return 'P2PKH' | |
# P2SH: Starts with '3' | |
elif address.startswith('3'): | |
return 'P2SH' | |
# P2WPKH and P2TR: Start with 'bc1' | |
elif address.startswith('bc1'): | |
# P2WPKH: Starts with 'bc1q' and is 42 characters long | |
if re.match(r'^bc1q[\w]{39}$', address): | |
return 'P2WPKH' | |
# P2TR: Starts with 'bc1p' and is 62 characters long | |
elif re.match(r'^bc1p[\w]{59}$', address): | |
return 'P2TR' | |
else: | |
return 'Unknown Bech32 format' | |
else: | |
return 'Unknown address type' | |
# Test cases | |
test_addresses = { | |
'1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2': 'P2PKH', | |
'3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy': 'P2SH', | |
'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq': 'P2WPKH', | |
'bc1p5cyxnuxmeuwuvkwfem96l0zp438wgpsqf2e0sl': 'P2TR', | |
'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4': 'P2WPKH', # Valid P2WPKH example | |
'bc1pw5dgrnzv': 'Unknown Bech32 format', # Invalid example, too short | |
'2CBbNBCsU9hdENSBg4B2imEZEFmags1tQu': 'Unknown address type', # Invalid prefix | |
'bc1qrqsyqcyq5rqwzqfpg9scrgyg0p0l5w7kv8f3t4': 'Unknown Bech32 format', # Incorrect length for valid types | |
'17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem': 'P2PKH', # Another valid P2PKH example | |
'3Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6': 'P2SH' # Another valid P2SH example | |
} | |
# Running the tests | |
for address, expected_type in test_addresses.items(): | |
result = identify_btc_address_type(address) | |
print(f"Address: {address}, Expected: {expected_type}, Result: {result}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment