text: from abc import ABC, abstractmethod
  
  from multiaddr import Multiaddr
  
  from libp2p.network.connection.raw_connection_interface import IRawConnection
  
  from .listener_interface import IListener
  from .typing import THandler
  
  
  class ITransport(ABC):
      @abstractmethod
      async def dial(self, maddr: Multiaddr) -> IRawConnection:
          """
          dial a transport to peer listening on multiaddr.
  
          :param multiaddr: multiaddr of peer
          :param self_id: peer_id of the dialer (to send to receiver)
          :return: list of multiaddrs
          """
  
      @abstractmethod
      def create_listener(self, handler_function: THandler) -> IListener:
          """
          create listener on transport.
  
          :param handler_function: a function called when a new conntion is received
              that takes a connection as argument which implements interface-connection
          :return: a listener object that implements listener_interface.py
          """
  