Skip to content

feat: separate EL and CL into distinct ports with independent ENRs#21

Open
filoozom wants to merge 2 commits into
ethpandaops:masterfrom
filoozom:feat/separate-enrs
Open

feat: separate EL and CL into distinct ports with independent ENRs#21
filoozom wants to merge 2 commits into
ethpandaops:masterfrom
filoozom:feat/separate-enrs

Conversation

@filoozom
Copy link
Copy Markdown
Contributor

Currently, there is a single ENR for both EL and CL. Unfortunately, some clients don't like having unexpected fields (eth in CL or eth2 in EL). This PR aims to solve that issue.

As this PR introduces different ENRs, it also makes sense to have different ports, rather than multiplexer logic. However, this produces fairly substantial breaking changes. I could also rewrite it to support the previous architecture if you'd prefer.

Breaking changes:

  • --bind-port replaced by --el-bind-port (default 30303) and --cl-bind-port (default 9000)
  • --enr-port replaced by --el-enr-port and --cl-enr-port
  • --enable-el and --enable-cl flags removed
  • --devnet-shim now takes an IP instead of IP:port

I'm not 100% sure that I correctly understood the point of the devnet shim, so hopefully I didn't mess that up too much.

BREAKING CHANGE:
- --bind-port replaced by --el-bind-port (default 30303) and
  --cl-bind-port (default 9000)
- --enr-port replaced by --el-enr-port and --cl-enr-port
- --enable-el and --enable-cl flags removed
- --devnet-shim now takes an IP instead of IP:port
dapplion added a commit to dapplion/bootnodoor that referenced this pull request Apr 18, 2026
… works

ethpandaops/ethereum-package's bootnodoor_launcher.star reads /enr once
and passes the result as --boot-nodes / --bootstrap-node to every CL
client in the enclave. Before this PR, /enr returned an ENR with both
eth and eth2, so lighthouse/prysm/etc. could bootstrap from it. With
the split to separate EL/CL ENRs, this PR's shim served the EL-only
ENR on /enr 'for backward compat' — but that ENR has eth instead of
eth2 and CL clients silently stay at peer_count: 0.

Prefer CL over EL on /enr when CL is configured, which restores the
behaviour CL consumers relied on. Keep /el-enr and /cl-enr as the
explicit endpoints for consumers that want a specific layer.

Reproduced with a custom kurtosis devnet (no public network so no
inherited bootnodes): lighthouse + prysm against the PR ethpandaops#21 image —
before this fix, both CL clients sat at 0 peers indefinitely; after,
they establish discv5 sessions with the host bootnodoor and pick up
each other's ENRs via FINDNODE.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant