conn.go
func (c *Conn) RemoteMultiaddr() ma.Multiaddr {
	proto := ma.ProtocolWithCode(ma.P_P2P).Name
	peerid := c.Conn().RemotePeer().Pretty()
	p2paddr := ma.StringCast(fmt.Sprintf("/%s/%s", proto, peerid))

	circaddr := ma.Cast(ma.CodeToVarint(P_CIRCUIT))
	return p2paddr.Encapsulate(circaddr)
}
func (c *Conn) RemoteMultiaddr() ma.Multiaddr {
	proto := ma.ProtocolWithCode(ma.P_P2P).Name
	peerid := c.Conn().RemotePeer().Pretty()
	p2paddr := ma.StringCast(fmt.Sprintf("/%s/%s", proto, peerid))

	circaddr := ma.Cast(ma.CodeToVarint(P_CIRCUIT))
	return p2paddr.Encapsulate(circaddr)
}
// TODO: is it okay to cast c.Conn().RemotePeer() into a multiaddr? might be "user input"