def _process_new_blocks(self, latest_confirmed_block: BlockNumber) -> None: start = time.monotonic() db_block = self.database.get_latest_committed_block() assert db_block == self.blockchain_state.latest_committed_block, ( f"Unexpected `latest_committed_block` in db: " f"was {db_block}, expected {self.blockchain_state.latest_committed_block}. " f"Is the db accidentally shared by two PFSes?") events = get_blockchain_events_adaptive( web3=self.web3, blockchain_state=self.blockchain_state, token_network_addresses=list(self.token_networks.keys()), latest_confirmed_block=latest_confirmed_block, ) if events is None: return before_process = time.monotonic() for event in events: self.handle_event(event) gevent.idle() # Allow answering requests in between events if events: log.info( "Processed events", getting=round(before_process - start, 2), processing=round(time.monotonic() - before_process, 2), total_duration=round(time.monotonic() - start, 2), event_counts=collections.Counter(e.__class__.__name__ for e in events), )
def _process_new_blocks(self, latest_confirmed_block: BlockNumber) -> None: token_network_addresses = self.context.database.get_token_network_addresses( ) events = get_blockchain_events_adaptive( web3=self.web3, blockchain_state=self.context.ms_state.blockchain_state, token_network_addresses=token_network_addresses, latest_confirmed_block=latest_confirmed_block, ) if events is None: return for event in events: handle_event(event, self.context)
def test_get_blockchain_events_adaptive_reduces_block_interval_after_timeout( web3: Web3, token_network_registry_contract: Contract): chain_state = BlockchainState( chain_id=ChainID(1), token_network_registry_address=to_canonical_address( token_network_registry_contract.address), latest_committed_block=BlockNumber(4), ) assert chain_state.current_event_filter_interval == DEFAULT_FILTER_INTERVAL with patch("raiden_libs.blockchain.get_blockchain_events", side_effect=ReadTimeout): _ = get_blockchain_events_adaptive( web3=web3, token_network_addresses=[], blockchain_state=chain_state, latest_confirmed_block=BlockNumber(1), ) assert chain_state.current_event_filter_interval == DEFAULT_FILTER_INTERVAL // 5