Release v1.40.0
Good day Lodestar operators! We're excited to release v1.40.0 and recommend users upgrade for the latest features and best performance. This release brings significant memory and performance improvements, especially for PeerDAS supernodes.
Breaking change: Node.js v22 is no longer supported. If you are building from source, please ensure you are using Node.js v24 (the current LTS). Docker users are not affected.
Supernode stability and overall node health have been greatly improved. You will see drastic reduction in head selection time and much greater head accuracy through an improvement of block processing latency. The underlying changes will also improve sync latency to get your nodes up to head even faster than before.
We have have added a couple of helpful api endpoints with this release. The first is targeted at operators running many validators and will allow api access to see which validator indices are connected to a node. This is also printed in the logs on an epoch basis to help infrastructure management teams with migrations and to avoid slashable incidents because of human or process reasons. We also added a nice to have feature, along with accompanying new flag --directPeers, to allow direct connection to specific peers as well as the ability to drop specific peers at runtime. You can also list the peerIds of all direct connections. You can also now query your peerDAS custody information for a running node.
We also have an exciting announcement that we are please to share with you. We have taken the first steps towards preparing Lodestar for its first Zig modules. We have been working hard on migrating the state-transition to Zig and its nearly complete. This release includes some changes necessary to prep for swapping the TypeScript state transition function over to a Zig module. While this will be a silent change for user we are excited to share that our preliminary results are excellent and node performance will be off the charts in the upcoming months. Stay tuned for more information!!!
For the full changelog, please see: v1.39.1...v1.40.0
Changelog
Features
- allow block import after NUMBER_OF_COLUMNS / 2 (#8818) (@wemeetagain)
- implement ePBS gossip topics (#8616) (@ensi321)
- async block import persistence (#8784) (@wemeetagain)
- add API and logs to display monitored validator indices (#8702) (@dik654)
- make builders non-validating staked actors (#8759) (@ensi321)
- enable specref features & remove unnecessary spec items (#8788) (@jtraglia)
- add spec references, a mapping of spec to implementation (#8778) (@jtraglia)
- support single db batch operation (#8268) (@nazarhussain)
- api: add runtime direct peer management endpoints (#8853) (@lodekeeper)
- api: add custody info endpoint for PeerDAS (#8826) (@lodekeeper)
- network: add directPeers support for GossipSub (#8831) (@catwith1hat)
Bug Fixes
- add backpressure to unfinalized block write queue (#8885) (@lodekeeper)
- await processFn to prevent buffer pool race condition (#8877) (@lodekeeper)
- consistently check block input cache before checking hot db for blocks (#8823) (@nflaig)
- remove index label from validator_monitor_prev_epoch_on_chain_balance metric (#8824) (@lodekeeper)
- make column reconstruction delay a function of slot time (#8827) (@lodekeeper)
- remove docker build stage to rebuild native dependencies (#8819) (@nflaig)
- revert changes to
getPendingBalanceToWithdraw(#8812) (@ensi321) - handle slot 0 correctly in data column sidecar RPC handler (#8783) (@qu0b)
- avoid BeaconState commit() clone() in beacon-node (#8728) (@twoeths)
- pass fork info used to compute domain to remote signer (#8776) (@nflaig)
- return reward delta instead of validator balance as sync committee rewards (#8774) (@nflaig)
- api: allow duplicate columns/blobs in publishBlock for multi-BN setups (#8849) (@lodekeeper)
- network: handle invalid peer public key in onLibp2pPeerConnect (#8829) (@lodekeeper)
- docker: reinstall dependencies on target platform (#8816) (@wemeetagain)
Performance
- optimize byteArrayEquals with hybrid loop/Buffer.compare (#8846) (@lodekeeper)
Refactoring
- update signature sets to use validator indices instead of pubkeys (#8803) (@wemeetagain)
- getBlockSlotState() (#8806) (@twoeths)
- generalize state repositories (#8732) (@twoeths)
- query ShufflingCache for shuffling data (#8743) (@twoeths)
- remove build() and async shuffling calculation (#8688) (@guha-rahul)
- simplify assertValidAttesterSlashing() assertValidProposerSlashing() (#8744) (@twoeths)
- simplify isValidBlsToExecutionChange() (#8746) (@twoeths)
Continuous Integration
- update docker sanity check to perform before publishing (#8883) (@nazarhussain)
- disable bun unit tests in code (#8851) (@philknows)
Tests
- add e2e test to ensure chainConfig values match consensus-specs (#8859) (@lodekeeper)
- increase timeouts for flaky E2E tests on slow CI (#8860) (@lodekeeper)
- increase lightclient e2e test timeout to prevent flaky failures (#8841) (@lodekeeper)
- correct lightclient committee root test for electra (#8825) (@lodekeeper)
- allow custom db path and
resumeFromDbingetDevBeaconNode(#8742) (@vedant-asati)
Maintenance
- v1.40.0 release (#8875) (@matthewkeil)
- avoid unnecessary errors when shutting down the node (#8886) (@nflaig)
- more unfinalized block writes panels in dashboard (#8884) (@wemeetagain)
- fix fastify deprecation warning about querystringParser (#8876) (@nflaig)
- drop support for node v22 (#8872) (@nflaig)
- upgrade fastify to 5.7.4 (#8842) (@lodekeeper)
- cleanup bigint buffer utils (#8863) (@lodekeeper)
- rename adhoc docker workflow to manual and reuse docker.yml (#8862) (@lodekeeper)
- add manually triggered workflow for ad-hoc Docker image tagging (#8840) (@lodekeeper)
- update bigint-buffer2 to v1.0.5 and re-enable bun CI (#8855) (@lodekeeper)
- fix lint warnings (#8854) (@lodekeeper)
- add .venv and checkpoint_states to .gitignore (#8852) (@lodekeeper)
- remove in-memory state caches (#8813) (@twoeths)
- remove stale references to merge block (#8834) (@nflaig)
- use native arm64 runners instead of qemu for docker builds (#8821) (@nflaig)
- replace bigint-buffer (#8789) (@rnfairchild)
- avoid passing CachedBeaconStateGloas to state-transition apis from beacon-node (#8833) (@twoeths)
- merge v1.39.1 back to unstable (#8820) (@philknows)
- fix lint warnings (#8815) (@nflaig)
- add axios to root package.json to fix downloading dashboards (#8807) (@nflaig)
- add assertions to check prior withdrawals against limit (#8802) (@nflaig)
- fix deploy docs workflow (#8799) (@nflaig)
- merge stable v1.39.0 back to unstable (#8798) (@philknows)
- improve archiveBlocks log (#8795) (@twoeths)
- skip Map benchmarks (#8787) (@twoeths)
- skip snappy benchmarks (#8786) (@twoeths)
- update test current file launch config to work with pnpm (#8775) (@nflaig)
- remove getAttestationsForBlockPreElectra (#8721) (@twoeths)
- deps: bump qs from 6.11.1 to 6.14.1 (#8724) (@dependabot[bot])
- deps: bump js-yaml from 4.1.0 to 4.1.1 (#8733) (@dependabot[bot])
- deps: bump axios from 1.8.2 to 1.12.0 (#8681) (@dependabot[bot])
- deps: bump systeminformation from 5.23.8 to 5.27.14 (#8734) (@dependabot[bot])
Documentation
- add AGENTS.md for AI coding assistants (#8844) (@lodekeeper)
- clarify release note step (#8800) (@philknows)