Skip to content

is_valid_address_for_coinsymbol fails for Ethereum addresses with uppercase characters  #163

@BrynGibson

Description

@BrynGibson

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions