code: def query_blockchain_events(
          web3: Web3,
          contract_manager: ContractManager,
          contract_address: Address,
          contract_name: str,
          topics: List,
          from_block: BlockNumber,
          to_block: BlockNumber,
  ) -> List[Dict]:
      
      filter_params = {
          'fromBlock': from_block,
          'toBlock': to_block,
          'address': to_checksum_address(contract_address),
          'topics': topics,
      }
  
      events = web3.eth.getLogs(filter_params)
  
      contract_abi = contract_manager.get_contract_abi(contract_name)
      return [
          decode_event(
              abi=contract_abi,
              log_=raw_event,
          )
          for raw_event in events
      ]
docs: Returns events emmitted by a contract for a given event name, within a certain range.
  
      Args:
          web3: A Web3 instance
          contract_manager: A contract manager
          contract_address: The address of the contract to be filtered, can be `None`
          contract_name: The name of the contract
          topics: The topics to filter for
          from_block: The block to start search events
          to_block: The block to stop searching for events
  
      Returns:
          All matching events