libp2p implementation in Go
A patch update to bring in a fix from go-multiaddr
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.33.1...v0.33.2
The release updates the quic-go dependency to v0.42.0. This update includes a mitigation for a memory exhaustion attack against QUIC's connection ID mechanism.
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.33.0...v0.33.1
For TCP Connections, the default encryption scheme has been changed from noise to TLS for better performance. See PR for details.
Note: When making TCP connections to nodes that only support noise this will add 1 extra round trip for connection establishment. If you wish to avoid this and keep noise the default, configure your node to prefer noise over TLS like
node, err := libp2p.New(
... other options
libp2p.Security("/noise", noise.New),
libp2p.Security("/tls/1.0.0", libp2ptls.New),
)
crypto.GenerateEKeyPair
. This was used in SECIO which has been long deprecated.Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.32.1...v0.33.0
This release contains the quic-go fix for the Honeybadger vulnerability: https://github.com/quic-go/quic-go/releases/tag/v0.39.4
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.32.1...v0.32.2
This release contains the quic-go fix for the Honeybadger vulnerability: https://github.com/quic-go/quic-go/releases/tag/v0.38.2
This release contains the quic-go fix for the Honeybadger vulnerability: https://github.com/quic-go/quic-go/releases/tag/v0.37.7
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.32.0...v0.32.1
This release adds support for WebRTC Direct. WebRTC Direct allows browser nodes to connect to go-libp2p directly, without any configuration (e.g. TLS certificates) needed on the go-libp2p side. This is useful for browser nodes that aren’t able to use Webtransport. Note that WebRTC Direct cannot be used to connect a browser node to a go-libp2p node behind a NAT / firewall. This requires using WebRTC, which is currently being worked on https://github.com/libp2p/go-libp2p/issues/2009.
In the last couple of releases we’ve shipped Smart Dialing and Black hole Detection. This release continues our effort to improve the dial prioritisation logic to avoid spurious dials with the introduction of Happy Eyeballs for TCP addresses. As recommended by RFC 8305, when dialing a peer’s TCP addresses, we now dial the IPv6 address first and only dial the peer’s IPv4 address if we have not established the IPv6 TCP connection within 250ms.
host.NewStream
now waits for a hole punched connection to be available rather than returning network.ErrTransientConn
immediately./
suffix when mounting handler by @sukunrt in https://github.com/libp2p/go-libp2p/pull/2552
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.31.0...v0.32.0
We're introducing a new experimental API in go-libp2p, enabling developers to utilize libp2p with the well-known semantics of HTTP. This isn't a special flavor of HTTP; it's standard HTTP, but enhanced with libp2p. Developers can now benefit from HTTP intermediaries such as CDN caching and layer 7 load balancing. This allows developers to create HTTP applications that operate over NATs and seamlessly tap into libp2p's diverse transport options to boost connectivity. In addition, the HTTP transport now joins the roster of supported transports in libp2p.
The new API is under libp2phttp.Host
in the "github.com/libp2p/go-libp2p/p2p/http" package. This is like the stream transport host (host.Host
in "github.com/libp2p/go-libp2p/core/host"), but exposes HTTP request/response rather than a stream API. Refer to the godoc for details on the API and examples.
This release updates quic-go to v0.38.x, which enables GSO (Generic Segmentation Offload) in the send path, drastically increasing the packet send rate. Without GSO, quic-go had to use a single sendmsg syscall for every UDP datagram sent. GSO allows us to pass one giant (up to 64k) datagram to the sendmsg syscall, and have the kernel chop it into MTU sized (~1300 bytes) datagrams before sending them out on the wire. For more details on syscall optimizations, CloudFlare published an excellent blog post about this a while ago. GSO is currently only available on Linux (and with kernels >4.18).
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.30.0...v0.31.0
This is the first release that is compatible with Go 1.21. It drops compatibility with (the now outdated) Go 1.19.
The database-backed peerstore, pstoreds
, is now deprecated. It will be removed in a future release of go-libp2p.
The main reason for a database-backed peerstore was that it easily allowed persisting peers across reboots of a go-libp2p node. However, this comes with the problem that entries for these peers will never be pruned. It also means significantly higher latencies compared to the in-memory peerstore. A better way of persisting (a subset of) peers for bootstrapping purposes is to regularly query the in-memory peerstore and to explicitly persist those entries.
See https://github.com/libp2p/go-libp2p/issues/2329 for more motivation and discussion.
The ecosystem is in the process of removing support for one of our stream multiplexers, mplex. The only supported stream multiplexer now is yamux. Kubo (a go-libp2p user) removed support for mplex recently. See https://github.com/libp2p/specs/issues/553 for more details.
Note that due to go-libp2p's modular design, it's still possible to use mplex (or any other custom multiplexer) using the libp2p.Muxer
configuration option.
QUIC draft-29 was a somewhat widely deployed draft version of QUIC before publication of RFC 9000. The multiaddr codepoint used /quic
(RFC 9000 QUIC uses /quic-v1
). go-libp2p has been using /quic-v1
for a long time (since v0.24.0), and is now dropping support for draft-29.
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Marco Munizaga | 5 | +405/-561 | 36 |
Marten Seemann | 12 | +302/-477 | 92 |
Sukun | 4 | +125/-52 | 6 |
Jorropo | 5 | +83/-28 | 13 |
Prem Chaitanya Prathi | 1 | +28/-1 | 2 |
GitHub | 2 | +6/-19 | 2 |
Prithvi Shahi | 1 | +10/-12 | 1 |
Christian Stewart | 1 | +7/-2 | 2 |
cce | 1 | +4/-4 | 3 |
downIoads | 1 | +2/-2 | 1 |
Full Changelog: https://github.com/libp2p/go-libp2p/compare/v0.29.0...v0.30.0