def handle_unlock(
        target_state: TargetTransferState,
        state_change: ReceiveUnlock,
        channel_state: NettingChannelState,
) -> TransitionResult[TargetTransferState]:
    """ Handles a ReceiveUnlock state change. """
    balance_proof_sender = state_change.balance_proof.sender

    is_valid, events, _ = channel.handle_unlock(
        channel_state,
        state_change,
    )
    next_target_state: Optional[TargetTransferState] = target_state

    if is_valid:
        transfer = target_state.transfer
        payment_received_success = EventPaymentReceivedSuccess(
            payment_network_identifier=channel_state.payment_network_identifier,
            token_network_identifier=TokenNetworkID(channel_state.token_network_identifier),
            identifier=transfer.payment_identifier,
            amount=TokenAmount(transfer.lock.amount),
            initiator=transfer.initiator,
        )

        unlock_success = EventUnlockClaimSuccess(
            transfer.payment_identifier,
            transfer.lock.secrethash,
        )

        send_processed = SendProcessed(
            recipient=balance_proof_sender,
            channel_identifier=CHANNEL_IDENTIFIER_GLOBAL_QUEUE,
            message_identifier=state_change.message_identifier,
        )

        events.extend([payment_received_success, unlock_success, send_processed])
        next_target_state = None

    return TransitionResult(next_target_state, events)
def handle_unlock ( target_state : TargetTransferState , state_change : ReceiveUnlock , channel_state : NettingChannelState , ) -> TransitionResult [ TargetTransferState ] : balance_proof_sender = state_change . balance_proof . sender is_valid , events , _ = channel . handle_unlock ( channel_state , state_change , ) next_target_state : Optional [ TargetTransferState ] = target_state if is_valid : transfer = target_state . transfer payment_received_success = EventPaymentReceivedSuccess ( payment_network_identifier = channel_state . payment_network_identifier , token_network_identifier = TokenNetworkID ( channel_state . token_network_identifier ) , identifier = transfer . payment_identifier , amount = TokenAmount ( transfer . lock . amount ) , initiator = transfer . initiator , ) unlock_success = EventUnlockClaimSuccess ( transfer . payment_identifier , transfer . lock . secrethash , ) send_processed = SendProcessed ( recipient = balance_proof_sender , channel_identifier = CHANNEL_IDENTIFIER_GLOBAL_QUEUE , message_identifier = state_change . message_identifier , ) events . extend ( [ payment_received_success , unlock_success , send_processed ] ) next_target_state = None return TransitionResult ( next_target_state , events )
Handles a ReceiveUnlock state change.