code: 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)
docs: Handles a ReceiveUnlock state change.