Summary
Lighthouse v8.1.0 includes performance optimizations, validator client improvements, and bug fixes.
This is a recommended upgrade for users experiencing performance issues, particularly those running large numbers of validators.
Performance Improvements
- Batch attestation slashability checks (#8516): Attestations are now checked for slashability in batches instead of sequentially. This fixes slashing protection database timeouts for users running large numbers of validators under heavy disk congestion.
- Faster
/eth/v1/beacon/blocks/head/root(#8729): Head block root is now served without waiting for the full block import, improving sync committee performance at epoch boundaries. - Faster beacon node startup (#8451): Parallelized pubkey cache initialization during checkpoint sync, significantly reducing startup time on large networks.
- Faster block processing (#8446): Removed unnecessary block header calculations, saving 10-20ms per block.
- Faster
prepare_beacon_proposerAPI (#8353): Fixed slow API calls that could take 5-10 seconds during non-finality.
Validator Client Improvements
- Earlier attestation broadcasting (#7892): Attestations are now sent as soon as a new head is computed, rather than always waiting until 4 seconds into the slot. This brings Lighthouse into spec compliance and helps spread attestation load throughout the slot.
- Reduced API calls for DVT users (#8699):
beacon_committee_selectionsis now called only once per epoch instead of every slot. - Skip empty attestation duties (#8559): Attestation data is no longer requested when attestation duty is empty.
- Reduced attestation data API calls (#8171): VC now fetches attestation data once per slot instead of once per committee, reducing API calls from 64 to 1 on mainnet.
Other Notable Changes
- Manual checkpoint sync without blobs (#8470): Checkpoint sync now works when blobs are unavailable.
- Fork choice debug endpoint (#7845): Added extra data to
/eth/v1/debug/fork_choiceincluding justified/finalized roots and unrealized checkpoints. - Earlier SSE events (#8718):
NewHeadSSE event is now emitted earlier in block import. - Optimistic sync metric (#8059): New metric to track optimistic sync status.
CLI Changes
Validator Client
- New flag
--graffiti-append(#7558): Append client version info to user-defined graffiti. - New flag
--disable-beacon-head-monitor(#7892): Revert to the previous behavior of always attesting at the 4 second mark, instead of attesting as soon as a new head is received. This can reduce bandwidth and provide more predictable BN usage, but leaving it enabled is recommended.
Update Priority
| User Class | Beacon Node | Validator Client |
|---|---|---|
| Staking Users | Medium | Medium |
| Non-Staking Users | Low | --- |
See Update Priorities for more information.
All Changes
- Release v8.1.0 (#8749)
- fix bootnode entry (#8748)
- Use events API to eager send attestations (#7892)
- Bump bytes to 1.11.1 to fix RUSTSEC-2026-0007 (#8743)
- Merge remote-tracking branch 'origin/stable' into unstable
- Fast path for
/eth/v1/beacon/blocks/head/root(#8729) - Replace
INTERVALS_PER_SLOTwith explicit slot component times (#7944) - Emit
NewHeadSSE event earlier in block import (#8718) - Call beacon_committee_selections only once per epoch (#8699)
- Disable
sqliteby default (#8708) - Gloas gossip boilerplate (#8700)
- Convert RpcBlock to an enum that indicates availability (#8424)
- Remove unused anvil references (#8710)
- Add Gloas data column support (#8682)
- Check slashability of attestations in batches to avoid sequential bottleneck (#8516)
- Remove
datadependency from fromcoremodule in `consensus/types (#8694) - Implement custom OpenTelemetry sampler to filter uninstrumented traces (#8647)
- Updated consensus types for Gloas
1.7.0-alpha.1(#8688) - update libp2p dependency to upstream (#8200)
- Revised log when all validators have exited (#8623)
- Remove remaining facade module re-exports from
consensus/types(#8672) - Remove
executiondependency fromcoremodule inconsensus/types(#8666) - More
consensus/typesre-export cleanup (#8665) - Update chainspec p2p and etc (#8601)
- Cleanup
consensus/typesre-exports (#8643) - Remove
statedependency fromcoremodule inconsensus/types(#8653) - chore(validator_client): Read genesis time and genesis validators root from eth2_network_config (#8638)
- Get blobs v2 metrics (#8641)
- Update buckets for metric (#8651)
- Re-introduce clearer variable names in beacon processor work queue (#8649)
- Remove http-api tests, and test on
unstableby default, with option to override. (#8646) - Move beacon processor work queue implementation to its own file (#8141)
- Replace tracing::debug! with debug! same for other levels (#8300)
- Add nightly tests workflow to test prior forks (#8319) (#8636)
- fix(peerdb): use start_slot instead of end_slot for safer actions (#8498)
- Remove Windows in the documentation (#8628)
- Tweak a log message for mock-el (#8599)
- Remove duplicated
cryptodependencies (#8605) - Gloas add off protocol payment field to bid (#8596)
- Delete attester cache (#8469)
- fix: improve error for insufficient blob data columns (#8595)
- perf: remove allocations from merkle tree proof verification logic (#8614)
- refactor: remove
service_name(#8606) - update ruint dependency (#8617)
- Update
procfs(#8608) - Refine cargo-deny rules (#8602)
- Add cargo deny on CI (#8580)
- Delete
PartialBeaconState(#8591) - Gloas(EIP-7732): Containers / Constants (#7923)
- Append client version info to graffiti (#7558)
- fix visual bug on visualize_batch_state leading to a non-wanted comma (#8499)
- Fix Makefile to avoid git describe error in CI (#8513)
- Update
synto2.0.110(#8563) - Update
strumto0.27(#8564) - Add regression test for unaligned checkpoint sync with payload pruning (#8458)
- fix(bls): fix is_infinity when aggregating onto empty AggregateSignature (#8496)
- Rust 1.92 lints (#8567)
- Do not request attestation data when attestation duty is empty (#8559)
- Fix testnet script (#8557)
- Remove
consensus/typesre-exports (#8540) - Clarify
alloydependencies (#8550) - Reduce
eth2dependency space (#8524) - Move beacon pool http api to its own separate module (#8543)
- Move validator http endpoints to a separate module (#8536)
- Refactor
consensus/types(#7827) - Move beacon state endpoints to a separate module. (#8529)
- Move deposit contract artifacts to /target (#8518)
- Always use committee index 0 when getting attestation data (#8171)
- Instrument attestation signing. (#8508)
- Fix data columns sorting when reconstructing blobs (#8510)
- Update local testnet scripts for the fulu fork (#8489)
- Refactor get_validator_blocks_v3 fallback (#8186)
- Add tracing spans to validator client duty cycles (#8482)
- Optimise pubkey cache initialisation during beacon node startup (#8451)
- fix: compare bls changes in op-pool (#8465)
- feat: Add reproducible builds release workflows and push images to DockerHub (#7614)
- Remove
context_deserializeand import from crates.io (#8172) - Integration tests ergonomics (#7836)
- Remove quickcheck in favour of proptest (#8471)
- Update docs on Siren port and other small updates (#8399)
- Allow manual checkpoint sync without blobs (#8470)
- Dockerfile with cargo artifacts caching (#8455)
- Consolidate reqwest versions (#8452)
- chore: Add Dockerfile.dev for local development (#8295)
- Optimise out block header calculation (#8446)
- Cargo Update (#8443)
- Merge remote-tracking branch 'origin/stable' into unstable
- Add nightly tests workflow to test prior forks (#8319)
- Gracefully handle deleting states prior to anchor_slot (#8409)
- Add extra data in
/eth/v1/debug/fork_choice(#7845) - Add
optimistic_syncmetric (#8059) - Migrate
execution_engine_integrationtoalloy(#8140) - Remove duplicate state in ProtoArray (#8324)
- Migrate the
deposit_contractcrate toalloy(#8139) - fix: clarify
bbvsblvariable names in BeaconProcessorQueue (#8315) - Include block root in publish block logs (#8111)
- Remove
ethers-corefromexecution_layer(#8149) - Fix flaky reconstruction test (#8321)
- Migrate derivative to educe (#8125)
- Remove
sensitive_urland import fromcrates.io(#8377) - CI workflows to use warpbuild ci runner (#8343)
- Remove ecdsa feature of libp2p (#8374)
- Prepare
sensitive_urlforcrates.io(#8223) - Downgrade and remove unnecessary logs (#8367)
- Fix unaggregated delay metric (#8366)
- Update proposer-only section in the documentation (#8358)
- Remove Windows CI jobs (#8362)
- Optimise
state_root_at_slotfor finalized slot (#8353) - Merge remote-tracking branch 'origin/stable' into unstable-merge-v8
- Reduce number of blobs used in tests to speed up CI (#8194)
- Rework
lighthouse_versionto reduce spurious recompilation (#8336) - Merge remote-tracking branch 'origin/release-v8.0' into unstable
- Add
versionto the response of beacon API client side (#8326) - Remove redundant
subscribe_all_data_column_subnetsfield from network (#8259) - Update spec tests to v1.6.0-beta.1 (#8263)
- Run CI tests only recent forks (#8271)
- Merge remote-tracking branch 'origin/release-v8.0' into unstable
- Extracting the Error impl from the monolith
eth2(#7878) - Remove
compare_fieldsand import from crates.io (#8189) - Bump
ssz_typestov0.12.2(#8032) - Add
/lighthouse/custody/infoto Lighthouse book (#8305) - chore: fix typo (#8292)
Binaries
See pre-built binaries documentation.
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| | aarch64 | lighthouse-v8.1.0-aarch64-apple-darwin.tar.gz | PGP Signature |
| | x86_64 | lighthouse-v8.1.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature |
| | aarch64 | lighthouse-v8.1.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature |
| System | Option | - | Resource |
| | Docker | v8.1.0 | sigp/lighthouse |