Description
Transports and protocols in libp2p currently have different implementations for tokio and async-std runtimes (see libp2p/rust-libp2p#2962). Due to historical reasons, transports and protocols used in substrate rely on async-std primitives, which can cause issues under tokio runtime like this one: libp2p/rust-libp2p#2748. They should be upgraded to use tokio implementations.
This requires changing primitives used (i.e., replacing TcpTransport with TokioTcpTransport) and upgrading tokio version to the one compatible with libp2p.
This is a follow-up issue to #12256.
Checklist