def get_channel_events(self, channel_address, event_id, from_block, to_block=''): # Note: Issue #452 (https://github.com/raiden-network/raiden/issues/452) # tracks a suggested TODO, which will reduce the 3 RPC calls here to only # one using `eth_getLogs`. It will require changes in all testing frameworks # to be implemented though. translator = ContractTranslator(NETTING_CHANNEL_ABI) channel = self.raiden.api.get_channel(channel_address) filter_ = None try: filter_ = channel.external_state.netting_channel.events_filter( [event_id], from_block, to_block, ) events = filter_.getall() finally: if filter_ is not None: filter_.uninstall() return [ translator.decode_event(event['topics'], event['data']) for event in events ]
def all_contract_events(rpc, contract_address, abi, start_block=None, end_block=None): """Find and decode all events for a deployed contract given its `contract_address` and `abi`. Args: rpc (pyethapp.rpc_client.JSONRPCClient): client instance. contract_address (string): hex encoded contract address. abi (list(dict)): the contract's ABI. start_block (int): read event-logs starting from this block number. end_block (int): read event-logs up to this block number. Returns: events (list) """ translator = ContractTranslator(abi) events_raw = all_contract_events_raw( rpc, contract_address, start_block=start_block, end_block=end_block, ) events = [ translator.decode_event(map(decode_topic, event['topics']), event['data']) for event in events_raw ] return events
def all_contract_events(rpc, contract_address, abi, start_block=None, end_block=None): """Find and decode all events for a deployed contract given its `contract_address` and `abi`. Args: rpc (pyethapp.rpc_client.JSONRPCClient): client instance. contract_address (string): hex encoded contract address. abi (list(dict)): the contract's ABI. start_block (int): read event-logs starting from this block number. end_block (int): read event-logs up to this block number. Returns: events (list) """ translator = ContractTranslator(abi) events_raw = all_contract_events_raw( rpc, contract_address, start_block=start_block, end_block=end_block, ) events = list() for event_encoded in events_raw: topics_ids = [ decode_topic(topic) for topic in event_encoded['topics'] ] event_data = data_decoder(event_encoded['data']) event = translator.decode_event(topics_ids, event_data) events.append(event) return events
def all_contract_events(rpc: JSONRPCClient, contract_address: str, abi, start_block: Union[str, int] = 0, end_block: Union[str, int] = 'latest') -> List[Dict]: """Find and decode all events for a deployed contract given its `contract_address` and `abi`. Args: rpc: client instance. contract_address: hex encoded contract address. abi: the contract's ABI. start_block: read event-logs starting from this block number (default: 0). end_block: read event-logs up to this block number (default: 'latest'). Returns: A list of all events from the given contract. """ translator = ContractTranslator(abi) events_raw = all_contract_events_raw(rpc, contract_address, start_block=start_block, end_block=end_block) events = list() for event_encoded in events_raw: topics_ids = [ topic_decoder(topic) for topic in event_encoded['topics'] ] event_data = data_decoder(event_encoded['data']) event = translator.decode_event(topics_ids, event_data) events.append(event) return events
def all_contract_events(rpc, contract_address, abi, start_block=None, end_block=None): """Find and decode all events for a deployed contract given its `contract_address` and `abi`. Args: rpc (raiden.network.rpc.client.JSONRPCClient): client instance. contract_address (string): hex encoded contract address. abi (list(dict)): the contract's ABI. start_block (int): read event-logs starting from this block number. end_block (int): read event-logs up to this block number. Returns: events (list) """ translator = ContractTranslator(abi) events_raw = all_contract_events_raw( rpc, contract_address, start_block=start_block, end_block=end_block, ) events = list() for event_encoded in events_raw: topics_ids = [decode_topic(topic) for topic in event_encoded['topics']] event_data = data_decoder(event_encoded['data']) event = translator.decode_event(topics_ids, event_data) events.append(event) return events
def get_token_network_events(self, token_address, from_block, to_block=''): # Note: Issue #452 (https://github.com/raiden-network/raiden/issues/452) # tracks a suggested TODO, which will reduce the 3 RPC calls here to only # one using `eth_getLogs`. It will require changes in all testing frameworks # to be implemented though. translator = ContractTranslator(CHANNEL_MANAGER_ABI) token_address_bin = address_decoder(token_address) channel_manager = self.raiden.chain.manager_by_token(token_address_bin) filter_ = None try: filter_ = channel_manager.channelnew_filter(from_block, to_block) events = filter_.getall() finally: if filter_ is not None: filter_.uninstall() return [ translator.decode_event(event['topics'], event['data']) for event in events ]
def get_network_events(self, from_block, to_block=''): # Note: Issue #452 (https://github.com/raiden-network/raiden/issues/452) # tracks a suggested TODO, which will reduce the 3 RPC calls here to only # one using `eth_getLogs`. It will require changes in all testing frameworks # to be implemented though. # Assuming only one token registry for the moment translator = ContractTranslator(REGISTRY_ABI) filter_ = None try: filter_ = self.raiden.registries[0].tokenadded_filter( from_block, to_block) events = filter_.getall() finally: if filter_ is not None: filter_.uninstall() return [ translator.decode_event(event['topics'], event['data']) for event in events ]
def all_contract_events( rpc: JSONRPCClient, contract_address: str, abi, start_block: Union[str, int] = 0, end_block: Union[str, int] = 'latest') -> List[Dict]: """Find and decode all events for a deployed contract given its `contract_address` and `abi`. Args: rpc: client instance. contract_address: hex encoded contract address. abi: the contract's ABI. start_block: read event-logs starting from this block number (default: 0). end_block: read event-logs up to this block number (default: 'latest'). Returns: A list of all events from the given contract. """ translator = ContractTranslator(abi) events_raw = all_contract_events_raw( rpc, contract_address, start_block=start_block, end_block=end_block ) events = list() for event_encoded in events_raw: topics_ids = [ topic_decoder(topic) for topic in event_encoded['topics'] ] event_data = data_decoder(event_encoded['data']) event = translator.decode_event(topics_ids, event_data) events.append(event) return events
def test_event(): event_abi = [{ 'name': 'Test', 'anonymous': False, 'inputs': [ { 'indexed': False, 'name': 'a', 'type': 'int256' }, { 'indexed': False, 'name': 'b', 'type': 'int256' }, ], 'type': 'event', }] contract_abi = ContractTranslator(event_abi) normalized_name = normalize_name('Test') encode_types = ['int256', 'int256'] id_ = event_id(normalized_name, encode_types) topics = [id_] data = encode_abi(encode_types, [1, 2]) result = contract_abi.decode_event(topics, data) assert result['_event_type'] == b'Test' assert result['a'] == 1 assert result['b'] == 2
def event_decoder(event: Log, contract_translator: ContractTranslator): return contract_translator.decode_event(event.topics, event.data)