code: def wait_for_channel_in_states(
          raiden: 'RaidenService',
          payment_network_id: PaymentNetworkID,
          token_address: TokenAddress,
          channel_ids: List[ChannelID],
          retry_timeout: float,
          target_states: Sequence[str],
  ) -> None:
      
      chain_state = views.state_from_raiden(raiden)
      token_network = views.get_token_network_by_token_address(
          chain_state=chain_state,
          payment_network_id=payment_network_id,
          token_address=token_address,
      )
  
      if token_network is None:
          raise ValueError(
              f'The token {token_address} is not registered on the network {payment_network_id}.',
          )
  
      token_network_address = token_network.address
  
      list_cannonical_ids = [
          CanonicalIdentifier(
              chain_identifier=chain_state.chain_id,
              token_network_address=token_network_address,
              channel_identifier=channel_identifier,
          )
          for channel_identifier in channel_ids
      ]
  
      while list_cannonical_ids:
          canonical_id = list_cannonical_ids[-1]
          chain_state = views.state_from_raiden(raiden)
  
          channel_state = views.get_channelstate_by_canonical_identifier(
              chain_state=chain_state,
              canonical_identifier=canonical_id,
          )
  
          channel_is_settled = (
              channel_state is None or
              channel.get_status(channel_state) in target_states
          )
  
          if channel_is_settled:
              list_cannonical_ids.pop()
          else:
              gevent.sleep(retry_timeout)
docs: Wait until all channels are in `target_states`.
  
      Raises:
          ValueError: If the token_address is not registered in the
              payment_network.
  
      Note:
          This does not time out, use gevent.Timeout.