feat(p2p/discover): implement v5.1 wire protocol #21647#2450
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR upgrades the Discovery v5 implementation to the v5.1 wire format by introducing a new p2p/discover/v5wire codec package, wiring UDPv5 to use it, and adding an interactive protocol test suite to devp2p.
Changes:
- Add
p2p/discover/v5wire(codec, crypto, session cache, message types) plus v5.1 test vectors and unit tests. - Refactor
p2p/discover/UDPv5and its tests to usev5wire.Packetand the new handshake/nonce mapping. - Add
devp2p discv5 testplus an embedded test runner (internal/utesting) and the discv5 interactive test suite.
Reviewed changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| p2p/netutil/error.go | Add timeout detection helper for network ops. |
| p2p/discover/v5wire/testdata/v5.1-whoareyou.txt | Add v5.1 WHOAREYOU test vector. |
| p2p/discover/v5wire/testdata/v5.1-ping-message.txt | Add v5.1 encrypted PING test vector. |
| p2p/discover/v5wire/testdata/v5.1-ping-handshake.txt | Add v5.1 handshake PING test vector (no ENR). |
| p2p/discover/v5wire/testdata/v5.1-ping-handshake-enr.txt | Add v5.1 handshake PING test vector (with ENR). |
| p2p/discover/v5wire/session.go | Introduce v5.1 session cache + nonce generation hooks for tests. |
| p2p/discover/v5wire/msg.go | Define v5.1 packet/message types and decoding. |
| p2p/discover/v5wire/encoding.go | Implement v5.1 packet encoding/decoding + handshake logic. |
| p2p/discover/v5wire/encoding_test.go | Add codec handshake tests, vectors, and benchmarks. |
| p2p/discover/v5wire/crypto.go | Add v5.1 crypto helpers (ECDH/HKDF/GCM, signatures). |
| p2p/discover/v5wire/crypto_test.go | Add crypto test vectors and key derivation tests. |
| p2p/discover/v5_udp.go | Refactor UDPv5 transport to use v5wire.Codec and v5.1 message set; add TALKREQ support. |
| p2p/discover/v5_udp_test.go | Update UDPv5 tests for v5.1 message set; add talk tests and stronger E2E lookup assertions. |
| p2p/discover/v5_encoding.go | Remove legacy v5 wire codec (replaced by v5wire). |
| p2p/discover/v5_encoding_test.go | Remove legacy v5 codec tests (replaced by v5wire tests). |
| p2p/discover/v4_lookup_test.go | Adjust pubkey decode call site to new decodePubkey([]byte) signature. |
| p2p/discover/table_util_test.go | Update shared test helpers used by discovery tests. |
| p2p/discover/node.go | Change decodePubkey to accept []byte and validate length. |
| internal/utesting/utesting.go | Add embeddable testing harness for standalone tools. |
| cmd/devp2p/README.md | Document new discv5 test suite usage. |
| cmd/devp2p/internal/v5test/framework.go | Add discv5 test framework for interactive protocol checks. |
| cmd/devp2p/internal/v5test/discv5tests.go | Add discv5 interactive test suite cases (ping/talk/findnode). |
| cmd/devp2p/discv5cmd.go | Add devp2p discv5 test command + flags and test execution. |
| cmd/devp2p/discv4cmd.go | Improve fallback IP selection based on actual listen address. |
This change implements the Discovery v5.1 wire protocol and also adds an interactive test suite for this protocol.
04a296d to
2671b89
Compare
Proposed changes
This change implements the Discovery v5.1 wire protocol and also adds an interactive test suite for this protocol.
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that