Пример #1
0
 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
     ]
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
 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
     ]
Пример #7
0
    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
        ]
Пример #8
0
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
Пример #9
0
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
Пример #10
0
def event_decoder(event: Log, contract_translator: ContractTranslator):
    return contract_translator.decode_event(event.topics, event.data)
Пример #11
0
def event_decoder(event: Log, contract_translator: ContractTranslator):
    return contract_translator.decode_event(event.topics, event.data)