# standard imports import logging # third-party imports import celery from cic_registry.chain import ChainSpec from cic_registry import CICRegistry celery_app = celery.current_app logg = logging.getLogger() def translate_address(address, trusted_addresses, chain_spec): for trusted_address in trusted_addresses: o = CICRegistry.get_contract(chain_spec, 'AddressDeclarator', 'Declarator') fn = o.function('declaration') declaration_hex = fn(trusted_address, address).call() declaration_bytes = declaration_hex[0].rstrip(b'\x00') declaration = None try: declaration = declaration_bytes.decode('utf-8', errors='strict') except UnicodeDecodeError: continue return declaration @celery_app.task() def translate_tx_addresses(tx, trusted_addresses, chain_str): chain_spec = ChainSpec.from_chain_str(chain_str) declaration = None if tx['sender_label'] == None: declaration = translate_address(tx['sender'], trusted_addresses, chain_spec) tx['sender_label'] = declaration declaration = None if tx['recipient_label'] == None: declaration = translate_address(tx['recipient'], trusted_addresses, chain_spec) tx['recipient_label'] = declaration return tx