Source code for microraiden.utils.populus_compat

from web3.utils.filters import construct_event_filter_params
import functools
from web3.utils.events import get_event_data


[docs]class LogFilter: def __init__( self, web3, abi, address, event_name, from_block=0, to_block='latest', filters=None, callback=None ): self.web3 = web3 self.event_name = event_name # Callback for every registered log self.callback = callback filter_kwargs = { 'fromBlock': from_block, 'toBlock': to_block, 'address': address } event_abi = [i for i in abi if i['type'] == 'event' and i['name'] == event_name] if len(event_abi) == 0: return None self.event_abi = event_abi[0] assert self.event_abi filters = filters if filters else {} data_filter_set, filter_params = construct_event_filter_params( self.event_abi, argument_filters=filters, **filter_kwargs ) log_data_extract_fn = functools.partial(get_event_data, event_abi) self.filter = web3.eth.filter(filter_params) self.filter.set_data_filters(data_filter_set) self.filter.log_entry_formatter = log_data_extract_fn self.filter.filter_params = filter_params
[docs] def init(self, post_callback=None): for log in self.get_logs(): log['event'] = self.event_name self.callback(log) if post_callback: post_callback()
[docs] def get_logs(self): logs = self.web3.eth.getFilterLogs(self.filter.filter_id) formatted_logs = [] for log in [dict(log) for log in logs]: formatted_logs.append(self.set_log_data(log)) return formatted_logs
[docs] def set_log_data(self, log): log['args'] = get_event_data(self.event_abi, log)['args'] log['event'] = self.event_name return log
[docs] def uninstall(self): assert self.web3 is not None assert self.filter is not None self.web3.eth.uninstallFilter(self.filter.filter_id) self.filter = None