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)
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)
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
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 )
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
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