go-libp2p-udx-transport
A go-libp2p transport implementation using UDX — a QUIC-inspired reliable UDP protocol with built-in stream multiplexing.
Overview
Section titled “Overview”This package implements the go-libp2p Transport interface, allowing libp2p hosts to communicate over UDX. Like the QUIC transport, UDX has native stream multiplexing so this transport provides CapableConn directly without needing an Upgrader or separate muxer.
Multiaddr Format
Section titled “Multiaddr Format”/ip4/<addr>/udp/<port>/udx/ip6/<addr>/udp/<port>/udxProtocol code: 0x0300
Installation
Section titled “Installation”go get github.com/stephanfeb/go-libp2p-udx-transportpackage main
import ( "context" "fmt"
ic "github.com/libp2p/go-libp2p/core/crypto" "github.com/libp2p/go-libp2p/core/peer" ma "github.com/multiformats/go-multiaddr" udxtransport "github.com/stephanfeb/go-libp2p-udx-transport")
func main() { // Generate identity priv, _, _ := ic.GenerateEd25519Key(nil)
// Create transport tr, _ := udxtransport.NewTransport(priv, nil)
// Listen addr, _ := ma.NewMultiaddr("/ip4/0.0.0.0/udp/9000/udx") ln, _ := tr.Listen(addr) defer ln.Close()
fmt.Println("Listening on", ln.Multiaddr())
// Accept connections conn, _ := ln.Accept() stream, _ := conn.AcceptStream()
buf := make([]byte, 1024) n, _ := stream.Read(buf) fmt.Printf("received: %s\n", buf[:n])}Architecture
Section titled “Architecture”transport.go Transport — Dial, Listen, CanDial, Protocols, Proxyconn.go CapableConn wrapping udx.Connectionstream.go MuxedStream wrapping udx.Streamlistener.go Listener wrapping udx.Multiplexermultiaddr.go /udx protocol registration (0x0300), multiaddr helpersInterface Mapping
Section titled “Interface Mapping”| libp2p Interface | UDX Implementation |
|---|---|
transport.Transport |
Transport — manages identity and resource manager |
transport.CapableConn |
conn — wraps udx.Connection |
transport.Listener |
listener — wraps udx.Multiplexer |
network.MuxedStream |
stream — wraps udx.Stream |
Testing
Section titled “Testing”go test -race ./...Tests cover:
CanDial— multiaddr filtering (/udxvs/tcp)Protocols— protocol code advertisementProxy— non-proxy declarationListenAndDial— full loopback: listen, dial, open stream, bidirectional echoMultiaddr— round-trip multiaddr construction and parsing
Dependencies
Section titled “Dependencies”- go-udx — UDX protocol implementation
- go-libp2p/core — libp2p interfaces
- go-multiaddr — multiaddr encoding
License
Section titled “License”MIT