Summary
This release includes the mainnet fork epoch for the upcoming Fulu-Osaka (Fusaka) fork and subsequent blob-parameter-only (BPO) forks. 🎉
Upgrading to v8.0.0 is mandatory for all mainnet users prior to the Fulu fork at epoch 411,392 (2025-12-03, 21:49 UTC).
This version also includes configurations for the following BPO forks (no additional action required):
- BPO 1: Epoch 412,672 (2025-12-09, 14:21 UTC) - increases blob count to target/max 10/15
- BPO 2: Epoch 419,072 (2026-01-07, 01:01 UTC) - increases blob count to target/max 14/21
Operators should expect bandwidth increases as the blob count rises with each fork.
Learn more:
- What's included in the Fusaka fork
- How Fusaka affects bandwidth requirements
- Understanding BPO forks
There are also other important changes in v8.0.0:
- This is the last Lighthouse release supporting Windows.
- Users requiring full blobs (e.g. for L2 sync) must add either the
--supernodeor--semi-supernodebeacon node flag. - It is recommended to remove the
block-cache-sizeflag if it is being used. - Default gas limit increases from 45M to 60M.
⚠️ Breaking Changes ⚠️
🍎 🪟 Platform Support Changes
This will be the last Lighthouse release supporting Windows. We have made this decision carefully after considering the low level of Windows adoption, and the difficulty of maintaining a high-quality build of Lighthouse for Windows. We recommend Windows users to switch to using Docker, WSL, Linux or another solution of their choice.
Pre-built macOS x86_64 binaries are no longer provided (#7862). Apple, GitHub runners, and Rust are dropping x86_64 macOS support, so we have made the decision to phase out support. macOS x86 users should use the Linux Docker image, the homebrew package, or build Lighthouse from source.
💾 Database Schema Upgrade
Lighthouse v8.0.0 includes a database schema upgrade to schema v28. This upgrade greatly reduces the size of fork choice on disk, leading to reduced I/O.
No action is required upon upgrading, Lighthouse will automatically upgrade your database to the new version.
If you would like to downgrade to a prior release (e.g. v7.1.0), then you must follow the instructions in the Lighthouse book for downgrading the database schema before switching your binary to the old version.
🐡 Changes to Blob Retrieval Beacon APIs
Once PeerDAS is activated from the Fulu fork:
- Users will no longer be able to retrieve blobs via the Beacon APIs by default. This is because each full node will only sample and store a small portion of blob data.
- To opt-in to full blob access, users must meet one of the following conditions:
- Run the beacon node with either the
--supernodeor--semi-supernodeflag. - Custody at least 50% of all columns by having at least 2,048 ETH in validator stake attached to the beacon node.
- Run the beacon node with either the
- Deprecated API
/eth/v1/beacon/blob_sidecars/{block_id}: This endpoint will return empty blob proofs in post-Fulu blob sidecars. This is because consensus clients will use cell proofs instead of blob proofs for blob verification. This endpoint will be removed in a future release. - New API
/eth/v1/beacon/blobs/{block_id}(#8103): This is the successor to the deprecated blob sidecars endpoint. It supports querying blobs by block ID and versioned hashes. Users are encouraged to switch to using this API ahead of the deprecation of the blob sidecars endpoint.
🦀 Rust Version Requirements (MSRV)
If you build Lighthouse from source you need to upgrade your Rust compiler to v1.88.0 or later. Usually this can be accomplished with the command rustup update.
🧠 Jemalloc
When compiling Lighthouse from source, the jemalloc feature no longer exists. It is enabled by default and can be disabled by a new feature called sysmalloc.
🔑 Network Key Format Migration
Lighthouse BN's private key that it uses for networking cryptography has been changed from binary to hex string format. This is only relevant for users who are manually manipulating these keys, or downgrading to an older version of Lighthouse after running v8.0.0.
Lighthouse will automatically change the format of the key from binary to hex upon upgrading. Because the new key format is not supported by previous versions of Lighthouse, the key must be manually deleted if you would like to downgrade. The key can be found at $datadir/network/key.
🖥️ CLI Flag Changes
- Changed: The default
--block-cache-sizeis now 0 (#8066). To re-enable, use--block-cache-size Nwith a non-zero argument. We recommend leaving the cache disabled, as its absence improves performance for block persistence and RPC responses. - New flag
--supernode: Subscribe to all data column subnets and run as a PeerDAS supernode (#8083). The old name--subscribe-all-data-column-subnetsis aliased for now but will eventually be removed.
- New flag
--semi-supernode: Subscribe to half of the data column subnets. This flag enables blob retrieval via the Beacon API without running a supernode. Semi-supernodes only download and store 50% of all erasure coded blob data which is just sufficient for recovering the blobs, therefore it uses significantly less resources and bandwidth compared to supernodes. (#8254 & #8265)
🔧 Memory & Performance Fixes
- Fixed reprocess queue memory leak (#8065): Resolves gradual memory consumption increase during normal operation.
- Block cache optimization (#8066): Cache now disabled by default, eliminating contention issues.
- Reduced KZG verification overhead: Removed unnecessary verification from local block production (#7713, #7771).
📊 Add OpenTelemetry support
Lighthouse now includes built-in OpenTelemetry support for advanced monitoring and performance analysis. OpenTelemetry provides detailed traces showing exactly how your node processes blocks, handles network requests, and performs validator duties - breaking down operations into individual steps with precise timing data. This helps developers and operators identify bottlenecks, troubleshoot performance issues, and optimize their setup.
To collect telemetry data, you'll need to run an OpenTelemetry collector (such as Grafana Tempo) and run Lighthouse beacon node with the following flags:
--telemetry-collector-url: Connect to an OpenTelemetry gRPC backend (e.g. opentelemetry-collector, Tempo) to export traces (#7816)--telemetry-service-name: Override the service name to distinguish between traces when running multiple nodes
For example:
lighthouse bn --telemetry-collector-url http://localhost:4317 --telemetry-service-name lighthouse-bnThere will be an upcoming blog post that explains the traces available in Lighthouse and how they've been used to analyse and optimise Lighthouse performance.
Other Notable Changes
- Fix builder
get_headerJSON deserialisation: This impacts users running a builder middleware that uses JSON, e.g. vouch (#8228)
- SSZ default: Validator client now uses SSZ by default for
/eth/v3/validator/blocksendpoint (#7727) - Selection Beacon API endpoints: Implement selections Beacon API endpoints to support DVT middleware (#7016)
- New experimental beacon node flag:
--complete-blob-backfillflag enables backfilling all blobs beyond the 18-day window (#7751)
Update Priority
This table provides priorities for which classes of users should update particular components.
| User Class | Beacon Node | Validator Client |
|---|---|---|
| Staking Users | High | High |
| Non-Staking Users | High | --- |
See Update Priorities for more information about this table.
Users should update both the Lighthouse VC and BN to v8.0.0 if using separate binaries. The execution layer client (e.g. Geth, Reth, Besu, Nethermind, Erigon) must also be updated prior to the Fulu fork.
All Changes
- Release v8.0.0 (#8352)
- Ensure custody backfill sync couples all responses before importing (#8339)
- Proposer duties backwards compat (#8335)
- Add mainnet configs (#8344)
- Fix CGC backfill race condition (#8267)
- Rust 1.91 lints (#8340)
- Bump gas limit to 60M (#8331)
- Fix: custody backfill sync display incorrect time estimation (#8291)
- Fix failing CI for
compile-with-beta-compiler(#8317) - Downgrade gossip logs set to INFO level (#8288)
- chore!: remove pub visibility on
OVERFLOW_LRU_CAPACITYandSTATE_LRU_CAPACITY_NON_ZERO(#8234) - Update Lighthouse book (#8284)
- Implement
/lighthouse/custody/infoAPI (#8276) - Revise logging in BlobsByRoot requests (#8296)
- Prevent dropping large binary data to logs (#8290)
- Remove deprecated flag --disable-deposit-contract-sync from doc (#8124)
- Release v8.0.0 rc.2 (#8255)
- New design for blob/column pruning (#8266)
- Only publish reconstructed columns that we need to sample (#8269)
- Trigger backfill on startup if user switches to a supernode or semi-supernode (#8265)
- Add
--semi-supernodesupport (#8254) - Custody backfill sync (#7907)
- Fix data column rpc request (#8247)
- Improve block header signature handling (#8253)
- Add
versionto the response of beacon APIgetPendingConsolidations(#8251) - Use
millis_from_slot_startwhen comparing against reconstruction deadline (#8246) - Sync cleanups (#8230)
- Fix
get_headerJSON deserialization. (#8228) - Avoid attempting to serve blobs after Fulu fork (#7756)
- Feature gate test CLI flags (#8231)
- More proposer shuffling cleanup (#8130)
- Max reconstruction delay as a function of slot time (#8067)
- Revert incorrect fix made in #8179 (#8215)
- Add
eip_3076crate (#8206) - #6853 Adding store tests for data column pruning (#7228)
- Ignore extra columns in da cache (#8201)
- Remove
safe_arithand import from crates.io (#8191) - Add
max_blobs_per_blockcheck to data column gossip validation (#8198) - Downgrade light client error logs (#8196)
- Release v8.0.0-rc.1 (#8185)
- Persist only custody columns in db (#8188)
- Fix duplicate fields being logged when the field exists in both the span and the event (#8183)
- Update
ForkName::latest_stableto Fulu for tests (#8181) - Reject data columns that does not descend from finalize root instead of ignoring it (#8179)
- Implement
/eth/v1/beacon/blobsendpoint (#8103) - Bump kzg library versions (#8174)
- Block proposal optimisations (#8156)
- Remove deprecated CLI flags and references for v8.0.0 (#8142)
- Quote
BeaconState::proposer_lookaheadin JSON repr (#8167) - Fallback to getPayload v1 if v2 fails (#8163)
- Fulu ASCII art (#8151)
- Remove unnecessary warning logs and update logging levels (#8145)
- Improve spec compliance for
/eth/v1/config/specAPI (#8144) - Bump superstruct to
0.10.0(#8133) - Update book for DB schema v28 (#8132)
- Release v8.0.0 rc.0 (#8127)
- Fix proposer shuffling decision slot at boundary (#8128)
- Fix bug in fork calculation at fork boundaries (#8121)
- Fix bugs in proposer calculation post-Fulu (#8101)
- Fulu testnet configs (#8117)
- Only mark block lookups as pending if block is importing from gossip (#8112)
- Only send data coumn subnet discovery requests after peerdas is scheduled (#8109)
- Run reconstruction inside a scoped rayon pool (#8075)
- Use HTTPS for xdelta3 in Cargo.toml (#8094)
- Reduce
TARGET_BACKFILL_SLOTSin checkpoint sync test (#8102) - Refine HTTP status logs (#8098)
- Merge remote-tracking branch 'origin/stable' into unstable
- Always upload sim test logs (#8082)
- Rename
--subscribe-all-data-column-subnetsto--supernodeand make it visible in help (#8083) - Consolidate
reqresp_pre_import_cacheintodata_availability_checker(#8045) - Use scoped rayon pool for backfill chain segment processing (#7924)
- Make the block cache optional (#8066)
- Add release helper script to list PRs and breaking changes (#7737)
- Add experimental complete-blob-backfill flag (#7751)
- Fix reprocess queue memory leak (#8065)
- Prevent silently dropping cell proof chunks (#8023)
- Update issue template (#7938)
- fix(rate_limiter): add missing prune calls for light client protocols (#8058)
- Don't penalize peers for extending ignored chains (#8042)
- chore: Bump discv5 and remove generic DefaultProtocolId in metrics (#8056)
- Enable reconstruction for nodes custodying more than 50% of columns and instrument tracing (#8052)
- Add instrumentation to
recompute_head_at_slot(#8049) - Reduce reconstruction queue capacity (#8053)
- Remove column reconstruction when processing rpc requests (#8051)
- Another check to prevent duplicate block imports (#8050)
- Update engine methods in notifier (#8038)
- Add max delay to reconstruction (#7976)
- Add missing event in
PendingComponentspan and clean up sync logs (#8033) - Remove unused logging metrics (#7997)
- Expose functions to do preliminary slashing checks (#7783)
- Increase HTTP timeouts on CI (#8031)
- Fixed orphaned
verify_cell_proof_chunkspan. (#8026) - Remove cargo test targets, use nextest exclusively (#7874)
- chore: add comment to PendingComponents (#7979)
- Create
network_utilscrate (#7761) - Skip column gossip verification logic during block production (#7973)
- Fix http api tests ci (#7943)
- Reduce noise in
Debugimpl ofRuntimeVariableList(#8007) - Instrument tracing on block production code path (#8017)
- fix: extra fields in logs (#8009)
- Fix stuck data column lookups by improving peer selection and retry logic (#8005)
- Don't penalize peers if locally constructed light client data is stale (#7996)
- Add co-author to mergify commits (#7993)
- Fix data column reconstruction error (#7998)
- Fix incorrect prune test logic (#7999)
- Allow AwaitingDownload to be a valid in-between state (#7984)
- Maintain peers across all data column subnets (#7915)
- Simplify length methods on BeaconBlockBody (#7989)
- Add
tls-rootsfeature toopentelemetry_otlpto support exporting traces over https (#7987) - Implement
selectionsBeacon API endpoints to support DVT middleware (#7016) - Remove ttfb_timeout and resp_timeout (#7925)
- Update tracing (#7981)
- Fix data availability checker race condition causing partial data columns to be served over RPC (#7961)
- Remove
expectusage inkzg_utils(#7957) - chore: small refactor of
epochmethod (#7902) - Update to
1.6.0 alpha.6spec (#7967) - Remove dependency on target_info. (#7964)
- Impl ForkVersionDecode for beacon state (#7954)
- Avoid serving validator endpoints while the node is far behind syncing head (#7962)
- Use
rayonto speed up batch KZG verification (#7921) - Reduce backfill batch buffer size (#7958)
- Instrument
publish_blockcode path (#7945) - Fix doppelganger protection script (#7959)
- Delete
RuntimeVariableList::from_vec(#7930) - Fix data columns by range returning all columns (#7942)
- Update to spec v1.6.0-alpha.5 (#7910)
- Notify lookup after gossip data column processing resulted in an import (#7940)
- Add
BEACON_PROCESSOR_WORKERS_ACTIVE_GAUGE_BY_TYPEmetric (#7935) - Run sync tests on CI by default. (#7929)
- Add Gloas boilerplate (#7728)
- Fix RPC blocks not getting fully KZG verified (#7927)
- Fix
DataColumnsByRootrequest limit validation bug (#7928) - Use Fork variants instead of version for JsonPayload types (#7909)
- use DEFAULT_TARGET_PEERS for target peers everywhere (#7916)
- Prioritise
StatusV2overStatusV1RPC protocol (#7912) - Update lighthouse to the latest upstream libp2p and gossipsub (#7828)
- Re-assess Lighthouse's peer count for Fusaka (#7877)
- Implement tracing spans for data columm RPC requests and responses (#7831)
- Avoid unnecessary database lookups in data column RPC requests (#7897)
- Add tempo to local testnet config and update fulu kurtosis config files (#7898)
- Fulu update to spec v1.6.0-alpha.4 (#7890)
- Add
--telemetry-service-nameCLI flag for OpenTelemetry service name override (#7903) - Revise data column rpc limits and queue sizes (#7887)
- Do not filter validators by status if filter is an empty list (#7884)
- Shrink persisted fork choice data (#7805)
- Add rustfmt config with edition 2024 (#7888)
- Upgrade rust-eth-kzg to
0.8.0(#7870) - Transition network key to hex format (#7665)
- Fix malloc_utils features (sysmalloc) (#7770)
- Fix ssz formatting for
/light_client/updatesbeacon API endpoint (#7806) - Yeet env_logger into the sun (#7872)
- Try using sccache instead of disabling (#7873)
- Allow for sync state where batch is unknown (#7391)
- Update Rust Edition to 2024 (#7766)
- Disable sccache to fix Windows builds (#7867)
- Deprecate macOS-x86 binaries (#7862)
- Initial Claude.md draft (#7848)
- Re-export
context_deserialize_deriveinsidecontext_deserialize(#7852) - Fix bugs in rebasing of states prior to finalization (#7849)
- Backfill peer attribution (#7762)
- Add metrics to track beacon processor queue times (#7808)
- Add a flag to disable getBlobs (#7853)
- Instrument tracing spans for block processing and import (#7816)
- Fix Rust 1.89 compiler warnings in slasher tests. (#7844)
- Fix Makefile line continuation syntax in test-release target (#7834)
- Adjust DA checker cache size (#7825)
- Fix wrong columns getting processed on a CGC change (#7792)
- Fix: RPC test failures (#7734)
- Shuffling for 32 bit platforms (#7725)
- Fix Clippy for Rust 1.90 beta (#7826)
- Update fetch blobs metrics buckets (#7823)
- Filter dependencies from SSE logging (#7819)
- Simplify ConfigAndPreset (#7777)
- Add builder blinded_blocks v2 (#7778)
- Remove KZG verification on blobs fetched from the EL (#7771)
- Update spec tests to 1.6.0-alpha.3 (#7786)
- Bump Rust version to 1.88 (#7787)
- Skip serializing blob_schedule before Fulu (#7779)
- Feature gate arbitrary crate in the consensus types crate (#7743)
- Remove peer sampling code (#7768)
- Use SSZ by default when calling /eth/v3/validator/blocks (#7727)
- Refine delayed head block logging (#7705)
- Control span data through tracing Extensions (#7239)
- Data column custody info (#7648)
- Remove KZG verification from local block production and blobs fetched from the EL (#7713)
- Add heaptrack support (#7764)
- Serialize bpo schedule in asending order (#7753)
- Fix enr loading from disk with cgc (#7754)
- Add additional broadcast validation tests for Fulu/PeerDAS (#7325)
- Allow /validator apis to work pre-genesis (#7729)
- Add a guide to partially reconstruct historic states to Lighthouse book (#7679)
- Sync peer attribution (#7733)
- Final changes for
fusaka-devnet-2(#7655) - Improve data column KZG verification metric buckets (#7717)
- Merge remote-tracking branch 'origin/stable' into unstable
- Upgrade to c-kzg 2.1.0 and alloy-primitives 1.0 (#7271)
- Fix description of DB read bytes metric (#7716)
- Make
notifier_service::notifypub (#7708) - Update LH book for v7.1.0 (#7706)
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.0.0-aarch64-apple-darwin.tar.gz | PGP Signature |
| | x86_64 | lighthouse-v8.0.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature |
| | aarch64 | lighthouse-v8.0.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature |
| | x86_64 | lighthouse-v8.0.0-x86_64-windows.tar.gz | PGP Signature |
| System | Option | - | Resource |
| | Docker | v8.0.0 | sigp/lighthouse |