Source code for eth_defi.event_reader.filter

"""In-house filter implementation.

Wrap low-level JSON-RPC filters with more manageable Python code.
"""

from dataclasses import dataclass
from typing import Dict, Optional, List, Type

from eth_bloom import BloomFilter
from web3.contract.contract import ContractEvent


[docs]@dataclass class Filter: """Internal filter used to match events. A helper class to deal with `eth_getLogs` JSON API. This can be used with - Historical events: :py:mod:`eth_defi.event_reader.reader` - Live events: :py:mod:`eth_defi.event_reader.websocket` """ #: Preconstructed topic hash -> Event mapping topics: Dict[str, ContractEvent] #: Bloom filter to match block headers #: TODO: Currently unsupported bloom: Optional[BloomFilter] #: Get events from a single contract only. #: #: For multiple contracts give a list of addresses. contract_address: Optional[str | List[str]] = None @staticmethod def create_filter(address: Optional[str | List[str]], event_types: List[Type[ContractEvent]]) -> "Filter": topics = {event_type.build_filter().topics[0]: event_type for event_type in event_types} filter = Filter( contract_address=address, bloom=None, topics=topics, ) return filter