Releases: lidofinance/core
v3.0.0-rc.1 (Hoodi Testnet)
Early and WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
Full Changelog: v3.0.0-beta...v3.0.0-rc.1
Lido V2.2 release
LIPs implemented
Audits
- 09-2025 Statemind Triggerable Withdrawals and CSM v2 Audit (LIP-30, LIP-29)
- 09-2025 Ackee Blockchain Lido Triggerable Withdrawals Security Audit (LIP-30)
PRs included
- chore: fix tests in master by @tamtamchik in #894
- docs: update readme status badges by @tamtamchik in #895
- feat: Negative rebase Sepolia integration tests by @tamtamchik in #862
- feat: add script that allows pass pattern of test files by @BATMAH69 in #909
- fix: refactor hardhat config file by @tamtamchik in #921
- feat: fix mainnet integration tests by @tamtamchik in #941
- fix: negative rebase tests on develop by @tamtamchik in #943
- chore: migrate foundry to stable by @tamtamchik in #946
- feat: improve transactions logging by @tamtamchik in #944
- test: VEBO tests restored from legacy (val-1556) by @Amuhar in #917
- feat: local devnet by @eddort in #896
- fix: update broken link CONTRIBUTING.md by @dramarereg in #956
- fix: forking URL interference with unit tests by @tamtamchik in #960
- SR 1.5 Upgrade for Sepolia by @vp4242 in #972
- hotfix: local devnet, foundry 1.0, improved logging, VEBO unit tests by @tamtamchik in #947
- Hoodi deployment by @avsetsin in #985
- Add Sandbox module address to deployed-hoodi.json by @avsetsin in #988
- feat: hoodi deployment by @tamtamchik in #987
- feat: vaults backports by @tamtamchik in #989
- feat: print forge version by @tamtamchik in #991
- Typos fix by @MaxweLL22-22 in #961
- feat: reuse eip7002 mock in integration tests by @tamtamchik in #999
- ci: pin coverage action by @tamtamchik in #1022
- wip: temporary implementation for TW by @eddort in #1035
- VEB delivering requests by parts by @Amuhar in #1026
- fix: refund receipient added & exit type & extract val requests parsing by @Amuhar in #1051
- feat: tw nor implementation by @eddort in #1049
- Daily exit limit for Validator Exit Bus by @Amuhar in #1046
- Feat: TW deploy script by @F4ever in #939
- feat: update deploy params for pectra by @avsetsin in #1057
- Exit limits refactoring by @Amuhar in #1060
- feat: TW NOR impl by @eddort in #1067
- Feat: triggerable exits NOR reporting window by @eddort in #1080
- chore: rename twg contract by @F4ever in #1082
- Triggerable exits gateway by @Amuhar in #1070
- Feat/exit delay verifier fixes by @mkurayan in #1084
- fix: exclude exitType & renaming by @Amuhar in #1085
- feat: remove consolidation support from withdrawal vault by @mkurayan in #1086
- New way to store delivery history in VEB by @Amuhar in #1088
- Feat/triggerable exits fix verifier by @mkurayan in #1089
- fix: exclude max batch size check from unpack/triggerExits methods by @Amuhar in #1091
- Description to external methods & constants by @Amuhar in #1092
- Improved veb coverage by @Amuhar in #1095
- triggerExits coverage by @Amuhar in #1096
- feat: TW NOR refactoring by @eddort in #1097
- Pause coverage by @Amuhar in #1098
- chore: Fix typo in README.md by @ViacheslavKhovrov in #1099
- cover length & contract version check by @Amuhar in #1100
- increase test coverage in twg& veb & review fix by @Amuhar in #1104
- fix: integration tests for multi-delivering by @Amuhar in #1109
- Feat/triggerable exits refactor by @krogla in #1108
- fix: tw devnet 02 deploy by @eddort in #1110
- Update .prettierrc by @loga4 in #1112
- Fix/veb review by @Amuhar in #1114
- Fix/veb twg naming by @Amuhar in #1115
- fix: assert pubkey length on 7002 request by @krogla in #1117
- exit delay verifier improvments by @mkurayan in #1116
- ExitRequestsLimit -> ExitRequestsLimitExceeded by @Amuhar in #1118
- fix: veb description by @Amuhar in #1120
- Feat: refactor NOR and SR tw by @eddort in #1119
- feat: tw remove stuck item type ao by @eddort in #1107
- maxBatchSize != 0 by @Amuhar in #1121
- fix: update allowance for NOR to 0 after removing stuck keys logic by @eddort in #1124
- module notification wrap in try/catch by @Amuhar in #1125
- Feat/triggerable exits delay verifier improvements by @mkurayan in #1122
- fix: veb limits consume & tests for atomic history by @Amuhar in #1128
- Rename error & try catch for notification by @Amuhar in #1127
- fix: refund test by @Amuhar in #1130
- MAX_VALIDATORS_PER_BATCH -> MAX_VALIDATORS_PER_REPORT by @Amuhar in #1131
- Dont limit oracle by common veb limit by @Amuhar in #1132
- Feat/triggerable exits withdrawal vault permissions by @mkurayan in #1129
- Atomic exit requests unpack by @mkurayan in #1126
- Veb refactoring by @Amuhar in #1133
- Exit limits utils lib : require -> revert by @Amuhar in #1134
- refactor: pass single property instead of entire object to inner func… by @mkurayan in #1135
- feat: fix linter problems by @mkurayan in #1136
- feat: add test for trigger full withdrawals by @mkurayan in #1139
- Fix veb methods description by @Amuhar in #1140
- oracle is allowed to update delivery time if report was not submitted earlier by @Amuhar in #1145
- Ignore exit delay report fail by @mkurayan in #1147
- feat: upgrade StakingRouter contract to version 3 and update related … by @eddort in #1148
- feat: use eip7002 contract in integration tests by @mkurayan in #1146
- Feat/sr 2.0 update comments and naming by @mkurayan in #1138
- feat: move try/catch from twg to sr by @eddort in #1143
- refactor: swap IncorrectFee args in WithdrawalVaultEIP7002 by @mkurayan in #1150
- fix: unit/intergation tests by @Amuhar in #1149
- fix: spaces by @Amuhar in #1151
- refactor: NOR, SR and AO refactoring by @eddort in #1152
- feat: reimplement GIndex test in ts by @eddort in #1158
- test: improve unit test coverage for SR, NOR and AO by @eddort in #1156
- feat: add withdrawal vault integration tests...
Lido pre-V3 testnet-2 refresh
Early and WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
Full Changelog: v3.0.0-alpha...v3.0.0-beta
Lido pre-V3 testnet-1 snapshot
What's Changed
Early and WIP protocol implementation for the future Lido V3 upgrade
Full Changelog: v2.1.0...v3.0.0-alpha
Lido V2.1 release
LIPs imlemented
Audits
- 10-2024 MixBytes On-chain Audit of Community Staking Module (LIP-23, LIP-25, LIP-26)
- 10-2024 Ackee Blockchain Audit of Staking Router v2 (LIP-25)
PRs included
- Add check against underflow by @claudijd in #772
- chore(deps): bump requests from 2.30.0 to 2.31.0 by @dependabot in #773
- Add forge tests for Math256 and SignatureUtils by @claudijd in #756
- Add forge tests for unstructured storage by @claudijd in #774
- build: upload ABIs to a published release by @madlabman in #777
- chore: replace action-gh-release with gh cli by @madlabman in #778
- chore(deps-dev): bump certifi from 2023.5.7 to 2023.7.22 by @dependabot in #784
- chore(deps-dev): bump aiohttp from 3.8.4 to 3.8.5 by @dependabot in #783
- feat(scratch deploy): mvp of local scratch deployment by @arwer13 in #790
- chore(deps-dev): bump urllib3 from 2.0.2 to 2.0.7 by @dependabot in #800
- Scratch deploy: capability to set WithdrawalQueue baseUri by @arwer13 in #805
- try forge github action to run anvil by @arwer13 in #808
- chore(deps-dev): bump eth-abi from 4.0.0 to 4.2.0 by @dependabot in #811
- chore(deps-dev): bump aiohttp from 3.8.4 to 3.9.0 by @dependabot in #812
- Add CI workflow to do local scratch deployment by @arwer13 in #807
- Sync master with develop by @TheDZhon in #802
- Doc: readme refresh by @TheDZhon in #814
- Doc: update readme by @TheDZhon in #815
- Fix: typos by @vuittont60 in #817
- chore(deps-dev): bump aiohttp from 3.9.0 to 3.9.2 by @dependabot in #819
- chore(deps-dev): bump pycryptodome from 3.17 to 3.19.1 by @dependabot in #816
- Sepolia deployment and deposit contract adapter by @vp4242 in #820
- Update pyproject licence by @tamtamchik in #822
- Sepolia deposit adapter implementation by @vp4242 in #821
- Update deploy script to include SepoliaDepositAdapter contract upgrade by @vp4242 in #824
- Feat/clone nor simpledvt holesky by @krogla in #801
- fix: upd deployed-mainnet.json w/ simpledvt by @krogla in #825
- new SimpleDVT module by @krogla in #826
- update Readme: repo archived by @mymphe in #840
- feat: add Simple DVT to scratch deploy by @tamtamchik in #845
- docs(readme): add repovation disclaimer by @mymphe in #844
- sync: core repo master by @tamtamchik in #843
- ci: fix master coverage by @tamtamchik in #855
- sync: develop from core repo by @tamtamchik in #854
- Update README.md by @mymphe in #856
- test: Second opinion oracle test by @tamtamchik in #857
- fix: remove PostTotalShares event checks by @tamtamchik in #866
- build(deps): bump secp256k1 from 4.0.3 to 4.0.4 by @dependabot in #867
- chore: Sync SR1.5 branch with the latest develop by @tamtamchik in #858
- feat: Staking Router 1.5 by @tamtamchik in #860
- SR 1.5 by @krogla in #879
New Contributors
- @claudijd made their first contribution in #772
- @vuittont60 made their first contribution in #817
- @vp4242 made their first contribution in #820
- @tamtamchik made their first contribution in #822
Full Changelog: v2.0.0...v2.1.0
Lido V2 release
What's Changed
- chore(security): Add slither by @dgusakov in #447
- chore(security): Add storage layout linter by @dgusakov in #449
- feat: assert-bytecode by @madlabman in #454
- Fix storage layout linter by @madlabman in #456
- fix: remove missing assert-git-changes file usage by @madlabman in #457
- Linters fixes by @madlabman in #458
- One more fix for linters 🐇🕳 by @madlabman in #459
- Add regression test on malicious stETH recovery by
recoverERC721
(selfOwnedStETHBurner) by @TheDZhon in #444 - Feature/validator exit bus by @arwer13 in #453
- Staking router recycle by @krogla in #464
- feat: add lido rewards distribution by @rkolpakov in #466
- Update DepositSecurityModule to be compatible with StakingRouter by @Psirex in #465
- Node operators rewards distribution by @bulbozaur in #467
- Staking router/rewards distribution by @rkolpakov in #469
- remove recycle / add deposits / add transfer balance by @loga4 in #468
- Staking router deposits allocation by @Psirex in #470
- staking router events, errors, fees setter by @bulbozaur in #471
- update roles and remove outdates by @bulbozaur in #473
- fix: rework variable names & add max fee for lido contract by @rkolpakov in #474
- Staking route and Lido refactor by @krogla in #476
- Staking router module status by @krogla in #477
- feat: remove some funcs shrinking Lido bytecode sz by @TheDZhon in #479
- NodeOperatorsRegistry update for StakingRouter by @Psirex in #480
- StakingRouter internal review fixes by @Psirex in #481
- Parallel testing by @folkyatina in #462
- update deployment from scratch by @arwer13 in #441
- feat: add bunker mode flag for later use by @folkyatina in #483
- LidoOracleNew, ValidatorExitBus: initial rough version of hash consensus by @arwer13 in #485
- Restoring Withdrawal tests by @folkyatina in #484
- feat: add AccessControl to managing ACL in WQ by @folkyatina in #487
- feat: sanity check for bufferedEtherReserve by @folkyatina in #490
- ci: upd actions by @madlabman in #491
- Feat: implement the ERC2612 (Permit) extension for StETH by @TheDZhon in #486
- staking router tests and fixes by @bulbozaur in #496
- unit test + coverage + fixes for Lido.sol by @loga4 in #493
- Staking router/allocation lib tests by @mymphe in #489
- NodeOperatorsRegistry full unit tests coverage & fixes by @Psirex in #488
- fix: reward distribution array by @krogla in #494
- Reduce NodeOperatorsRegistry contract size by @Psirex in #498
- test: allocating between modules with different params by @mymphe in #501
- Fix: const gas
calculateCurrentStakeLimit
ver by @TheDZhon in #500 - fix: keys allocation fix by @bulbozaur in #502
- Tests: trivial fixes about
permit
andStakingRouter
by @TheDZhon in #504 - Staking router external params to uint256 by @loga4 in #505
- Staking Router post-audit fixes by @Psirex in #497
- Staking router by @loga4 in #463
- Fix scratch deploy for shapella devnet-3 by @arwer13 in #503
- Hardhat task to generate userdoc artifacts by @manneredboor in #507
- Staking Router: fix typos, add base precision to Lido views by @arwer13 in #508
- Optimize
MinFirstAllocationStrategy
by @Psirex in #511 - feat: add possibility to change recipient by @rkolpakov in #515
- WithdrawalQueue improvements after the internal review by @folkyatina in #506
- Oracle upgrade by @skozin in #495
- feat: use unstructured AccessControl everywhere by @folkyatina in #519
- Staking router audit fixes by @krogla in #517
- Staking router audit fixes (Shapella-upgrade) by @folkyatina in #518
- Add methods for batch withdrawals requests and claiming by @Psirex in #513
- Feat/use only id externally by @mymphe in #510
- Refactor: allocation tests by @mymphe in #520
- Fix failed coverage tests by @Psirex in #524
- Abolish interface contracts by @arwer13 in #521
- Feat: positive rebase limiter by @TheDZhon in #514
- Fix missing gas reports for contracts with the new Solidity version by @Psirex in #525
- Versioned.sol inheritance by @bulbozaur in #530
- Feat: Staking router audit fix2 (shapella-upgrade) by @TheDZhon in #533
- Use overrides for eth-gas-reporter instead of a forked repo by @Psirex in #534
- Feature/sanity checks soft limit (Sanity Checks Registry subPR) by @TheDZhon in #535
- Oracle upgrade: legacy oracle compatibility by @skozin in #522
- Feat: use timestamp instead of blockNumber for WithdrawalRequest by @TheDZhon in #537
- Fix: move eip712 for stETH to unstructured storage by @TheDZhon in #536
- Remove POC version of new oracles (LidoOracleNew, ValidatorExitBus) by @arwer13 in #541
- Fix: make WithdrawalVault versioned by @TheDZhon in #545
- lidoLocator update tests by @bulbozaur in #538
- Unify solidify version pragma for contracts in common by @arwer13 in #543
- Feat: LidoLocator behind Proxy by @mymphe in #539
- Feature/plain coverage test fix by @bulbozaur in #548
- Oracle report sanity checks by @Psirex in #529
- Feat: new accounting oracle report for Lido (feature/shapella-upgrade) by @TheDZhon in #549
- BytesLib totally removed! by @krogla in #544
- Add search views to find finalizable request in WithdrawalQueue by @folkyatina in #546
- Oracle improvements & still-missing features by @skozin in #542
- Refactor/withdrawal discount by @folkyatina in #552
- Refactor/recipient to owner by @folkyatina in #554
- fix oracle test setup by @bulbozaur in #556
- Use OpenZeppelin's
SafeCast
lib across the project by @Psirex in #559 - Make ValidatorExitBusOracle pausable by @arwer13 in #553
- Lido: restore getFee and getFeeDistributions by @arwer13 in #561
- Feat: refactor oracle report for Lido by @TheDZhon in #555
- feat: add oracle daemon config contract by @rkolpakov in #558
- LidoLocator: safetyNetsRegistry -> oracleReportSanityChecks by @arwer13 in #564
- Oracle: support "fast lane" member subset by @skozin in #563
- Feat: WithdrawalRequestNFT by @Psirex in #560
- Feat: burn ...
Lido 2.0 rc2 release
What's Changed
Updates Lido 2.0 rc1 release.
High-level overview
- Certora report's small fixes by @Psirex in #731
- Add event tests by @Jeday in #739
- Fix: sr redundant variable by @loga4 in #741
- Fix: typos by @loga4 in #736
- Fix: oracle daemon config update by @loga4 in #737
- Fix: remove redundant require by @loga4 in #735
- Fix: summary desc typo by @loga4 in #742
- Fix: too high simulated share rate by @TheDZhon in #730
- Doc: churn limit explanations by @TheDZhon in #748
- ERC4906 implementation for withdrawal nft by @folkyatina in #733
- WQ: Replace _batches parameter with _lastIdToBeFinalized for
finalize()
by @folkyatina in #738 - fix storage slot by @loga4 in #753
- Make BatchMetadataUpdate touch more requests for further convenience by @folkyatina in #754
- Docs: dsm churn limit by @TheDZhon in #755
- Fix: improve UX of findCheckpointHints by @folkyatina in #750
- Statemind minor fixes round 2 by @Psirex in #751
- Fix: shapella upgrade from rc1 to rc2 by @TheDZhon in #732
Full Changelog: v2.0.0-rc.1...v2.0.0-rc.2
Lido 2.0 rc1 release
What's Changed
Updates Lido 2.0 rc0-hotfix release.
High-level overview
- Fix/mixbytes audit by @loga4 in #713
- Fix: HashConsensus fast lane calc when consensus is disabled by @skozin in #711
- Fix (SignatureUtils): check the EIP-1271 call result more strictly by @skozin in #714
- Add missing nonce updates to NodeOperatorsRegistry by @Psirex in #715
- Fix/lido fee distribution by @arwer13 in #717
- Docs and other minor improvements by @skozin in #716
- fix: check stuck+exited<=deposited by @krogla in #718
- Fix (AccountingOracle): extra data submission order check by @skozin in #712
- Fix: stake limit resume handling by @TheDZhon in #721
- Fix: make isLimitReached more coherent by @TheDZhon in #710
- Statemind report minor fixes by @Psirex in #720
- Fix: discard report processing on lost consensus by @skozin in #708
- Fix: remove unused methods in UnstructuredRefStorage lib by @loga4 in #723
- Fix: check zero admin in OracleReportSanityChecker constructor by @loga4 in #724
- Fix: typos by @loga4 in #728
- Fix: restrict staking module name length to 31 bytes by @loga4 in #725
- Fix: check nor active status by @loga4 in #727
- Fix: resume pause double check by @loga4 in #726
- fix: remove int64 limitations by @krogla in #719
- transfer events order by @krogla in #722
- Add requirement comments for
IStakingModule
by @Psirex in #729
Full Changelog: v2.0.0-rc.0-hotfix...v2.0.0-rc.1
v2.0.0-rc.0-hotfix
What's changed
Hotfixes Lido 2.0 rc0 release.
High-level overview
- Fix: finalizeUpgrade_v4 for legacy oracle in #705
- Fix: report processor view in #706
- Add test to check correct values on stuck/refund updates in #703
Full Changelog: v2.0.0-rc.0...v2.0.0-rc.0-hotfix
Lido 2.0 rc0 release
What's Changed
Updates Lido 2.0 beta3 release.
High-level overview
- Fix: Lido.handleOracleReport reorder burn and fee distribution in #690
- Fix: DSM.canDeposit for unknown module id in #689
- Accounting oracle: remove an erroneous and excess check in #692
- Fix: positive rebase limiter burn in #696
- HashConsesnsus: docs improvements in #697
- Set
lastDepositAt
andlastDepositBlock
on the staking module addition in #701 - Refactor: remove some dead code from MemUtils in #702
- Fix gas estimation for methods with try/catch of StakingRouter in #698
- Fix NOR stuck/refund in #693
- Lots of new tests (WithdrawalQueue gas estimation, NodeOperatorsRegistry happy path, LegacyOracle tests)
Full Changelog: v2.0.0-beta.3...v2.0.0-rc.0