Skip to content

Instantly share code, notes, and snippets.

@leozc
Created February 25, 2024 19:32
Show Gist options
  • Save leozc/7f4dc417cc38e0df49da4541d82d8405 to your computer and use it in GitHub Desktop.
Save leozc/7f4dc417cc38e0df49da4541d82d8405 to your computer and use it in GitHub Desktop.
BTC address type
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