Subscription Filtering
This library has extensive filtering options available to you so you can have fine-grained control over which transactions you are interested in.
There is a core type that is used to specify the filters TransactionFilter:
import algokit_subscriber as sub
subscriber = sub.AlgorandSubscriber( config=sub.AlgorandSubscriberConfig( filters=[sub.SubscriberConfigFilter(name="filterName", filter=sub.TransactionFilter(...))], ... ), ...)# or:sub.get_subscribed_transactions( subscription=sub.TransactionSubscriptionParams( filters=[sub.NamedTransactionFilter(name="filterName", filter=sub.TransactionFilter(...))], ... ), ...)Currently this allows you to filter based on any combination (AND logic) of:
-
Transaction type e.g.
sub.TransactionFilter(type="axfer")orsub.TransactionFilter(type=["axfer", "pay"]) -
Account (sender and receiver) e.g.
sub.TransactionFilter(sender="ABCDE..F")orsub.TransactionFilter(sender=["ABCDE..F", "ZYXWV..A"])andsub.TransactionFilter(receiver="12345..6")orsub.TransactionFilter(receiver=["12345..6", "67890..A"]) -
Note prefix e.g.
sub.TransactionFilter(note_prefix="xyz") -
Apps
- ID e.g.
sub.TransactionFilter(app_id=54321)orsub.TransactionFilter(app_id=[54321, 12345]) - Creation e.g.
sub.TransactionFilter(app_create=True) - Call on-complete(s) e.g.
sub.TransactionFilter(app_on_complete="optin")orsub.TransactionFilter(app_on_complete=["optin", "noop"]) - ARC4 method signature(s) e.g.
sub.TransactionFilter(method_signature="MyMethod(uint64,string)")orsub.TransactionFilter(method_signature=["MyMethod(uint64,string)", "OtherMethod(byte[])"]) - Call arguments e.g.
sub.TransactionFilter(app_call_arguments_match=lambda app_call_arguments:app_call_arguments is not Noneand len(app_call_arguments) > 1and app_call_arguments[1].decode("utf-8") == "hello_world")
- Emitted ARC-28 event(s) e.g.
Note: For this to work you need to specify ARC-28 events in the subscription config.sub.TransactionFilter(arc28_events=[sub.Arc28EventFilter(group_name="group1", event_name="MyEvent")])
- ID e.g.
-
Assets
- ID e.g.
sub.TransactionFilter(asset_id=123456)orsub.TransactionFilter(asset_id=[123456, 456789]) - Creation e.g.
sub.TransactionFilter(asset_create=True) - Amount transferred (min and/or max) e.g.
sub.TransactionFilter(type="axfer", min_amount=1, max_amount=100) - Balance changes (asset ID, address, role including Sender/Receiver/CloseTo/AssetCreator/AssetDestroyer, min and/or max amount, min and/or max absolute amount) e.g.
sub.TransactionFilter(balance_changes=[sub.BalanceChangeFilter(asset_id=[15345, 36234], role=[sub.BalanceChangeRole.Sender], address="ABC...", min_amount=1, max_amount=2)])
- ID e.g.
-
Algo transfers (pay transactions)
- Amount transferred (min and/or max) e.g.
sub.TransactionFilter(type="pay", min_amount=1, max_amount=100) - Balance changes (address, role including Sender/Receiver/CloseTo, min and/or max amount, min and/or max absolute amount) e.g.
sub.TransactionFilter(balance_changes=[sub.BalanceChangeFilter(asset_id=[0], role=[sub.BalanceChangeRole.Sender], address="ABC...", min_absolute_amount=1, max_absolute_amount=100)])
- Amount transferred (min and/or max) e.g.
-
Custom filter e.g.
sub.TransactionFilter(custom_filter=lambda txn: txn.id_ is not None and txn.id_.startswith("ABC"))
You can supply multiple, named filters via the NamedTransactionFilter type. When subscribed transactions are returned each transaction will have a filters_matched property that will have a list of any filter(s) that caused that transaction to be returned. When using AlgorandSubscriber, you can subscribe to events that are emitted with the filter name.