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]
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, )
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, )
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]
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, )
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, )
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, )