Description
🗺 What's left for release
- feat: Add WithFxOption #2956
- libp2phttp: HTTP Peer ID Authentication #2854
- fix: circuitv2: sanitize address inputs: check address peer id when returning a reservation message #3006
- feat: core/transport: Add SkipResolver interface #2989
- fix: swarm: refactor address resolution #2990
- autonat: fix interaction with autorelay #2967
- holepuncher: pass address function in constructor #2979
- peerstore: limit number of non connected peers in addrbook #2971
- swarm: add a peer dial latency metric #2959
Possibly deferred
- Issue build android version #2997
- feat(tcpreuse): add options for sharing TCP listeners amongst TCP, WS and WSS transports #2984
- feat: Detect and recover from TCP Simultaneous open #2950
- Connection multiaddress should match the address actually dialed (WSS, WebTransport, WebRTC) #2988
- race: simulatenous
NewStream
blocks on one side despite successful connection #2589
Deferred
Breaking Changes
- The
libp2p.MultiaddrResolver
option now takes an interface rather than a
specific pointer. This decouples the resolver from a specific implementation
and also defines a better interface that is aware of bounds.- The swarm exports a new type
ResolverFromMaDNS
that implements this interface from a*madns.Resolver
. The one line diff is essentially:
-libp2p.MultiaddrResolver(rslv) +libp2p.MultiaddrResolver(swarm.ResolverFromMaDNS{Resolver: rslv})
- The swarm exports a new type
🔦 Highlights
HTTP Peer ID Authentication (#2854)
Authenticate a peer's identity over HTTP. This works on both libp2p stream backed HTTP transports and standard HTTP transports. There is also browser support in the js-libp2p module: https://github.com/libp2p/js-libp2p-http-fetch/tree/main.
See the spec for more details on how it works: https://github.com/libp2p/specs/blob/master/http/peer-id-auth.md
Experimental WithFxOption (#2956)
A new libp2p Config option lets you add custom Fx options to the libp2p constructor. Use this to get access to and provide libp2p services.
For example, this allows you to easily get a reference to the ID Service of a libp2p Node. Refer to this test for a concrete code example:
Lines 50 to 60 in c4c3a34
In the future we'd like to expose the Fx options libp2p uses to construct itself so that users can better customize their libp2p nodes and integrate it seamlessly into their applications.
Changelog
From v0.36.5 to v0.37.0
- feat: Add WithFxOption (feat: Add WithFxOption #2956)
- Make BlackHoleState type public (metrics: BlackHoleState type public #2917)
- connmgr: reduce log level for untagging untracked peers
- feat(websocket): switch the underlying http server logger to use ipfs/go-log (feat(websocket): switch the underlying http server logger to use ipfs/go-log #2985)
- fix(websocket): re-enable websocket transport test (fix(websocket): re-enable websocket transport test #2987)
- relay: make only 1 reservation per peer (relay: make only 1 reservation per peer #2974)
- libp2phttp: HTTP Peer ID Authentication (libp2phttp: HTTP Peer ID Authentication #2854)
- chore: update quic-go to v0.48.1
- Add backoff for updating local IP addresses on error (fix: basichost: Add backoff for updating local IP addresses on error #2999) Reporting credit to @elecbug
- fix: swarm: refactor address resolution (fix: swarm: refactor address resolution #2990)
- peerstore: limit number of non connected peers in addrbook (peerstore: limit number of non connected peers in addrbook #2971)
- swarm: add a peer dial latency metric (swarm: add a peer dial latency metric #2959)
- autonat: fix interaction with autorelay (autonat: fix interaction with autorelay #2967)
Full Changelog: v0.36.5...v0.37.0
New Contributors
- @joshklop made their first contribution in Fix proto import paths #2920
- @cpeliciari made their first contribution in metrics: BlackHoleState type public #2917
- @bytetigers made their first contribution in bug: fix slice append value #2938
- @2color made their first contribution in fix: enable dctur when interface address is public #2931
✅ Release Checklist
- Stage 0 - Finishing Touches
- Go through relevant libp2p repos looking for unreleased changes that should make it into the release. If you find any, cut releases.
- Run
go get -u ./...
to see if there are any out-of-date deps that look important. If there are, bubble them. Try to avoid directly updating indirect deps in go-libp2p'sgo.mod
when possible.
- Stage 1 - Release
- Publish the release through the GitHub UI, adding the release notes. Some users rely on this to receive notifications of new releases.
- Announce the release on the discuss.libp2p.io.
- Stage 2 - Update Upstream
- Update the examples to the final release
- Update the upstream dependencies to the final release and create PRs.
- Add new release to interop tester in test-plans
- Make required changes to the release process.