# standard imports import os import logging # third-party imports import web3 from cic_registry import CICRegistry # local imports from cic_eth.eth.token import ExtendedTx logg = logging.getLogger() def test_extended_token( default_chain_spec, dummy_token, local_cic_registry, address_declarator, init_w3, ): address_foo = web3.Web3.toChecksumAddress('0x' + os.urandom(20).hex()) label_foo = '0x{:<064s}'.format(b'foo'.hex()) address_bar = web3.Web3.toChecksumAddress('0x' + os.urandom(20).hex()) label_bar = '0x{:<064s}'.format(b'bar'.hex()) label_token = '0x{:<064s}'.format(b'toktoktok'.hex()) # TODO: still need to test results with two different tokens token_contract = init_w3.eth.contract(abi=CICRegistry.abi('ERC20'), address=dummy_token) token = CICRegistry.add_token(default_chain_spec, token_contract) declarator = CICRegistry.get_contract(default_chain_spec, 'AddressDeclarator', 'Declarator') fn = declarator.function('addDeclaration') fn(address_foo, label_foo).transact({'from': init_w3.eth.accounts[1]}) fn(address_bar, label_bar).transact({'from': init_w3.eth.accounts[1]}) fn(dummy_token, label_token).transact({'from': init_w3.eth.accounts[1]}) tx_hash = '0x' + os.urandom(32).hex() xtx = ExtendedTx(tx_hash, default_chain_spec) xtx.set_actors(address_foo, address_bar, [init_w3.eth.accounts[1]]) xtx.set_tokens(dummy_token, 1024) tx = xtx.to_dict() logg.debug('tx {}'.format(tx)) assert tx['hash'] == tx_hash assert tx['source_token'] == dummy_token assert tx['destination_token'] == dummy_token assert tx['source_token_symbol'] == token.symbol() assert tx['destination_token_symbol'] == token.symbol() assert tx['source_token_value'] == 1024 assert tx['destination_token_value'] == 1024 assert tx['source_token_decimals'] == token.decimals() assert tx['destination_token_decimals'] == token.decimals() assert tx['sender'] == address_foo assert tx['sender_label'] == 'foo' assert tx['recipient'] == address_bar assert tx['recipient_label'] == 'bar' assert tx['chain'] == str(default_chain_spec)