Example #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]
Example #2
0
    def channelnew_filter(self,
                          from_block: Union[str, int] = 0,
                          to_block: Union[str, int] = 'latest') -> Filter:
        """ Install a new filter for ChannelNew events.

        Args:
            start_block:Create filter starting from this block number (default: 0).
            end_block: Create filter stopping at this block number (default: 'latest').

        Return:
            The filter instance.
        """
        topics = [CONTRACT_MANAGER.get_event_id(EVENT_CHANNEL_NEW)]

        channel_manager_address_bin = self.proxy.contract_address
        filter_id_raw = new_filter(self.client,
                                   channel_manager_address_bin,
                                   topics,
                                   from_block=from_block,
                                   to_block=to_block)

        return Filter(
            self.client,
            filter_id_raw,
        )
Example #3
0
    def events_filter(
            self,
            topics: Optional[List],
            from_block: Optional[int] = None,
            to_block: Optional[int] = None) -> Filter:
        """ Install a new filter for an array of topics emitted by the netting contract.
        Args:
            topics: A list of event ids to filter for. Can also be None,
                    in which case all events are queried.
            from_block: The block number at which to start looking for events.
            to_block: The block number at which to stop looking for events.
        Return:
            Filter: The filter instance.
        """
        netting_channel_address_bin = self.proxy.contract_address
        filter_id_raw = new_filter(
            self.client,
            netting_channel_address_bin,
            topics=topics,
            from_block=from_block,
            to_block=to_block
        )

        return Filter(
            self.client,
            filter_id_raw,
        )
Example #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]
Example #6
0
    def tokenadded_filter(self, from_block=None, to_block=None):
        topics = [CONTRACT_MANAGER.get_event_id(EVENT_TOKEN_ADDED)]

        registry_address_bin = self.proxy.address
        filter_id_raw = new_filter(
            self.client,
            registry_address_bin,
            topics,
            from_block=from_block,
            to_block=to_block,
        )

        return Filter(
            self.client,
            filter_id_raw,
        )
    def tokenadded_filter(self, from_block=None, to_block=None):
        topics = [CONTRACT_MANAGER.get_event_id(EVENT_TOKEN_ADDED)]

        registry_address_bin = self.proxy.contract_address
        filter_id_raw = new_filter(
            self.client,
            registry_address_bin,
            topics,
            from_block=from_block,
            to_block=to_block,
        )

        return Filter(
            self.client,
            filter_id_raw,
        )
Example #8
0
    def channelnew_filter(self, from_block=None, to_block=None):
        """ Install a new filter for ChannelNew events.

        Return:
            Filter: The filter instance.
        """
        topics = [CONTRACT_MANAGER.get_event_id(EVENT_CHANNEL_NEW)]

        channel_manager_address_bin = self.proxy.address
        filter_id_raw = new_filter(self.client,
                                   channel_manager_address_bin,
                                   topics,
                                   from_block=from_block,
                                   to_block=to_block)

        return Filter(
            self.client,
            filter_id_raw,
        )
Example #9
0
    def events_filter(self, topics, from_block=None, to_block=None):
        """ Install a new filter for an array of topics emitted by the netting contract.
        Args:
            topics (list): A list of event ids to filter for. Can also be None,
                           in which case all events are queried.

        Return:
            Filter: The filter instance.
        """
        netting_channel_address_bin = self.proxy.address
        filter_id_raw = new_filter(self.client,
                                   netting_channel_address_bin,
                                   topics=topics,
                                   from_block=from_block,
                                   to_block=to_block)

        return Filter(
            self.client,
            filter_id_raw,
        )