11import atexit
2+ from collections .abc import Sequence
23import inspect
34from collections import defaultdict
45from datetime import datetime , timedelta
@@ -377,6 +378,7 @@ def broker_task_decorator(
377378 self ,
378379 task_type : TaskType ,
379380 container : BlockContainer | ContractEvent | ContractEventWrapper | None = None ,
381+ from_addresses : Sequence [AddressType | str ] | None = None ,
380382 filter_args : dict [str , Any ] | None = None ,
381383 cron_schedule : str | None = None ,
382384 metric_name : str | None = None ,
@@ -393,6 +395,9 @@ def broker_task_decorator(
393395 Args:
394396 task_type: :class:`~silverback.types.TaskType`: The type of task to create.
395397 container: (BlockContainer | ContractEvent): The event source to watch.
398+ from_addresses: (Sequence[AddressType | str] | None):
399+ The set of addresses to filter an anonymous event by.
400+ Defaults to none (matches all), ignored if `container` is not anonymous event.
396401
397402 Returns:
398403 Callable[[Callable], :class:`~taskiq.AsyncTaskiqDecoratedTask`]:
@@ -456,6 +461,11 @@ def add_taskiq_task(
456461 ):
457462 labels ["address" ] = contract .address
458463
464+ elif from_addresses is not None :
465+ labels ["address" ] = "," .join (
466+ self .conversion_manager .convert (a , AddressType ) for a in from_addresses
467+ )
468+
459469 labels ["event" ] = container .abi .signature
460470
461471 topics : list [list [HexStr ] | HexStr | None ] = [
@@ -602,6 +612,7 @@ def do_something_on_shutdown(state):
602612 def on_ (
603613 self ,
604614 container : BlockContainer | ContractEvent ,
615+ from_addresses : Sequence [AddressType | str ] | None = None ,
605616 filter_args : dict [str , Any ] | None = None ,
606617 ** filter_kwargs : dict [str , Any ],
607618 ) -> Callable [[Callable ], AsyncTaskiqDecoratedTask ]:
@@ -610,6 +621,9 @@ def on_(
610621
611622 Args:
612623 container: (BlockContainer | ContractEvent): The event source to watch.
624+ from_addresses: (Sequence[AddressType | str] | None):
625+ The set of addresses to filter an anonymous event by.
626+ Defaults to none (matches all), ignored if `container` is not anonymous event.
613627 filter_args: (dict[str, Any] | None):
614628 Arguments to use for event log filter. Gets combined with ``filter_kwargs``.
615629 Is useful for when an event argument name is a Python keyword.
@@ -634,6 +648,7 @@ def on_(
634648 return self .broker_task_decorator (
635649 TaskType .EVENT_LOG ,
636650 container = container ,
651+ from_addresses = from_addresses ,
637652 filter_args = filter_kwargs ,
638653 )
639654
0 commit comments