Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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