def test_erc20_interface(token: Contract, token_owner: str, empty_address: str): """Token satisfies ERC-20 interface.""" # https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20.sol assert token.call().balanceOf(empty_address) == 0 assert token.call().allowance(token_owner, empty_address) == 0 # Event # We follow OpenZeppelin - in the ERO20 issue names are _from, _to, _value transfer = token._find_matching_event_abi("Transfer", ["from", "to", "value"]) assert transfer approval = token._find_matching_event_abi("Approval", ["owner", "spender", "value"]) assert approval
def test_erc20_interface(token: Contract, token_owner: str, empty_address: str): """Token satisfies ERC-20 interface.""" # https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20.sol assert token.functions.balanceOf(empty_address).call() == 0 assert token.functions.allowance(token_owner, empty_address).call() == 0 # Event # We follow OpenZeppelin - in the ERO20 issue names are _from, _to, _value transfer = token._find_matching_event_abi("Transfer", ["from", "to", "value"]) assert transfer approval = token._find_matching_event_abi("Approval", ["owner", "spender", "value"]) assert approval
def event_data(contract: Contract, tx, event_name): """ Extract the specified event from a transaction. :param contract: The Web3 Contract object :type contract: Contract :param event_name: :param tx: :return: """ receipt = contract.web3.eth.getTransactionReceipt(tx) data = None for log_entry in receipt['logs']: try: event_abi = contract._find_matching_event_abi(event_name) data = get_event_data(event_abi, log_entry) except MismatchedABI: pass if not data: raise ValueError('event not found {}'.format(event_name)) return data