Skip to content

fix(cl): give QUIC its own port for caplin, teku, lodestar and nimbus - #1490

Merged
qu0b merged 3 commits into
mainfrom
qu0b/caplin-quic-port
Sep 28, 2026
Merged

qu0b merged 3 commits into
mainfrom
qu0b/caplin-quic-port

Conversation

@qu0b

@qu0b qu0b commented Sep 26, 2026 •

Copy link
Copy Markdown
Member

erigontech/erigon#24117 (merged 2026-09-22) added a QUIC transport to Caplin. Its port (--sentinel.quic.port) defaults to 4001, the same port this package passes as --discovery.port. Caplin now exits at startup with:

Error: discovery and QUIC ports must differ: 4001

Every run with a caplin participant fails, e.g. mix-with-tools.yaml on #1489, which doesn't touch Caplin at all.

Changes

All CLs now follow the lighthouse/grandine pattern: a dedicated QUIC port (9001 by default, or a published slot when port publishing is on), passed explicitly and declared as quic-discovery.

Client QUIC port Published slot Flags
caplin 4002 [3] --sentinel.quic.port
teku 9001 [4] (already declared, flag was missing) --p2p-quic-port
lodestar 9001 [3] --quicPort, --enr.quic
nimbus 9001 [4] --quic-port

Teku, Lodestar and Nimbus all enable QUIC by default and bind UDP 9001 (Lodestar: --port + 1). Without port publishing this worked by coincidence. With port publishing, their ENRs advertised a QUIC port that was never published, so external peers' QUIC dials failed and fell back to TCP.

Testing

  • Caplin, against ethpandaops/caplin:main (built 2026-09-26): with the old flags it exits with the error above; with --sentinel.quic.port=4002 the QUIC listener starts.
  • Teku / Lodestar / Nimbus: enclave with port_publisher.cl.enabled: true (teku, lodestar, nimbus, lighthouse on geth). /eth/v1/node/identity shows each advertising its published QUIC port (teku udp/33004, lodestar udp/33010, nimbus udp/33018), and all nodes peered.
  • kurtosis lint is clean.

erigon#24117 (2026-09-22) added a QUIC transport to Caplin whose port defaults to
4001, the discovery port this package passes, and Caplin now refuses to start:
"discovery and QUIC ports must differ: 4001". Assign it a separate port the way
the lighthouse launcher does.

Claude-Session: https://claude.ai/code/session_01LMoaDSkP7fGBZGm25FZc5x

@redpandabot redpandabot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR gives Caplin's QUIC transport its own port (4002, or public port slot [3] when publishing is on) and declares it as quic-discovery, fixing the startup error where Caplin's QUIC default collided with the discovery port. The change follows the lighthouse launcher's existing pattern line-for-line, index [3] is guaranteed by MAX_PORTS_PER_CL_NODE = 7, and the UDP port-spec mapping is correct. No issues found.


Reviewed 1 changed file(s) @ 05a171e4 — no blocking issues found.
"A user interface is like a joke. If you have to explain it, it's not that good."

@qu0b
qu0b enabled auto-merge (squash) September 26, 2026 15:29
@barnabasbusa barnabasbusa changed the title fix(caplin): give QUIC its own port fix(cl): give QUIC its own port for caplin, teku, lodestar and nimbus Sep 28, 2026
@qu0b
qu0b merged commit 6dd3f26 into main Sep 28, 2026
13 of 17 checks passed
@qu0b
qu0b deleted the qu0b/caplin-quic-port branch September 28, 2026 12:25
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.

2 participants