Releases: lidofinance/core
v3.0.1
Audits
- 01-2026 Sigma Prime Lido BLS Library Security Audit
- 01-2026 Certora Lido V3 Security Audit
- 01-2026 MixBytes Lido V3 Security Audit
- 01-2026 Consensys Diligence Lido V3 Security Audit
What's Changed
- feat: bls bytes verification by @Jeday in #1600
- feat: bytes verification hardening by @TheDZhon in #1620
- test: soft-launch validator on new PDG by @failingtwice in #1634
- fix: apply Sigma Prime recommendations on BLS by @tamtamchik in #1630
- fix: mock voting by @tamtamchik in #1619
- ci: state-mate by @tamtamchik in #1648, #1649
- chore: deploy phase2 PDG by @dry914 in #1633
- chore: better mainnet identification by @tamtamchik in #1640
Full Changelog: v3.0.0...v3.0.1
v3.0.0
Whitepaper & LIPs implemented
- Lido V3 Whitepaper
- LIP-31: Expanding stETH liquidity layer with over-collateralized minting
- LIP-32: Sanity Checks for stVaults
Audits
- 12-2025 Certora Lido V3 Security Audit
- 12-2025 Certora Lido V3 Formal Verification
- 12-2025 MixBytes Lido V3 Security Audit
- 12-2025 Consensys Diligence Lido V3 Security Audit
PRs included
- epic: stVaults, Lido V3 Release #874, #1584
- feat: add proper upgrade to version 3 in Lido by @folkyatina in #882
- feat: staking vault init by @loga4 in #886
- feat: devnets and testnets deployment by @tamtamchik in #890, #907, #934, #982, #1033, #1186
- feat: VaultHub by @folkyatina in #892
- feat: UX suggestions by @DiRaiks in #893
- feat: add wstETH to locator by @tamtamchik in #898
- feat: factory upgrade immutable by @loga4 in #901, #920
- feat: dashboard recovery by @Jeday in #908
- feat: make VaultHub pausable, pause implementation by @folkyatina in #914
- feat: Dashboard UX updates by @DiRaiks in #915
- feat: local devnet with Perkta support for vaults by @tamtamchik in #919
- feat: pausable beacon chain deposits for vaults by @tamtamchik in #922
- feat: Simplify beacon chain deposit processing by @failingtwice in #925
- feat: Granular permissions for operations in Dashboard/Delegation by @failingtwice in #929
- feat: PredepositGuarantee by @failingtwice in #932
- feat: vaults validators triggerable exits by @tamtamchik in #933, #1030
- feat: enhance PredepositGuardian with events, errors, fix bugs by @DiRaiks in #936
- feat: override withdrawableEther in Delegation contract by @DiRaiks in #938
- feat: PDG BLS by @Jeday in #945
- feat: healthy ratio by @tamtamchik in #955
- feat: detach Accounting from VaultHub by @vp4242 in #957
- feat: OperatorsGrid by @loga4 in #962, #1041
- feat: separate mint shares by @vp4242 in #966
- feat: VaultHub detach by @loga4 in #973
- feat: merkle oracle integration by @vp4242 in #977
- feat: upgrade on forking by @arwer13 in #978
- feat: self-impose locks on StakingVault by @failingtwice in #979
- feat: PDG gIndex on slot change by @Jeday in #980
- feat: remove curator by @folkyatina in #993
- feat: move part of the regression integration tests from scripts repo by @arwer13 in #1000
- feat: partial force rebalance by @folkyatina in #1003
- feat: vaults batch info by @vp4242 in #1008
- feat: rebalance shortfall by @ev-d in #1013
- feat: Separate vaultHub auth and depositor by @loga4 in #1017
- feat: added permissions for new actions and unit tests by @tamtamchik in #1020
- feat: add integration tests for ao extra data from scripts repo by @arwer13 in #1021
- feat: Dashboard rework, Dashboard recovery by @failingtwice in #1031
- feat: bump AO version and report consensus version and remove legacy oracle by @tamtamchik in #1034
- feat: getter for latest report on the VaultHub by @vp4242 in #1036
- feat: Disallow empty codehash for vaults by @folkyatina in #1042
- feat: PDG chain depended deposit domain by @Jeday in #1043
- feat: check explicitly the amount to deposit by @folkyatina in #1044
- feat: add view functions for verify proof of validator and deposit by @DiRaiks in #1045
- feat: compute deposit domain based on fork version by @tamtamchik in #1047
- feat: compute deposit domain on contract creation by @Jeday in #1048
- feat: update role checks to include admin permissions by @failingtwice in #1052
- feat: add more fields to vaults batch query by @vp4242 in #1053
- feat: add disconnect event by @tamtamchik in #1055
- feat: lazy oracle, freshness conditions update, fixes, unit tests and integration by @vp4242 in #1056, #1063, #1192, #1280
- feat: Move StakingVault accounting to VaultHub by @failingtwice in #1058
- feat: add requestedShareLimit by @loga4 in #1062
- feat: add multiple fee types by @dry914 in #1065
- feat: direct report to LazyOracle from AccountingOracle by @folkyatina in #1066
- feat: Split VaultHub.VaultSocket into VaultConnection and VaultRecord by @folkyatina in #1073
- feat: vault obligations by @tamtamchik in #1075
- feat: og mconfirm by @loga4 in #1094
- feat: consolidation request by @kovalgek in #1093
- feat: Node operator fees fixed by @failingtwice in #1101
- feat: add lazy sanity checks by @dry914 in #1103
- feat: decrease VaultHub bytecode by @tamtamchik in #1106
- feat: PDG Delegated deposits by @failingtwice in #1123
- feat: Slashing reserve by @folkyatina in #1137
- feat: burner proxy, deploy refactoring and REQUEST_BURN_MY_STETH_ROLE fix by @arwer13 in #1142
- feat: uint16.max fees by @dry914 in #1153
- feat: stETH optimizations by @folkyatina in #1178
- feat: V3Template check start and finish in same tx (transient storage) by @arwer13 in #1179
- feat: rebalance in shares by @tamtamchik in #1181
- feat: cumulative post-testnet 2 updates by @tamtamchik in #1189
- feat: permissions bytecode micro optimisation by @Jeday in #1199
- feat: upgrade introduce V3TemporaryAdmin to limit deployer perms by @arwer13 in #1310
- feat: require report freshness on disconnect by @vp4242 in #1312
- feat: updateConnection to use updateVaultFees by @vp4242 in #1324
- feat: require vault to be connected to update report data by @vp4242 in #1327
- feat: PDG make compensate permissionless, make disproven deposit compensation permissionless by @failingtwice in #1337, #1336
- feat: Redemptions refactoring by @tamtamchik in #1350
- feat: Implement minimal reserve by @folkyatina in #1354
- feat: add vault jail logic by @dry914 in #1355
- feat: Lido fee sanity check by @dry914 in #1377
- feat: sync tier logic by @dry914 in #1387
- feat: add simulatedShareRate to oracle report by @dry914 in #1404
- feat: vaults consolidation for Vault-CLI by @kovalgek in #1411
- feat: verified vault proxy by @failingtwice in #1413
- feat: Dynamic locked by @folkyatina in #1425
- feat: report maxLiabilityShares to fix #1296 by @folkyatina in #1426
- feat: take staking limits into account when minting / burning external shares by @tamtamchik in #1433
- feat: token recovery from Staking Vault by @Jeday in #1444
- feat: Rework NodeOperatorFee by @failingtwice in #1448
- feat: PDG add explicit activation flow by @folkyatina in #1459
- feat: Improve PDG UX by @folkyatina in #1468
- feat: PDG side-activation by @folkyatina in #1482
- feat: obligationsShortfallValue by @tamtamchik in #1487
- feat: fix staking limit for external shares accounting by @tamtamchik in #1488
- feat: add vaultInfo function to lazyOracle by @dry914 in #1490
- feat: hoodi deploy params, common testnet patches, updates by @tamtamchik in #1499, #1521, #1542, #1556, #1574
- feat: Dashboard reset settled growth on disconnect by @failingtwice in #1506
- feat: rename event field by @failingtwice in #1509
- feat: add vault factory chaining for upgrade by @folkyatina in #1513
- feat: update settledGrowth even if fees are 0 by @folkyatina in #1531
- feat: pause VaultHub implementation by @tamtamchik in #1537
- feat: add EasyTrack new factories upon V3 voting by @arwer13 in #1543
- feat: remove transfer to vault by @tamtamchik in #1545
- feat: allow update fees on unhealthy vault by @tamtamchik in #1547
- feat: alerting harness contract by @tamtamchik in #1551
- feat: disallow max staking limit by @tamtamchik in #1554
- feat: remove role grants from agent by @failingtwice in #1558
- feat: update mainnet upgrade params by @failingtwice in #1559
- feat: change tier restriction by @folkyatina in #1561
- feat: update V3 deploy script by @failingtwice in #1564
- feat: Safe downcasting for share limit by @folkyatina in #1566
- feat: minting fees in one call during oracle report by @folkyatina in #1567
- feat: add time constraints for vote execution by @failingtwice in #1573
- feat: log explorer links in deploy by @failingtwice in #1577
- feat: report Validator Exit Delay reenable by @folkyatina in #1579
- feat: remove SetLiabilitySharesTarget factory from vote script by @dry914 in #1581
- feat: additional setup for scripts CI by @tamtamchik in #1583
- feat: deploy Lido V3 contracts & submit artifacts by @failingtwice in #1587
- feat: redeploy V3VoteScript with correct VaultsAdapter interface, with PDG pause on start by @failingtwice in #1596, #1602
- feat: add pause to pdg by @tamtamchik in #1599
- fix: FIX NO by @failingtwice in #880
- fix: extract mint/burning to Lido by @folkyatina in #885
- fix: use array instead of bitmap by @failingtwice in #888
- fix: precision loss by @folkyatina in #891
- fix: Immutably fix the node operator in the basic StakingVault by @failingtwice in #897
- fix: stETH harness contract by @tamtamchik in #903
- fix: get rid of double division on shares to eth conversion by @folkyatina in #913
- fix: vaultHub rename mint/burn by @failingtwice in #953
- fix: fixing fees by @folkyatina in #971
- fix: PDG deposit shortcut & delegation fee adjustment by @Jeday in #981
- fix: de-duplication by @loga4 in #1004
- fix: PDG events fixup + tests by @Jeday in #1005
- fix: disconnect vault, disconnect, disconnect process by @failin...
v3.0.0-rc.5
WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
What's Changed
- fix(v3): Audit fixes 11 by @failingtwice in #1557
- fix(v3): Audit fixes 12 by @folkyatina in #1568
What's Changed
- feat: remove role grants from agent by @failingtwice in #1558
- feat: update mainnet upgrade params by @failingtwice in #1559
- feat: Hood testnet patch 3 by @tamtamchik in #1556
- feat: add time constraints for vote execution by @failingtwice in #1573
- fix: change tier restriction by @folkyatina in #1561
- fix: minting fees in one call during oracle report by @folkyatina in #1567
- fix: safe downcasting for share limit by @folkyatina in #1566
- chore: fix voting items numeration by @dry914 in #1569
- chore: update V3 deploy script by @failingtwice in #1564
- chore: Hoodi tests by @folkyatina in #1520
Full Changelog: v3.0.0-rc.4...v3.0.0-rc.5
v3.0.0-rc.4
WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
What's Changed
- fix(V3): Audit fixes 9 by @folkyatina in #1549
- fix(V3): Audit fixes 10 by @folkyatina in #1555
Details
- feat(LazyOracle): extend a batch getter in LazyOracle by @folkyatina in #1546
- fix(NOR): remove transfer to vault by @tamtamchik in #1545
- fix(VaultHub): allow update fees on unhealthy vault by @tamtamchik in #1547
- fix(VaultHub): Shortfall strikes back by @folkyatina in #1548
- fix(Accounting): use proper badDebtToInternalize in simulation by @folkyatina in #1553
- fix(Lido): disallow max staking limit by @tamtamchik in #1554
- feat(testnet): hoodi update 2 by @tamtamchik in #1542
- feat(voting): Hoodi CI state-mate by @arwer13 in #1524
- feat(voting): add EasyTrack new factories upon V3 voting by @arwer13 in #1543
- test(V3): missed integration tests by @dry914 in #1519
Full Changelog: v3.0.0-rc.3...v3.0.0-rc.4
v3.0.0-rc.3
WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
What's Changed
- fix(V3): Audit fixes 6 by @folkyatina in #1528
- fix(V3): Audit fixes 7 by @folkyatina in #1533
- fix(V3): Audit fixes 8 by @folkyatina in #1541
Details
- fix(Dashboard): node operator fee disbursement on disconnect by @folkyatina in #1523
- fix(Lido): better check for maxExternalRatioBP in finalizeUpgrade_v3 by @folkyatina in #1532
- fix(Dashboard): update settledGrowth even if fees are 0 by @folkyatina in #1531
- fix(Lido): burning external shares with paused staking by @tamtamchik in #1529
- fix(VaultHub): total minting capacity by @tamtamchik in #1530
- fix(LazyOracle): correct condition for maxLiabilityShares validation by @folkyatina in #1536
- fix(VaultHub): the wrong shortfall problem by @folkyatina in #1540
- fix(VaultHub): pause implementation by @tamtamchik in #1537
- fix(Dashboard): NO fee revamp by @folkyatina in #1538
- chore: bunch of small improvements by @folkyatina in #1526
- feat: vote follow-ups by @arwer13 in #1514
Full Changelog: v3.0.0-rc.2...v3.0.0-rc.3
v3.0.0-rc.2
WIP protocol implementation for the future Lido V3 upgrade
Design doc: https://hackmd.io/@lido/stVaults-design
What's Changed
- feat(Dashboard): reset settled growth on disconnect by @failingtwice in #1506
- feat: rename event field by @failingtwice in #1509
- feat: add vault factory chaining for upgrade by @folkyatina in #1513
- chore: latest minor fixes and comments by @folkyatina in #1511
- chore: audit fixes 5 by @folkyatina in #1512
- fix(VaultHub): insufficient shortfall due to rounding by @failingtwice in #1497
- fix: fixes after the review by @folkyatina in #1515
Full Changelog: v3.0.0-rc.1...v3.0.0-rc.2
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


