blockcypher / blockcypher-python

Python library for the BlockCypher web services

Home Page:https://www.blockcypher.com/dev/bitcoin

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

is_valid_address_for_coinsymbol fails for Ethereum addresses with uppercase characters

BrynGibson opened this issue · comments

To replicate:

import blockcypher
eth_addr = '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed'
blockcypher.get_address_details(address=eth_addr , coin_symbol='eth', api_key=API_KEY)

after doing some digging it appears that is_valid_address_for_coinsymbol calls is_valid_eth_address which in turn calls: uses_only_hash_chars(addr).

uses_only_hash_chars is defined as:

HEX_CHARS_RE = re.compile('^[0-9a-f]*$')

def uses_only_hash_chars(string):
    return bool(HEX_CHARS_RE.match(string))

We could update this by making it a non-case sensitive regex query such as:
HEX_CHARS_RE = re.compile('^[0-9a-f]*$', re.IGNORECASE).

If we detect a mixed case eth address we could also perfom a checksum validation to ensure the address checksum validates before creating an api call. Checksum validation of eth addresses using Python is described here: https://eips.ethereum.org/EIPS/eip-55

Is checksum validation something we should be doing here, or simply adapting the regex to be case insensitive?