Skip to content

feat(l1): support dual discovery protocols (discv4 + discv5) with shared PeerTable#5962

Merged
ilitteri merged 219 commits into
mainfrom
discv5-discovery-multiplexer
Feb 25, 2026
Merged

feat(l1): support dual discovery protocols (discv4 + discv5) with shared PeerTable#5962
ilitteri merged 219 commits into
mainfrom
discv5-discovery-multiplexer

Conversation

@ElFantasma

Copy link
Copy Markdown
Contributor

Motivation

Enable running both discv4 and discv5 discovery protocols simultaneously on the same UDP port, allowing gradual migration to discv5 while maintaining compatibility with discv4-only peers.

Description

  • Add discovery multiplexer GenServer that routes UDP packets to the appropriate protocol handler based on packet structure (discv4 packets have hash at bytes 0-32 matching keccak256 of remaining bytes)
  • Create unified peer_table.rs with support for contacts reachable via both protocols (is_discv4/is_discv5 flags)
  • Add CLI flags --discovery.discv4 and --discovery.discv5 to enable/disable each protocol independently
  • Add protocol field to all log lines in both discovery servers for easier debugging
  • Remove protocol-specific peer_table.rs files (now unified)

Closes #5884

ElFantasma and others added 30 commits December 9, 2025 10:31
**Motivation**

<!-- Why does this pull request exist? What are its goals? -->

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5574 and #5575.

Co-authored-by: Esteban Dimitroff Hodi <esteban.dimitroff@lambdaclass.com>
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5580 and #5581
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5578 and #5579
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5576 and closes #5577
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #issue_number
**Motivation**
I saw current new_nonce impl allocated a vector when it can just return
a fixed size array.

**Description**

Removes the needless vec

**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.
**Motivation**

In order to start merging discv5 code into main, to avoid having a huge
PR at the end of the development, we should create a feature flag
disabled by default.

Closes #5639
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5586
Closes #5587
**Motivation**

<!-- Why does this pull request exist? What are its goals? -->

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.
**Motivation**

<!-- Why does this pull request exist? What are its goals? -->

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5570
Closes #5571
**Checklist**

- [ ] Updated `STORE_SCHEMA_VERSION` (crates/storage/lib.rs) if the PR
includes breaking changes to the `Store` requiring a re-sync.

Closes #5566
Closes #5567
Base automatically changed from discv5-server-external-ip-detection to main February 24, 2026 16:18
@ilitteri ilitteri added this pull request to the merge queue Feb 25, 2026
Merged via the queue into main with commit 6e3552d Feb 25, 2026
60 checks passed
@ilitteri ilitteri deleted the discv5-discovery-multiplexer branch February 25, 2026 20:06
@github-project-automation github-project-automation Bot moved this from In Review to Done in ethrex_l1 Feb 25, 2026
lakshya-sky pushed a commit to lakshya-sky/ethrex that referenced this pull request Mar 10, 2026
…red PeerTable (lambdaclass#5962)

**Motivation**

Enable running both discv4 and discv5 discovery protocols simultaneously
on the same UDP port, allowing gradual migration to discv5 while
maintaining compatibility with discv4-only peers.

**Description**

- Add discovery multiplexer GenServer that routes UDP packets to the
appropriate protocol handler based on packet structure (discv4 packets
have hash at bytes 0-32 matching keccak256 of remaining bytes)
- Create unified peer_table.rs with support for contacts reachable via
both protocols (is_discv4/is_discv5 flags)
- Add CLI flags `--discovery.discv4` and `--discovery.discv5` to
enable/disable each protocol independently
- Add protocol field to all log lines in both discovery servers for
easier debugging
- Remove protocol-specific peer_table.rs files (now unified)

Closes lambdaclass#5884

---------

Co-authored-by: MrAzteca <azteca1998@users.noreply.github.com>
Co-authored-by: Edgar <git@edgl.dev>
Co-authored-by: Lucas Fiegl <iovoid@users.noreply.github.com>
Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com>
Co-authored-by: Pablo Deymonnaz <pdeymon@fi.uba.ar>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

L1 Ethereum client

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Support dual discovery protocols (discv4 + discv5) with shared PeerTable

6 participants