Erigon v3.7.1 — Velvet Vibrissae
v3.7.1 makes Caplin ready for Glamsterdam on Sepolia. Upgrade Sepolia nodes before 6 October 2026, 13:53:36 UTC (epoch 353024). This bugfix release is recommended for all users; no re-sync is required from 3.7.0. Operators using custom graffiti or non-default Caplin ports should review the breaking changes below.
Breaking Changes
- cl/beacon: prefix custom graffiti with EL+CL client identification by default (#24394) by @lystopad — leaves 19 bytes for custom text, or 25 while the EL version is unavailable; longer text is truncated. Set
--beacon.api.preserve-graffitito keep the full 32 bytes for custom graffiti. Short hex values are right-padded with and without--beacon.api.preserve-graffiti. - cl/p2p: add QUIC v1 with TCP fallback (#24413) by @domiwei — QUIC defaults to UDP
4001; allow this port through your firewall, or the port configured by--caplin.discovery.quicport(--sentinel.quic.portfor standalone Sentinel). Discovery still defaults to UDP4000. If you use--caplin.discovery.port=4001, set a different QUIC port before upgrading: conflicting discovery and QUIC UDP binds now prevent Caplin from starting. Fixes #23398.
Bugfixes
- cl, execution: prepare Caplin for Glamsterdam on Sepolia (#24386, #24399, #24421, #24441, #24458, #24474, #24484) by @domiwei, @yperbasis, @MysticRyuujin, @Bruce039 — aligns Gloas consensus and APIs with
consensus-specsv1.7.0-beta.2, corrects Payload Timeliness Committee (PTC) duties and fork-epoch advertising, and preserves slot numbers and block access lists in locally built payloads. Sets the payload deadline to 50% of the slot (6 seconds on Sepolia) and schedules Sepolia's default 200M gas-limit target. Retries retained parent payloads without an EL verdict during sync within the running process. - execution: release block-builder state after a payload is built (#24478) by @taratorio — cached results kept transaction read sets and contract bytecode alive, causing out-of-memory failures under heavy code-access workloads.
- cl/beacon: publish request blobs on nodes that did not produce the block (#24471) by @lystopad — fixes
500 missing blob bundlewhen validators publish pre-Gloas blocks to multiple beacon nodes. Fixes #23112. - execution/engineapi: wait longer for a busy execution module before dropping a payload build (#24396) by @lystopad — external consensus clients now get up to 6 seconds, or one slot on chains with shorter slots, instead of 500 ms. This avoids missed proposals during background flush and commit. Fixes #24371.
- db/datadir/reset: reject
erigon snapshots reset --local=falsewhen it would mix referenced commitment and state files from different builds (#24401) by @lystopad — checks run before any deletion;--allow-mixed-stateoverrides the guard.
Security
- cl/beacon, cl/phase1/network/services: prevent unvalidated sync-committee messages from reaching gossip (#24368, #24384) by @lystopad — messages outside the allowed slot window are no longer published, cache hits check the block root and signature, and already-published retries are suppressed. Together these changes fix #24305.
Improvements
- cl/beacon: publish sync-committee messages in the background (#24368) by @lystopad — removes gossip latency from Beacon API responses and reports queue-admission failures to callers.
- cl/antiquary: compress blob snapshot backlogs with multiple workers (#24338) by @lystopad — speeds up archive-node catch-up while keeping one worker at the tip.
Full Changelog: v3.7.0...v3.7.1