Tree People
Summary
This medium-priority release contains a major improvement to how states are managed in memory (tree-states
) and an optimised epoch and block processing implementation. The beacon node now uses considerably less memory than the previous version thanks to more efficient state caching. It also includes other performance improvements, bug fixes and groundwork preparation for the upcoming Electra fork and PeerDAS upgrade.
Notable changes in this release:
- Epoch and block processing have been optimized, resulting in improved performance and security. The optimized epoch processing implementation is accompanied by a proof of correctness detailed in this post (#5279).
- Introduce in-memory
tree-states
, providing more efficient state caching, improved overall performance and reduced memory usage (#5533). - Add server-sent events (SSE) for proposer slashing, attester slashing, and BLS to execution change (#5327, #5857).
- Encode execution engine client version in block graffiti to probe execution layer client diversity, more details below (#5290).
- Add new timing metrics for block availability to better reflect the actual delays caused by blob processing and other factors (#5510).
- Update the proposer re-orgs feature to align with the latest spec (#5417).
- Introduce new containers, presets, and configurations in preparation for the Electra fork (#5122, #5606, #5607, #5630, #5652, #5653).
- Refactor and simplifications in sync and block lookup logic in preparation for PeerDAS (#5561, #5562, #5563, #5564, #5583, #5655).
- Add a new
builder-header-timeout
flag, which allows for configuring timeouts for the get builder header API call (#5857) - Fix attestations not getting added to the aggregation pool. This improves the quality of aggregate attestations Lighthouse produces (#5863).
There are a few breaking changes. Please see the section on Breaking Changes below.
In-memory tree states (#5533)
This release introduces the memory-only portion of tree-states
, marking a significant upgrade to state management. The beacon node can now hold ~64 times more states with approximately the same memory cost, significantly reducing memory usage and minimizing spikes. This enhancement also improves overall performance. Consequently, the default value for the --state-cache-size
beacon node flag has been increased from 3 to 128. We recommend that users who had manually adjusted the state cache size try the new larger default.
This development brings us closer to the full implementation of tree-states
(both in-memory and on-disk) in Lighthouse, an upgrade that has been in progress for over two years. Stay tuned for the remaining tree-states
upgrades and their benefits in upcoming releases!
Encode execution engine client version in block graffiti (#5290)
To support better analysis of execution client diversity, Lighthouse now supports the engine_getClientVersionV1
API.
If no user graffiti is provided, and the method is supported by the execution node, then Lighthouse will use graffiti of the form:
GEab48LH5c2c
Here GE
is the execution client shortcode corresponding to Geth, ab48
are the first 4 characters of Geth's commit hash, LH
indicates Lighthouse, and 5c2c
are the first 4 character's of Lighthouse's commit hash.
We expect execution clients to gradually gain support for this new API. Check your execution client's release notes for details. Note that the latest version of Nethermind (v1.26.0) includes a broken version of this API, so we recommend waiting until v1.27.0 is released before upgrading.
portable
builds for Docker and binary releases (#5614, #5615)
All Lighthouse binaries and Docker images are now built using portable
BLS. For backwards-compatibility *-modern
Docker tags still exist as aliases. Similarly, binary tarballs for the -portable
suffix are also attached to this release, but are identical to the unsuffixed binary tarballs. We recommend that automated update scripts switch over to using the :latest
Docker image or the unsuffixed binary tarballs so we can remove the redundancy and streamline the available images and binaries in a future release.
The switch to portable
is motivated by a change in the blst
library to use runtime detection of hardware features. This puts portable
builds on par for performance with modern
builds, and simplifies the release update process for users and devs.
builder-header-timeout
flag (#5857)
Lighthouse previously used a static timeout of 1.0s when requesting an execution payload header from an mev-boost
relay. The new builder-header-timeout
flag for the beacon node allows this value to be adjusted using a value in milliseconds, e.g. --builder-header-timeout 500
will set the timeout to 0.5s. This can be beneficial if communicating with a faraway relay which sometimes times out.
Breaking Changes
Several breaking changes have been made to CLI flags as part of a cleanup and modernisation effort. Please make sure to remove or update these flags as part of upgrading. The changes are described in detail below but the affected flags are:
- VC:
latency-measurement-service
- BN:
progressive-balances
,http-spec-fork
,http-allow-sync-stalled
,self-limiter
,inbound-rate-limiter
.
We have avoided making breaking changes to the database schema in this release so that users can upgrade and downgrade more simply. The next release will include a number of on-disk changes.
🌲 If you were already running the tree-states
beta (v5.1.222-exp), then the database schema for v5.2.0 is not compatible with your existing database. You need to either stay on that release, or wait for a new version that incorporates the on-disk changes (maybe v5.3.0). Unfortunately a re-sync will be required eventually, as the stable form of the tree-states
DB will be different from the beta.
🦀 Minimum Supported Rust Version 1.77 🦀
The minimum supported Rust version (MSRV) has been updated to 1.77.0. Users who compile from source (i.e., not Docker or pre-built binary users) will receive the following error if they are using an earlier version of Rust:
lighthouse v5.2.0 (/home/sigp/lighthouse/lighthouse) cannot be built because it requires rustc 1.77 or newer
Users can typically obtain the latest version of Rust by running rustup update
.
Deprecated latency-measurement-service
flag
The validator client --latency-measurement-service
flag is now deprecated in favour of --disable-latency-measurement-service
. By default the latency measurement service is enabled, and can be disabled by providing the new --disable-latency-measurement-service
flag. Using the prior --latency-measurement-service
flag will have no effect and will become a hard error in a future release. This change was made as part of an upgrade to a new version of our CLI parsing library, Clap, in #5273.
Deprecated http-spec-fork
and http-allow-sync-stalled
flags (#5500)
Lighthouse now ignores the http-spec-fork
value and keeps the default spec fork, as this option was rarely used.
The http-allow-sync-stalled
flag has been deprecated and is now the default behaviour as Lighthouse now prioritises liveness for the HTTP API. These flags will be removed in upcoming releases.
See #5430 and #5500 for more details.
Deprecated --progressive-balances
flag (#5279)
This optimisation (--progressive-balances=fast
) is now the default and cannot be disabled. See #5279 for more details. A warning will be logged if the flag is provided, and in a future version we will remove the flag entirely.
Removed block processing metrics (#5510)
The block import metrics have been reworked to more accurately measure import delays and provide more insights into block availability and readiness for attestation.
The following block processing metrics have been removed:
beacon_block_observed_slot_start_delay_time
beacon_block_imported_observed_delay_time
beacon_block_head_imported_delay_time
beacon_block_head_slot_start_delay_time
beacon_block_head_slot_start_delay_exceeded_total
beacon_block_gossip_propagation_verification_delay_time
beacon_block_gossip_slot_start_delay_time
beacon_block_last_delay
beacon_block_gossip_arrived_late_total
beacon_blob_gossip_propagation_verification_delay_time
beacon_blob_gossip_slot_start_delay_time
beacon_blob_last_delay
For more details and the updated metrics, see #5510.
MDBX excluded from the Docker build (#5614)
The slasher-mdbx
feature is no longer included as part of our standard Docker images.
The default slasher backend was changed from MDBX to LMDB in Lighthouse v4.3.0 for more stability and has been the recommended option. Advanced users can still use the slasher-mdbx
feature with a custom Docker build.
Modified self-limiter
flag
This flag is mostly useful for developers and probably shouldn't be part of your configuration. If in doubt, remove it.
The beacon node flag --self-limiter
no longer takes an argument. A new flag --self-limiter-protocols
is introduced to allow for configuration of the outbound rate limiter service per protocol. In order to use the new --self-limiter-protocols
flag, --self-limiter
must also be provided.
Removed inbound-rate-limiter
flag
This flag is mostly useful for developers and probably shouldn't be part of your configuration. If in doubt, remove it.
The beacon node flag --inbound-rate-limiter
is now replaced by --disable-inbound-rate-limiter
. By default the inbound rate limiter service is enabled and can be disabled by providing the new disable-inbound-rate-limiter
flag. Also, an additional flag inbound-rate-limiter-protocols
is introduced to allow for configuration of the inbound rate limiter service per protocol. Note that the disable-inbound-rate-limiter
flag conflicts with the inbound-rate-limiter-protocols
flag, they cannot be used in tandem.
New local testnet scripts
The local testnet scripts for developers have been replaced by Kurtosis-based scripts that are easier to use and maintain. See #5865 for details. Several lcli
commands have also been removed as part of this simplification. We will be updating the documentation on how to use the new scripts in the coming weeks.
Developer (-dev
) Docker images
The *-dev
Docker images are now aliases to other images, as the spec-minimal
feature is enabled by default for all images.
Known Issues
This release is deprecated. Please run v5.2.1 or a newer release.
Sync gets stuck
Unfortunately after restarting the BN sync will sometimes get stuck. Restarting the beacon node a few times will usually fix it.
This bug is fixed in v5.2.1 and newer.
Teku 24.10 BN Incompatibility
Beacon nodes running Teku 24.10.x and newer are not compatible out of the box with the validator client from this release. If you want to run Lighthouse VC v5.2.x with Teku BN 24.10.x you must use the --produce-block-v3
flag with Lighthouse. Upgrading to Lighthouse v5.3.0 is preferable as it fixes the incompatibility without requiring any flags.
Nethermind v1.26.0 engine_getClientVersionV1
bug
Nethermind v1.26.0 includes an implementation of engine_getClientVersionV1
which is not compliant with the API specification and does not work with Lighthouse. We recommend holding Nethermind back at v1.25.0 until v1.27.0 is released, or ignoring the warning that is generated by the bug:
WARN Execution engine call failed error: InvalidClientVersion("Input must be exactly 8 characters long (excluding any '0x' prefix)"), service: exec
See NethermindEth/nethermind#7013 for details.
Update Priority
This table provides priorities for which classes of users should update particular components.
User Class | Beacon Node | Validator Client |
---|---|---|
Staking Users | Medium | Medium |
Non-Staking Users | Medium | --- |
See Update Priorities for more information about this table.
Lighthouse BNs and VCs from v5.0.0, v5.1.x and v5.2.0 are compatible. However, we recommend that users update both the VC and BN to v5.2.0 if upgrading.
All changes
See full changelog here.
All Changes
- Release v5.2.0 (#5664)
- Undo some CLI flag breakages (#5902)
- Allow all RPC messages on disconnect (#5876)
- Errors for all RPC Requests (#5867)
- Update criterion (#5886)
- Fix getClientVersionV1 for Geth 1.13 (#5884)
- Investigate
UnknownTargetRoot
slasher errors (#5006) - Replace local testnet script with Kurtosis (#5865)
- Increase slog buffer size (#5882)
- Keep PendingComponents in da_checker during import_block (#5845)
- Make beacon processor queue sizes dynamic (#5573)
- Fix attestations not getting added to the aggregation pool (#5863)
- Add builder header timeout flag (#5857)
- replace instant with web-time (#5800)
- Add peers to parent lookups (#5858)
- Fix BitVectors TestRandom implementation (#5854)
- Add
bls_to_execution_change
topic toeth1/v1/events
(#5823) - Rename deploy_block in network config (#5850)
- Always build
lcli
on CI (#5860) - upgrade clap to v4.5 (#5273)
- Add more info about why lookup is in AwaitingDownload (#5838)
- Remove Goerli support (#5770)
- Remove unused dependencies (#5812)
- don't block mev boost till genesis finalization (#5834)
- Ensure lookup sync checks caches correctly (#5840)
- Do not drop lookups without peers while awaiting events (#5839)
- Report sync of block import via blob import (#5836)
- Do not double log uknown lookup (#5837)
- Debounce UnknownBlockHashFromAttestation events (#5706)
- Markdown linter (#5494)
- Suppress RPC Error disconnect log (#5802)
- Update default target peers documentation (#5727)
- Drop stuck lookups (#5824)
- Fix hot state disk leak (#5768)
- Reduce frequency of polling unknown validators to avoid overwhelming the Beacon Node (#5628)
- Fix lookup disconnect peer (#5815)
- Use JSON header by default for
/eth/v1/beacon/deposit_snapshot
(#5813) - Type sync network context send errors (#5808)
- Skip creating child lookup if parent is never created (#5803)
- Skip CI's
test-suite
when theskip-ci
label is present (#5790) - use electra feature in notifier completeness check (#5786)
- Log block import source (#5738)
- Log stuck lookups (#5778)
- Don't request block components until having block (#5774)
- Enforce sync lookup receives a single result (#5777)
- Do not request current child lookup peers (#5724)
- Notify lookup sync of gossip processing results (#5722)
- Revise contributors guide (#5720)
- Move sync lookup trait function to its caller (#5704)
- Report RPC Errors to the application on peer disconnections (#5680)
- Consistent logging of full root in lookup debug logs (#5700)
- web3Signer: set header "Accept: application/json" as we expect json in the response (#5692)
- One less listen address race (#5718)
- Make modified helpers in electra fork aware (#5698)
- Improve logging and metrics for block publication (#5699)
- Add metric for current epoch total balance (#5688)
- Update Cargo.lock (#5670)
- Check da_checker before doing a block lookup request (#5681)
- Improve ENR updates (#5483)
- Ensure block only range requests don't fail on download (#5675)
- delete spammy log (#5672)
- Merge parent and current sync lookups (#5655)
- Only
portable
builds (binaries) (#5615) - Uncomment self_hosted_runner after PR Merge #5137 (#5291)
- Remove snapshot cache related code (#5661)
- pin macos release runner to
macos-13
(#5665) - Proposer and attester slashing sse events (#5327)
- fix(validator_client): raise soft fd limit (#4796)
- Beta compiler fix (#5659)
- Ignore gossip blob already imported (#5656)
- Add more electra helpers (#5653)
- Electra other containers (#5652)
- Deterministic block generation for tests (#5654)
- Rename
Merge
toBellatrix
(#5601) - Add electra presets to beacon API (#5630)
- Fix execution integration tests (#5647)
- Encode Execution Engine Client Version In Graffiti (#5290)
- Drop lookup type trait for a simple arg (#5620)
- Bump jobserver and fix non-portable builds (#5641)
- Yaml rust2 (#5635)
- In-memory tree states (#5533)
- Add missing lcli targets in makefile (#5633)
- Only
portable
builds (docker) (#5614) - Electra: Add Preset, Constants, & Config (#5606)
- Add timing for block availability (#5510)
- Electra: Add New Containers (#5607)
- Delete repetitive execute command in local testnet scripts (#5611)
- Fix stuck backfill when scheduled work queue is at capacity (#5575)
- Handle sync lookup request streams in network context (#5583)
- Update Simulator tests (#5520)
- Fix cargo audit RUSTSEC-2024-0336 (#5612)
- Fix on-disk consensus context format (#5598)
- Revise
secrets-dir
flag in the VC (#5480) - Fix execution layer redundancy (#5588)
- Set web3signer keep-alive to 20s by default (#5587)
- Rename Functions to More Closely Match Spec (#5591)
- Restore Log on Error & Spawn Blocking in Streamer (#5585)
- Use Action in single_block_component_processed (#5564)
- Ensure proper ReqResp blocks_by_* response stream termination (#5582)
- Make SingleLookupRequestState fields private (#5563)
- Use spawn_async in ByRoot handling workers (#5557)
- Ensure proper ReqResp response stream termination (#5556)
- Sync lookup dedup range and blobs (#5561)
- Allow 1 count block request to return 0 blocks (#5554)
- Deprecate
http-spec-fork
andhttp-allow-sync-stalled
(#5500) - Use the
mesh_n
value fromNetworkLoad
forPeerScoreSettings
(#5013) - Only load Kzg in tests if necessary and only load it once (#5555)
- Nest lookup type into request id SingleBlock and SingleBlob (#5562)
- Remove availability view trait (#5544)
- Bump ckzg to use the crates.io version (#5542)
- Add logging in UnknownBlockHashFromAttestation handling (#5546)
- Move processing cache out of DA (#5420)
- Event-based block lookup tests (#5534)
- Skip calculation of boosted_relay_value when builder_boost_factor pro… (#5352)
- Impl Ord on ForkName for ChainSpec usage (#5531)
- Beta compiler fixes (#5543)
- Improve block lookup logging (#5535)
- Support
LightClientFinalityUpdate
andLightClientOptimisticUpdate
rpcs (#3849) - Use hashset to filter validators ids in http_api (#5468)
- Delete
ParticipationCache
(#5525) - Add missing header to
eth/v1/builder/blinded_blocks
(#5407) - Add
is_parent_strong
proposer re-org check (#5417) - Remove DataAvailabilityView trait from ChildComponents (#5421)
- Single-pass epoch processing and optimised block processing (#5279)
- Return
not synced
errors for endpoints that require syncing (#5136) - Bump
h2
for RUSTSEC-2024-0332 (#5514) - Use
E
forEthSpec
globally (#5264) - Add Electra fork boilerplate (#5122)
Binaries
See pre-built binaries documentation.
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
System | Architecture | Binary | PGP Signature |
---|---|---|---|
x86_64 | lighthouse-v5.2.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
x86_64 | lighthouse-v5.2.0-x86_64-apple-darwin-portable.tar.gz | PGP Signature | |
x86_64 | lighthouse-v5.2.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
x86_64 | lighthouse-v5.2.0-x86_64-unknown-linux-gnu-portable.tar.gz | PGP Signature | |
aarch64 | lighthouse-v5.2.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
aarch64 | lighthouse-v5.2.0-aarch64-unknown-linux-gnu-portable.tar.gz | PGP Signature | |
x86_64 | lighthouse-v5.2.0-x86_64-windows.tar.gz | PGP Signature | |
x86_64 | lighthouse-v5.2.0-x86_64-windows-portable.tar.gz | PGP Signature | |
System | Option | - | Resource |
Docker | v5.2.0 | sigp/lighthouse |