github sigp/lighthouse v5.2.0
Tree People

latest releases: v5.3.0, v5.2.1
5 months ago

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.

memory

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 newbuilder-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

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 to eth1/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 the skip-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 to Bellatrix (#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 and http-allow-sync-stalled (#5500)
  • Use the mesh_n value from NetworkLoad for PeerScoreSettings (#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 and LightClientOptimisticUpdate 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 for EthSpec 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

Don't miss a new lighthouse release

NewReleases is sending notifications on new releases.