Good day everyone, we've released our latest stable v1.34.0 which includes some notable changes and optimizations that we found from Fusaka devnets which benefit mainnet today. Note that this release is NOT Fusaka ready, but is recommended for installation due to improved peering, syncing and block production. Do not be afraid of the changelog, it includes many changes that concern the Fusaka hard fork. Our summary here will include changes that are important to note for current Pectra mainnet:
-
Default peering is now increased from 100 to 200 peers. In preparation for Fusaka, having a larger group of diverse, connected peers is important and you can benefit today with minimal hardware tradeoffs. If you would like to change the peering limits, you can always do so using the
--targetPeers
flag and set a new number. -
We now persist your ENR/Network identity by default. This is important for Fusaka in order to have reliable peering for data custodianship in PeerDAS. Your network identity will no longer change upon restart, but can be set via the
--persistNetworkIdentity
flag to false. -
Syncing has been improved with optimizations such as #8166 which avoids being rate limited while syncing.
-
A fix has been included for
getHeader
timeouts in rare cases where the common block body production would delay the call in the slot. A special thanks to celticwarrior from EthStaker and to the solo staker community for helping us find and squash bugs!
The full changelog can be found below, but note that most changes here pertain to merging Fusaka features into our trunk branch.
Changelog
Features
- track libp2p streams (#8304) (@twoeths)
- update blobs endpoint to use versioned_hashes instead of indices as filter (#8264) (@nflaig)
- serve data columns by root for finalized epochs (#8250) (@nflaig)
- add type support for Bun (#8288) (@nazarhussain)
- add panels to track consensus block value (#8286) (@nflaig)
- score attestations for block by profitability (#8016) (@nflaig)
- fromHexInto() api (#8275) (@twoeths)
- track kzg proofs verification time (#8267) (@twoeths)
- increase target peers by default to 200 (#8272) (@philknows)
- unknown block sync e2e post electra only (#8245) (@twoeths)
- print out blob parameters if BPO fork is activated (#8253) (@nflaig)
- add Fulu zebra banner (#8235) (@ClockworkYuzu)
- improve the db storage for data column sidecar (#8206) (@nazarhussain)
- implement PeerBalancer for UnknownBlockSync (#8219) (@twoeths)
- add warning log if slots are skipped by validator client (#8224) (@nflaig)
- add gloas fork definition (#8222) (@ensi321)
- stricter builder circuit breaker (#8205) (@nflaig)
- log when publishing to 0 data column peers (#8195) (@wemeetagain)
- self rate limiter (#8185) (@twoeths)
- clean up fulu peer connected event (#8157) (@matthewkeil)
- avoid rate limit syncing (#8166) (@twoeths)
- bump spec test to
v1.6.0-alpha.4
. Add data columns to fork-choice spec test (#8170) (@ensi321) - reduce peer score if they send mismatch DataColumnSidecars (#8167) (@twoeths)
- run
lodestar
root binary from any directory (#8154) (@nazarhussain) - introduce finalProcessEpoch() (#8086) (@twoeths)
- add getBlobs endpoint (#8087) (@nflaig)
- add PeerDAS Grafana dashboard (#7992) (@KatyaRyazantseva)
- broken status get peers (#8063) (@matthewkeil)
- remove advertised custody (#8059) (@matthewkeil)
- ensure enough peers on all subnets (#8057) (@twoeths)
- support status v1 post-fulu (#8041) (@matthewkeil)
- improve range sync in fulu (#7746) (@twoeths)
- earliest available slot (#7959) (@matthewkeil)
- resolve availability using recover_matrix for peerDAS (#7940) (@twoeths)
- data_column_sidecar sse event support (#7953) (@nazarhussain)
- add endpoint to retrieve data column sidecars (#7952) (@nflaig)
- async kzg proof verification (#7936) (@wemeetagain)
- update dataColumnSidecarsByRoot to new spec (#7782) (@dguenther)
- add peerDAS computation metric (#7748) (@KatyaRyazantseva)
- offload cell proof computation from beacon node (#7686) (@hughy)
- support min request epoch in dataColumnSidecarsByRoot (#7743) (@dguenther)
- validate data column sidecars according to spec (#7719) (@dguenther)
- peerDAS - fetch blobs from EL in unknownBlock (#7724) (@dguenther)
- prune expired data column sidecars (#7717) (@hughy)
- peerDAS - implement distributed blob publishing (#7679) (@dguenther)
- peerDAS - initial beacon metrics (#7697) (@dguenther)
- peerDAS - implement validator custody (#7640) (@dguenther)
- add engine_getBlobsV2 execution API (#7675) (@hughy)
- shared CustodyConfig on main thread and network thread (#7632) (@twoeths)
- peerdas - ensure at least n peers per sampling group (#7274) (@twoeths)
Bug Fixes
- log missing columns (#8315) (@matthewkeil)
- use prettyPrintIndices for logging (#8298) (@maishivamhoo123)
- add slot and epoch validation to epoch committees endpoint (#7941) (@bomanaps)
- do not throw error when archive 0-blob block (#8319) (@twoeths)
- do not attempt to reconstruct builder blocks (#8317) (@nflaig)
- invalid bucket id for finalized dataColumnSidecar (#8312) (@nazarhussain)
- deserialization of db repository keys (#8310) (@nazarhussain)
- the data column sidecars behavior for unavailable sidecars (#8251) (@nazarhussain)
- add disconnectThreshold for e2e tests (#8301) (@twoeths)
- defer common block body production until next event loop (#8285) (@nflaig)
- self rate limiter to handle dead requests (#8295) (@twoeths)
- track execution engine getBlobs requests (#8274) (@twoeths)
- do not create data column sidecars if block has no blobs (#8277) (@nflaig)
- move
MAX_REQUEST_BLOCKS
constants to config (#8262) (@nflaig) - select correct ssz type when persisting invalid attestations (#8257) (@nflaig)
- choose more profitable block only based on execution payload value (#8246) (@nflaig)
- apply correct count limit in blob sidecars by range (#8248) (@nflaig)
- use CheckpointBalancesCache to help update cgc (#8243) (@wemeetagain)
- use async variant of verifyCellKzgProofBatch (#8234) (@nflaig)
- return subcommittee assignments from state sync committees endpoint (#8231) (@nflaig)
- handle NullBlockInput full data columns in UnknownBlockPeerBalancer (#8229) (@twoeths)
- use correct self fate limited request error code (#8228) (@wemeetagain)
- move fulu constants to preset/config to be spec compliant (#8217) (@nflaig)
- typo in serializeBlobsBundle() (#8218) (@twoeths)
- correctly parse validator indices when querying state balances (#7951) (@bomanaps)
- correct pending block status in unknownBlockParent event handler (#8211) (@twoeths)
- head sync failed due to retrying with a more up-to-date peer (#8203) (@twoeths)
- do not pick out-of-date peer to retry head sync (#8201) (@twoeths)
- unbreak sim and e2e tests (#8199) (@wemeetagain)
- make the runner script posix compliant (#8197) (@nazarhussain)
- support dual stack on same port (#8190) (@wemeetagain)
- return correct multiaddrs in getNetworkIdentity endpoint (#8189) (@wemeetagain)
- only subscribe to sampled subnets (#8181) (@twoeths)
- split getBlobs into V1 and V2 implementations (#8140) (@matthewkeil)
- misleading comment in MAX_BATCH_PROCESSING_ATTEMPTS (#8180) (@twoeths)
- handle bad response of 0 block from peer (#8150) (@twoeths)
- only start sending StatusV2 requests after fulu (#8169) (@nflaig)
- fulu logs peer manager (#8158) (@matthewkeil)
- revert blob metric changes (#8175) (@matthewkeil)
- skip custody groups computation if all groups are custodied (#8172) (@nflaig)
- peer id check in
initPrivateKeyAndEnr
(#8165) (@ensi321) - use minimum custody in log (#8142) (@matthewkeil)
- remove git from Dockerfile (#8160) (@matthewkeil)
- log pre fulu archive (#8137) (@matthewkeil)
- track rate limited errors (#8116) (@twoeths)
- fulu fork guards (#8125) (@matthewkeil)
- update cgc during genesis and use finalized state (#8105) (@nflaig)
- handle case if engine or builder is pending with the other disabled (#8113) (@nflaig)
- restore chain.archiveBlobEpochs cli flag (#8129) (@wemeetagain)
- remove stray event handler on network close (#8127) (@wemeetagain)
- update PeerDAS log level (#8117) (@KatyaRyazantseva)
- update publish block/column order (#8121) (@matthewkeil)
- impl of BlockInputDataColumns type (#8122) (@matthewkeil)
- select status response container based on version (#8119) (@nflaig)
- log peer status error (#8106) (@matthewkeil)
- use state slot instead of clock slot before gathering electra metrics (#8102) (@nflaig)
- remove node custody requirement (#8099) (@nflaig)
- dont reduce cgc (#8096) (@matthewkeil)
- increase MAX_BATCH_PROCESSING_ATTEMPTS (#8037) (@twoeths)
- remove only connect flags (#8046) (@twoeths)
- only process chain segment with a success downloaded batch (#8032) (@twoeths)
- add electra to cached blob data fork check (#8004) (@nflaig)
- validate data_column_sidecar before add to cache (#7955) (@twoeths)
- add peerdas inclusion proof metric (#7898) (@KatyaRyazantseva)
- only announce columns if fulu is scheduled in config (#7964) (@nflaig)
- column announcement before fork transition (#7943) (@matthewkeil)
- update getBlobsV2 request duration metric (#7944) (@KatyaRyazantseva)
- only use proposer lookahead from state if epoch is post fulu (#7939) (@nflaig)
- columns by root request length (#7917) (@matthewkeil)
- erigon getblobsv2 bug in response (#7912) (@matthewkeil)
- correct reference to MIN_EPOCHS for data columns (#7788) (@dguenther)
- genesis sync in peerDAS (#7760) (@twoeths)
- consider NODE_CUSTODY_REQUIREMENT in validator custody computation (#7733) (@hughy)
- increment seq_number on metadata cgc changes (#7752) (@hughy)
- peerDAS - Fix name of
custody_group_count
in Fulu metadata (#7751) (@dguenther) - disable update to advertised CGC (#7736) (@hughy)
- update ENR with new cgc (#7737) (@dguenther)
- always add CGC to ENR (#7738) (@dguenther)
- peerDAS - fix the loop bound in fetchUnknownBlockRoot (#7466) (@twoeths)
- peer count per sampling group - peerDAS (#7721) (@twoeths)
- handle empty partial download - peerDAS (#7720) (@twoeths)
- use persistent-merkle-tree v1.1.0 for peerDAS (#7705) (@twoeths)
- peerDAS - support MetadataV3 before fulu (#7700) (@dguenther)
- peerdas-devnet-6 (#7696) (@twoeths)
- improve error message when validating blobs len (#7695) (@twoeths)
- import path of networkConfig (#7694) (@twoeths)
- peerDAS - update c-kzg to fix kzg spec test (#7642) (@dguenther)
- peerDAS - update MAX_REQUEST_DATA_COLUMN_SIDECARS (#7625) (@dguenther)
- peerDAS - fix mismatch error when downloading columns at synced time (#7467) (@twoeths)
- bug for skipping download no relevant peers (#7459) (@matthewkeil)
Refactoring
- rename related to sync committee indices (#8313) (@ensi321)
- move fork-choice metrics to fork-choice package (#8265) (@KatyaRyazantseva)
- optimize event listener count checks (#8293) (@nflaig)
- rename variables / functions related to committee vs. validator indices (#7687) (@nflaig)
- remove cpu features direct dependency (#8261) (@nazarhussain)
- block proposal cleanup (#8155) (@wemeetagain)
- clean up fulu fork guards (#8162) (@matthewkeil)
- fulu hex helpers (#8163) (@matthewkeil)
- update enr comment for cgc (#8141) (@matthewkeil)
- clean up ReqRespBeaconNode fulu changes (#8144) (@matthewkeil)
- remove stale peerdas lines and simple renamings (#8128) (@matthewkeil)
- earliestSlotAvailable -> earliestAvailableSlot (#8120) (@matthewkeil)
Tests
- upgrade sim tests to use post-electra images (#8303) (@nazarhussain)
- error from sim test is swallowed in
tableReporter
(#8223) (@ensi321) - disable DEBUG logs by default when running sim tests (#8186) (@nflaig)
- unit tests and e2e tests of peerDAS branch (#8173) (@twoeths)
- peerdas fix interop config (#8145) (@matthewkeil)
Maintenance
- v1.34.0 release (#8344) (@philknows)
- fix lint (#8323) (@matthewkeil)
- update minimal_config to latest spec (#8232) (@barnabasbusa)
- update
payload_attributes
event test data (#8308) (@nflaig) - upgrade @biomejs/biome to newer type aware version (#7982) (@nazarhussain)
- add script to launch up local kurtosis testnet (#8070) (@kevaundray)
- remove error stacktrace from peer disconnected during identify protocol logs (#8289) (@nflaig)
- fix broken types for
datastore-level
(#8287) (@nazarhussain) - track req/resp outgoing request error reason (#8283) (@twoeths)
- remove per committee attestation routine (#8266) (@nflaig)
- track DataColumnSidecar errors on Grafana (#8259) (@twoeths)
- remove skipped fulu constants in config test (#8252) (@nflaig)
- move peer id file error due to file not found to debug (#8230) (@nflaig)
- remove redundant unknownBlockParent event emit (#8213) (@twoeths)
- update the logs during identify (#8188) (@nazarhussain)
- post-merge peerDAS branch review (#8187) (@nflaig)
- fulu nits (#8164) (@matthewkeil)
- clean up block input types and comments (#8161) (@matthewkeil)
- remove else condition and TODO from importBlock for metrics (#8138) (@matthewkeil)
- clean up fulu types (#8146) (@matthewkeil)
- restore
isForkBlobs
fork guard alias forisForkPostDeneb
(#8135) (@nflaig) - refactor custody config initialization (#8126) (@wemeetagain)
- use number for cell indices (#8131) (@wemeetagain)
- make NetworkConfig a simple object (#8124) (@wemeetagain)
- merge v1.33.0 stable back to unstable (#8118) (@philknows)
- run beacon api spec tests against v4.0.0-alpha.0 (#7965) (@nflaig)
- cleanup event handlers for import block (#7956) (@nazarhussain)
- add engine_getBlobsV2 metrics (#7854) (@KatyaRyazantseva)
- add peerDAS custody group count metric (#7938) (@KatyaRyazantseva)
- peer das lint (#7716) (@matthewkeil)
- add nextfork lodestar workflow (#7683) (@chiemerieezechukwu)
- add more logs and comments (#7460) (@twoeths)
- deps: bump cipher-base from 1.0.4 to 1.0.6 (#8241) (@dependabot[bot])
- deps: bump tmp from 0.2.1 to 0.2.4 (#8123) (@dependabot[bot])
Documentation
- add note to
--persistNetworkIdentity
for resetting ENR and cgc (#8159) (@matthewkeil) - update permalink and comment (#8134) (@matthewkeil)