We’re happy to announce go-libp2p 0.14.0. This release introduces a few long awaited features, fixes a few bugs, and includes progress towards NAT hole punching.
Custom DNS Resolvers
You can now pass a custom DNS resolver through the MultiaddrResolver
option. This can be used to add support for DoH, custom TLDs (e.g., .eth
), etc.
TCP Simultaneous Open
Adds initial support for TCP Simultaneous Open. If two peers open a TCP connection to each other at the same time using the same set of ports, they’ll end up with a single TCP connection. Previously, go-libp2p would treat this as an error and disconnect. Now the connection succeeds. In the next libp2p release, this will be used to enable hole-punching for NAT traversal.
Improved Stream Multiplexer (Yamux) Performance
Yamux now uses variable sized receive windows to improve performance on high-latency, high-bandwidth connections.
Optimized Noise Read Throughput
The Noise security transport now buffers reads, reducing syscalls and significantly improving throughput.
Changelog
-
github.com/libp2p/go-libp2p:
- doc: add a basic release process (libp2p/go-libp2p#1080)
- fix: re-expose AutoNAT service on BasicHost (libp2p/go-libp2p#1088)
- test: deflake TestProtoDowngrade (libp2p/go-libp2p#1084)
- fix go vet (libp2p/go-libp2p#1075)
- option for custom dns resolver (libp2p/go-libp2p#1073)
- fix autonat race (libp2p/go-libp2p#1062)
- use transient connections in identify streams (libp2p/go-libp2p#1061)
- Emit event for User’s NAT Type i.e. Hard NAT or Easy NAT (#1042) (libp2p/go-libp2p#1042)
- Finish and Test the simultaneous connect problem in libp2p peers (#1041) (libp2p/go-libp2p#1041)
- Close peerstore and document Host Close (#1037) (libp2p/go-libp2p#1037)
- Timeout all Identify stream reads (#1032) (libp2p/go-libp2p#1032)
-
github.com/ipfs/go-datastore (v0.4.4 → v0.4.5):
- Add test to ensure that Delete returns no error for missing keys (ipfs/go-datastore#162)
- Fix typo in sync/sync.go (ipfs/go-datastore#159)
- Add the generated flatfs stub, since it cannot be auto-generated (ipfs/go-datastore#158)
- support flatfs fuzzing (ipfs/go-datastore#157)
- Add standard issue template
- fuzzing harness (#153) (ipfs/go-datastore#153)
- feat(mount): don’t give up on error (ipfs/go-datastore#146)
- /test: fix bad ElemCount/10 lenght (should not be divided) (ipfs/go-datastore#152)
-
github.com/ipfs/go-log/v2 (v2.1.1 → v2.1.3):
- feat: add ability to specify labels for all loggers (ipfs/go-log#105)
- Add an option to pass URL to zap (ipfs/go-log#101)
- enable configuring several log outputs (ipfs/go-log#98)
- Fix caller not being added (ipfs/go-log#96)
-
github.com/libp2p/go-conn-security-multistream (v0.2.0 → v0.2.1):
- update core version (#32) (libp2p/go-conn-security-multistream#32)
- Implement support for simultaneous open (#14) (libp2p/go-conn-security-multistream#14)
-
github.com/libp2p/go-libp2p-autonat (v0.4.0 → v0.4.2):
- Fix: Stream read timeout (libp2p/go-libp2p-autonat#99)
- fix: simplify address replacement (libp2p/go-libp2p-autonat#102)
- replace the port number for double NAT mapping (libp2p/go-libp2p-autonat#101)
-
github.com/libp2p/go-libp2p-core (v0.8.0 → v0.8.5):
- Event for user’s NAT Device Type: Tell user if the node is behind an Easy or Hard NAT (#173) (libp2p/go-libp2p-core#173)
- more docs for stream fncs (#183) (libp2p/go-libp2p-core#183)
- refactor: use a helper type to decode AddrInfo from JSON (#178) (libp2p/go-libp2p-core#178)
- fix stream docs (#182) (libp2p/go-libp2p-core#182)
- context to force direct dial (#181) (libp2p/go-libp2p-core#181)
- Secure Muxer Interface (#180) (libp2p/go-libp2p-core#180)
-
github.com/libp2p/go-libp2p-noise (v0.1.1 → v0.2.0):
- Update github.com/flynn/noise to address nonce handling security issues (libp2p/go-libp2p-noise#95)
- optimize: reduce syscalls using a buffered reader.
-
github.com/libp2p/go-libp2p-peerstore (v0.2.6 → v0.2.7):
- fix: delete addrs when “updating” them to zero (libp2p/go-libp2p-peerstore#157)
-
github.com/libp2p/go-libp2p-swarm (v0.4.0 → v0.5.0):
- run connection gating tests on both TCP and QUIC (libp2p/go-libp2p-swarm#258)
- fix: avoid returning typed nils (libp2p/go-libp2p-swarm#257)
- New Dialer (libp2p/go-libp2p-swarm#243)
- fix: use 64bit stream/conn IDs (libp2p/go-libp2p-swarm#247)
- feat: close transports that implement io.Closer (libp2p/go-libp2p-swarm#227)
- fix swarm transient conn (#241) (libp2p/go-libp2p-swarm#241)
- Support for Hole punching (#233) (libp2p/go-libp2p-swarm#233)
- Treat transient connections as opt-in when opening new streams (libp2p/go-libp2p-swarm#236)
- avoid assigning a function to a variable (libp2p/go-libp2p-swarm#239)
- only listen on localhost in tests (libp2p/go-libp2p-swarm#238)
- prevent dialing addresses that we’re listening on (libp2p/go-libp2p-swarm#237)
- Enable QUIC in Test Swarm (#235) (libp2p/go-libp2p-swarm#235)
-
github.com/libp2p/go-libp2p-transport-upgrader (v0.4.0 → v0.4.2):
- Expose underlying transport connection stat where available (libp2p/go-libp2p-transport-upgrader#71)
- Implement support for simultaneous open (#25) (libp2p/go-libp2p-transport-upgrader#25)
-
github.com/libp2p/go-libp2p-yamux (v0.5.1 → v0.5.3):
- chore: update yamux (libp2p/go-libp2p-yamux#34)
- chore: update yamux (libp2p/go-libp2p-yamux#33)
-
github.com/libp2p/go-netroute (v0.1.3 → v0.1.6):
- add js stub impl
-
github.com/libp2p/go-sockaddr (v0.0.2 → v0.1.1):
- fix: allocate “any” socket type then cast (libp2p/go-sockaddr#20)
- fix: remove CGO functions (libp2p/go-sockaddr#18)
-
github.com/libp2p/go-yamux/v2 (v2.0.0 → v2.1.1):
- fix: don’t change the receive window if we’re forcing an update (libp2p/go-yamux#56)
- increase the receive window size if we’re sending updates to frequently (libp2p/go-yamux#54)
- remove unused Stream.Shrink() method (libp2p/go-yamux#52)
- remove misleading comment about the MaxMessageSize (libp2p/go-yamux#50)
- clean up the receive window check (libp2p/go-yamux#49)
- don’t reslice byte slices taking from the buffer (libp2p/go-yamux#48)
- don’t reimplement io.ReadFull (libp2p/go-yamux#38)
- remove the recvLock in the stream (libp2p/go-yamux#42)
- remove the sendLock in the stream (libp2p/go-yamux#41)
- remove misleading statement about NAT traversal (libp2p/go-yamux#45)
- reduce usage of goto (libp2p/go-yamux#40)
- remove unused error return value in Stream.processFlags (libp2p/go-yamux#39)
-
github.com/multiformats/go-multiaddr-dns (v0.2.0 → v0.3.1):
- Normalize domains to fqdn for resolver selection (multiformats/go-multiaddr-dns#27)
- refactor Resolver to support custom per-TLD resolvers (multiformats/go-multiaddr-dns#26)
- feat: exposes backend (multiformats/go-multiaddr-dns#25)
- Bump github.com/multiformats/go-multiaddr from 0.1.1 to 0.2.0 (multiformats/go-multiaddr-dns#19)
-
github.com/multiformats/go-multistream (v0.2.0 → v0.2.2):
- change the simultaneous open protocol to /libp2p/simultaneous-connect (multiformats/go-multistream#66)
- remove the autorebase workflow (#63) (multiformats/go-multistream#63)
- fix the lazy stress read test on Windows (multiformats/go-multistream#61)
- Implement simultaneous open extension (multiformats/go-multistream#42)
- reduce the number of streams in the stress tests, fix error handling (multiformats/go-multistream#54)
Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
vyzo | 68 | +2240/-1089 | 106 |
Steven Allen | 42 | +1433/-1002 | 96 |
Marten Seemann | 45 | +861/-818 | 79 |
Aarsh Shah | 13 | +910/-147 | 38 |
Will | 1 | +848/-17 | 11 |
lanzafame | 7 | +208/-55 | 10 |
jstordeur | 1 | +252/-2 | 5 |
Cory Schwartz | 7 | +134/-81 | 31 |
aarshkshah1992 | 6 | +93/-109 | 8 |
huoju | 4 | +127/-41 | 6 |
Will Scott | 4 | +103/-20 | 11 |
Hector Sanjuan | 2 | +95/-0 | 3 |
Raúl Kripalani | 1 | +30/-25 | 4 |
requilence | 1 | +13/-0 | 1 |
Nick Cabatoff | 1 | +7/-2 | 1 |
Jakub Sztandera | 2 | +8/-1 | 2 |
Jonathan Rudenberg | 1 | +6/-2 | 3 |
Tom Worrall | 1 | +4/-2 | 1 |
Jorropo | 1 | +4/-2 | 1 |
Ju Huo | 1 | +2/-2 | 1 |
Nex | 1 | +1/-1 | 1 |