Пример #1
0
def test_filter_start_block_inclusive(deploy_client, blockchain_backend):
    """ A filter includes events from the block given in from_block """
    contract_proxy = deploy_rpc_test_contract(deploy_client)

    # call the create event function twice and wait for confirmation each time
    gas = contract_proxy.createEvent.estimate_gas() * 2
    transaction_hex_1 = contract_proxy.createEvent.transact(1, startgas=gas)
    deploy_client.poll(transaction_hex_1.decode('hex'))
    transaction_hex_2 = contract_proxy.createEvent.transact(2, startgas=gas)
    deploy_client.poll(transaction_hex_2.decode('hex'))

    # create a new filter in the node
    new_filter(deploy_client, contract_proxy.address, None)

    result_1 = get_filter_events(deploy_client, contract_proxy.address, None)
    block_number_events = get_list_of_block_numbers(result_1)
    block_number_event_1 = block_number_events[0]
    block_number_event_2 = block_number_events[1]

    # inclusive from_block should return both events
    result_2 = get_filter_events(deploy_client,
                                 contract_proxy.address,
                                 None,
                                 from_block=block_number_event_1)
    assert get_list_of_block_numbers(result_2) == block_number_events

    # a higher from_block must not contain the first event
    result_3 = get_filter_events(deploy_client,
                                 contract_proxy.address,
                                 None,
                                 from_block=block_number_event_1 + 1)
    assert get_list_of_block_numbers(result_3) == [block_number_event_2]
Пример #2
0
def get_contract_events(
        chain,
        abi,
        contract_address,
        topics,
        from_block,
        to_block):
    """ Query the blockchain for all events of the smart contract at
    `contract_address` that match the filters `topics`, `from_block`, and
    `to_block`.
    """
    # Note: Issue #452 (https://github.com/raiden-network/raiden/issues/452)
    # tracks a suggested TODO, which will reduce the 3 RPC calls here to only
    # one using `eth_getLogs`. It will require changes in all testing frameworks
    # to be implemented though.

    events = get_filter_events(
        chain.client,
        contract_address,
        topics=topics,
        from_block=from_block,
        to_block=to_block
    )

    result = []
    for event in events:
        decoded_event = dict(decode_event(abi, event['event_data']))
        if event.get('block_number'):
            decoded_event['block_number'] = event['block_number']
        result.append(decoded_event)
    return result
Пример #3
0
def get_contract_events(
        chain,
        translator,
        contract_address,
        topics,
        from_block,
        to_block):
    """ Query the blockchain for all events of the smart contract at
    `contract_address` that match the filters `topics`, `from_block`, and
    `to_block`.
    """
    # Note: Issue #452 (https://github.com/raiden-network/raiden/issues/452)
    # tracks a suggested TODO, which will reduce the 3 RPC calls here to only
    # one using `eth_getLogs`. It will require changes in all testing frameworks
    # to be implemented though.

    events = get_filter_events(
        chain.client,
        contract_address,
        topics=topics,
        from_block=from_block,
        to_block=to_block
    )

    result = []
    for event in events:
        decoded_event = translator.decode_event(event['topics'], event['data'])
        if event.get('block_number'):
            decoded_event['block_number'] = event['block_number']
        result.append(decoded_event)
    return result
Пример #4
0
def test_filter_end_block_inclusive(deploy_client, blockchain_backend):
    """ A filter includes events from the block given in from_block
    until and including end_block. """
    contract_proxy = deploy_rpc_test_contract(deploy_client)

    # call the create event function twice and wait for confirmation each time
    gas = contract_proxy.estimate_gas('createEvent', 1) * 2
    transaction_hex_1 = contract_proxy.transact('createEvent', 1, startgas=gas)
    deploy_client.poll(unhexlify(transaction_hex_1))
    transaction_hex_2 = contract_proxy.transact('createEvent', 2, startgas=gas)
    deploy_client.poll(unhexlify(transaction_hex_2))

    # create a new filter in the node
    new_filter(deploy_client, contract_proxy.contract_address, None)

    result_1 = get_filter_events(deploy_client,
                                 contract_proxy.contract_address, None)
    block_number_events = get_list_of_block_numbers(result_1)
    block_number_event_1 = block_number_events[0]
    block_number_event_2 = block_number_events[1]

    # inclusive to_block should return first event
    result_2 = get_filter_events(
        deploy_client,
        contract_proxy.contract_address,
        None,
        to_block=block_number_event_1,
    )
    assert get_list_of_block_numbers(result_2) == [block_number_event_1]

    # this should include the second event
    result_3 = get_filter_events(
        deploy_client,
        contract_proxy.contract_address,
        None,
        to_block=block_number_event_2,
    )
    assert get_list_of_block_numbers(result_3) == block_number_events
def test_filter_start_block_inclusive(deploy_client, blockchain_backend):
    """ A filter includes events from the block given in from_block """
    contract_proxy = deploy_rpc_test_contract(deploy_client)

    # call the create event function twice and wait for confirmation each time
    gas = contract_proxy.estimate_gas('createEvent') * 2
    transaction_hex_1 = contract_proxy.transact('createEvent', 1, startgas=gas)
    deploy_client.poll(unhexlify(transaction_hex_1))
    transaction_hex_2 = contract_proxy.transact('createEvent', 2, startgas=gas)
    deploy_client.poll(unhexlify(transaction_hex_2))

    # create a new filter in the node
    new_filter(deploy_client, contract_proxy.contract_address, None)

    result_1 = get_filter_events(deploy_client, contract_proxy.contract_address, None)
    block_number_events = get_list_of_block_numbers(result_1)
    block_number_event_1 = block_number_events[0]
    block_number_event_2 = block_number_events[1]

    # inclusive from_block should return both events
    result_2 = get_filter_events(
        deploy_client,
        contract_proxy.contract_address,
        None,
        from_block=block_number_event_1,
    )
    assert get_list_of_block_numbers(result_2) == block_number_events

    # a higher from_block must not contain the first event
    result_3 = get_filter_events(
        deploy_client,
        contract_proxy.contract_address,
        None,
        from_block=block_number_event_1 + 1,
    )
    assert get_list_of_block_numbers(result_3) == [block_number_event_2]