예제 #1
0
def handle_action_transfer_direct(
    payment_network_identifier,
    token_network_state,
    state_change,
    pseudo_random_generator,
    block_number,
):
    receiver_address = state_change.receiver_address
    channel_states = views.filter_channels_by_status(
        token_network_state.partneraddresses_to_channels[receiver_address],
        [CHANNEL_STATE_UNUSABLE],
    )
    if channel_states:
        iteration = channel.state_transition(
            channel_states[-1],
            state_change,
            pseudo_random_generator,
            block_number,
        )
        events = iteration.events
    else:
        failure = EventPaymentSentFailed(
            payment_network_identifier,
            state_change.token_network_identifier,
            state_change.identifier,
            receiver_address,
            'Unknown partner channel',
        )
        events = [failure]

    return TransitionResult(token_network_state, events)
예제 #2
0
def test_filter_channels_by_status_empty_excludes():
    channel_states = factories.make_channel_set(number_of_channels=3).channels
    channel_states[1].close_transaction = channel_states[1].open_transaction
    channel_states[2].close_transaction = channel_states[2].open_transaction
    channel_states[2].settle_transaction = channel_states[2].open_transaction
    assert (filter_channels_by_status(channel_states=channel_states,
                                      exclude_states=None) == channel_states)
예제 #3
0
def _get_channels_close_events(
        chain_state: ChainState,
        token_network_state: TokenNetworkState,
) -> typing.List[Event]:
    events = []
    for channel_states in token_network_state.partneraddresses_to_channels.values():
        filtered_channel_states = views.filter_channels_by_status(
            channel_states,
            [channel.CHANNEL_STATE_UNUSABLE],
        )
        for channel_state in filtered_channel_states:
            events.extend(channel.events_for_close(
                channel_state,
                chain_state.block_number,
            ))
    return events
예제 #4
0
def test_filter_channels_by_status_empty_excludes():
    channel_states = factories.make_channel_set(number_of_channels=3).channels
    channel_states[1].close_transaction = TransactionExecutionStatus(
        started_block_number=channel_states[1].open_transaction.started_block_number,
        finished_block_number=channel_states[1].open_transaction.finished_block_number,
        result=TransactionExecutionStatus.SUCCESS,
    )
    channel_states[2].close_transaction = TransactionExecutionStatus(
        started_block_number=channel_states[2].open_transaction.started_block_number,
        finished_block_number=channel_states[2].open_transaction.finished_block_number,
        result=TransactionExecutionStatus.SUCCESS,
    )
    channel_states[2].settle_transaction = channel_states[2].close_transaction
    assert (
        filter_channels_by_status(channel_states=channel_states, exclude_states=None)
        == channel_states
    )
예제 #5
0
파일: node.py 프로젝트: gasparmedina/lumino
def _get_channels_close_events(
        chain_state: ChainState,
        token_network_state: TokenNetworkState) -> List[Event]:
    events = []
    for channel_identifiers in token_network_state.partneraddresses_to_channelidentifiers.values(
    ):
        channel_states = [
            token_network_state.channelidentifiers_to_channels[channel_id]
            for channel_id in channel_identifiers
        ]
        filtered_channel_states = views.filter_channels_by_status(
            channel_states, [channel.CHANNEL_STATE_UNUSABLE])
        for channel_state in filtered_channel_states:
            events.extend(
                channel.events_for_close(
                    channel_state=channel_state,
                    block_number=chain_state.block_number,
                    block_hash=chain_state.block_hash,
                ))
    return events
예제 #6
0
파일: node.py 프로젝트: hackaugusto/raiden
def _get_channels_close_events(
        chain_state: ChainState,
        token_network_state: TokenNetworkState,
) -> List[Event]:
    events = []
    for channel_identifiers in token_network_state.partneraddresses_to_channelidentifiers.values():
        channel_states = [
            token_network_state.channelidentifiers_to_channels[channel_id]
            for channel_id in channel_identifiers
        ]
        filtered_channel_states = views.filter_channels_by_status(
            channel_states,
            [channel.CHANNEL_STATE_UNUSABLE],
        )
        for channel_state in filtered_channel_states:
            events.extend(channel.events_for_close(
                channel_state,
                chain_state.block_number,
            ))
    return events