# Lido V3 — Design & Implementation Proposal

**URL:** <https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665>\
**Category:** Lido V3\
**Created:** [September 14, 2025, 7:03pm UTC](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665 "2025-09-14T19:03:24Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![TheDZhon](https://dub1.discourse-cdn.com/flex013/user_avatar/research.lido.fi/thedzhon/32/800_2.png) [@TheDZhon](https://research.lido.fi/u/TheDZhon)\
**Post date:** [December 3, 2025, 11:16pm UTC](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665/5 "2025-12-03T23:16:12Z")

</div>

# Lido V3 — Deployment update and upcoming voting details

## TL;DR

- **Technical pre-deployment complete** : All Lido V3 contracts have been pre-deployed to Ethereum mainnet and verified on Etherscan. Source code used matches the latest [audited commit](https://github.com/lidofinance/core/commit/b98371488eb9479cf072bd6c2b682a59c5dd71d8).
- **Final verification in progress** : Deployment artifacts have been sent to auditors for independent verification. Before the vote begins, finalized audit reports will be published in a thread, also MixBytes will provide a deployment verification note.
- **Vote timeline** : Providing no last-minute security findings and audit reports published, an on-chain Aragon vote is tentatively targeted to commence on **December 10th, 2025** , with enactment _optimistically_ (if supported and non-contentious) expected around **December 19th, 2025** (within the 14:00–23:00 UTC window).
- **This follow-up note** provides complete contract addresses, constructor parameters with rationale, voting structure breakdown, and expected next steps.

* * *

## Context recap

Following the [proposal approval via Snapshot vote](https://snapshot.box/#/s:lido-snapshot.eth/proposal/0x01cd474645cc7c3ddf68314d475d421ef833499297f508fee5f7411fafff3954), testnet phases left behind, and audit campaign finished, Lido contributors have completed the technical mainnet pre-deployment of all V3 contracts. This update serves as the upcoming voting announcement and details thread ahead of the on-chain vote.

For those new to this topic, Lido V3 introduces **staking Vaults (stVaults)** — isolated, non-custodial contracts allowing stakers to choose their operator and stake setup while still minting stETH. The existing Core Pool remains unchanged. V3 = Core Pool + stVaults.

* * *

## Deployment summary

### Source code references

| Component | Repository | Audited Commit | Deploy Commit |
| --- | --- | --- | --- |
| Core Protocol | [lidofinance/core](https://github.com/lidofinance/core) | [`b98371488`](https://github.com/lidofinance/core/commit/b98371488eb9479cf072bd6c2b682a59c5dd71d8) | [`b8d51cc7`](https://github.com/lidofinance/core/commit/b8d51cc70b96a3b8a406bd1f85de139aa6f2043d) ([UPDATED: 2025-12-11](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665/9)) |
| Easy Track | [lidofinance/easy-track](https://github.com/lidofinance/easy-track) | [`c64468ca5`](https://github.com/lidofinance/easy-track/commit/c64468ca5126237c33e17b71d9307a6aea0ee5cc) | Same |

> **Note** : The deploy commit contains updates to tests, scripts, and voting contracts only. These changes do not affect the bytecode of core protocol contracts — deployed contracts have identical bytecode to the audited commit. [View diff](https://github.com/lidofinance/core/compare/b98371488eb9479cf072bd6c2b682a59c5dd71d8...bb8f7391048cdb69f04c1c52e2610544d9769bb1).

* * *

## Contract addresses

### Voting tooling contracts

| Contract | Address | Purpose |
| --- | --- | --- |
| V3TemporaryAdmin | [`0xf738A2C7d69694B618dbB547C1c5A152D7958f06`](https://etherscan.io/address/0xf738A2C7d69694B618dbB547C1c5A152D7958f06) | Auxiliary contract for intermediate admin tasks during deployment; transfers admin to Agent afterward |
| V3VoteScript | [`0xE1F4c16908fCE6935b5Ad38C6e3d58830fe86442`](https://etherscan.io/address/0xE1F4c16908fCE6935b5Ad38C6e3d58830fe86442) ([UPDATED: 2025-12-11](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665/9)) | Vote script orchestrating all upgrade actions |
| V3Template | [`0x34E01ecFebd403370b0879C628f8A5319dDb8507`](https://etherscan.io/address/0x34E01ecFebd403370b0879C628f8A5319dDb8507) | Upgrade template with two-step procedure: `startUpgrade()` / `finishUpgrade()` |

### Core protocol upgrades

| Contract | Proxy Address | New Implementation | Notes |
| --- | --- | --- | --- |
| Lido (stETH) | [`0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84`](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) | [`0x6ca84080381E43938476814be61B779A8bB6a600`](https://etherscan.io/address/0x6ca84080381E43938476814be61B779A8bB6a600) | Upgrades to V3 logic via Aragon Kernel |
| LidoLocator | [`0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb`](https://etherscan.io/address/0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb) | [`0x2f8779042EFaEd4c53db2Ce293eB6B3f7096C72d`](https://etherscan.io/address/0x2f8779042EFaEd4c53db2Ce293eB6B3f7096C72d) | Registry with protocol contract addresses |
| AccountingOracle | [`0x852deD011285fe67063a08005c71a85690503Cee`](https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee) | [`0x1455B96780A93e08abFE41243Db92E2fCbb0141c`](https://etherscan.io/address/0x1455B96780A93e08abFE41243Db92E2fCbb0141c) | Upgrades to v4 with stVaults state root reporting (consensus version v5) |

### New protocol contracts (to perform migrations)

| Contract | Proxy Address | Implementation | Notes |
| --- | --- | --- | --- |
| Burner | [`0xE76c52750019b80B43E36DF30bf4060EB73F573a`](https://etherscan.io/address/0xE76c52750019b80B43E36DF30bf4060EB73F573a) | [`0xEe1E3B4f047122650086985f794f0dB5f10Ae49D`](https://etherscan.io/address/0xEe1E3B4f047122650086985f794f0dB5f10Ae49D) | New upgradeable burner replacing old non-upgradeable contract |
| OracleReportSanityChecker | [`0xf1647c86E6D7959f638DD9CE1d90e2F3C9503129`](https://etherscan.io/address/0xf1647c86E6D7959f638DD9CE1d90e2F3C9503129) | — | New instance with V3-compatible limits |
| TokenRateNotifier | [`0x25e35855783bec3E49355a29e110f02Ed8b05ba9`](https://etherscan.io/address/0x25e35855783bec3E49355a29e110f02Ed8b05ba9) | — | New instance; observers migrated from old notifier |

### Newly introduced stVaults system contracts

| Contract | Proxy Address | Implementation | Notes |
| --- | --- | --- | --- |
| VaultHub | [`0x1d201BE093d847f6446530Efb0E8Fb426d176709`](https://etherscan.io/address/0x1d201BE093d847f6446530Efb0E8Fb426d176709) | [`0x7c7d957D0752AB732E73400624C4a1eb1cb6CF50`](https://etherscan.io/address/0x7c7d957D0752AB732E73400624C4a1eb1cb6CF50) | Central hub for stVault coordination and stETH minting |
| PredepositGuarantee | [`0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3`](https://etherscan.io/address/0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3) | [`0xCC08C36BD5bb78FDcB10F35B404ada6Ffc71a023`](https://etherscan.io/address/0xCC08C36BD5bb78FDcB10F35B404ada6Ffc71a023) | Protects deposits from front-running attacks |
| OperatorGrid | [`0xC69685E89Cefc327b43B7234AC646451B27c544d`](https://etherscan.io/address/0xC69685E89Cefc327b43B7234AC646451B27c544d) | [`0xA612E30D71d7D54aEaf4e5A21023F3F270932C2C`](https://etherscan.io/address/0xA612E30D71d7D54aEaf4e5A21023F3F270932C2C) | Manages operator groups and risk tiers |
| Accounting | [`0x23ED611be0e1a820978875C0122F92260804cdDf`](https://etherscan.io/address/0x23ED611be0e1a820978875C0122F92260804cdDf) | [`0xd43a3E984071F40d5d840f60708Af0e9526785df`](https://etherscan.io/address/0xd43a3E984071F40d5d840f60708Af0e9526785df) | New accounting module for V3 |
| LazyOracle | [`0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c`](https://etherscan.io/address/0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c) | [`0x47f3a6b1E70F7Ec7dBC3CB510B1fdB948C863a5B`](https://etherscan.io/address/0x47f3a6b1E70F7Ec7dBC3CB510B1fdB948C863a5B) | “Lazy oracle” for vault value updates with quarantine |

### stVaults factory stack

| Contract | Address | Notes |
| --- | --- | --- |
| VaultFactory | [`0x02Ca7772FF14a9F6c1a08aF385aA96bb1b34175A`](https://etherscan.io/address/0x02Ca7772FF14a9F6c1a08aF385aA96bb1b34175A) | Factory for creating new stVaults |
| UpgradeableBeacon | [`0x5FbE8cEf9CCc56ad245736D3C5bAf82ad54Ca789`](https://etherscan.io/address/0x5FbE8cEf9CCc56ad245736D3C5bAf82ad54Ca789) | Beacon proxy pattern for stVault upgrades |
| StakingVault (impl) | [`0x06A56487494aa080deC7Bf69128EdA9225784553`](https://etherscan.io/address/0x06A56487494aa080deC7Bf69128EdA9225784553) | Reference implementation for vaults |
| Dashboard (impl) | [`0x294825c2764c7D412dc32d87E2242c4f1D989AF3`](https://etherscan.io/address/0x294825c2764c7D412dc32d87E2242c4f1D989AF3) | Dashboard helper for vault management |
| ValidatorConsolidationRequests | [`0xaC4Aae7123248684C405A4b0038C1560EC7fE018`](https://etherscan.io/address/0xaC4Aae7123248684C405A4b0038C1560EC7fE018) | Handles validator consolidation requests |

### GateSeal

| Contract | Address | Notes |
| --- | --- | --- |
| GateSeal (VaultHub + PDG) | [`0x881dAd714679A6FeaA636446A0499101375A365c`](https://etherscan.io/address/0x881dAd714679A6FeaA636446A0499101375A365c) | Emergency pause for VaultHub and PredepositGuarantee |

> GateSeal Blueprint: [`0xEe06EA501f7d9DC6F4200385A8D910182D155d3e`](https://etherscan.io/address/0xEe06EA501f7d9DC6F4200385A8D910182D155d3e)  
> GateSeal Factory: [`0x6c82877cac5a7a739f16ca0a89c0a328b8764a24`](https://etherscan.io/address/0x6c82877cac5a7a739f16ca0a89c0a328b8764a24)  
> Sealing Committee: [`0x8772E3a2D86B9347A2688f9bc1808A6d8917760C`](https://etherscan.io/address/0x8772E3a2D86B9347A2688f9bc1808A6d8917760C) (existing GateSeal Committee)

### Easy Track factories for stVaults Committee

| Factory | Address | Purpose | Phase |
| --- | --- | --- | --- |
| RegisterGroupsInOperatorGrid | [`0x194A46DA1947E98c9D79af13E06Cfbee0D8610cC`](https://etherscan.io/address/0x194A46DA1947E98c9D79af13E06Cfbee0D8610cC) | Register new operator groups | Phase 1 (50k stETH max) |
| RegisterGroupsInOperatorGrid | [`0xE73842AEbEC99Dacf2aAEec61409fD01A033f478`](https://etherscan.io/address/0xE73842AEbEC99Dacf2aAEec61409fD01A033f478) | Register new operator groups | Phase 2/3 (1M stETH max) |
| UpdateGroupsShareLimitInOperatorGrid | [`0x8Bdc726a3147D8187820391D7c6F9F942606aEe6`](https://etherscan.io/address/0x8Bdc726a3147D8187820391D7c6F9F942606aEe6) | Update group share limits | Phase 1 (50k stETH max) |
| UpdateGroupsShareLimitInOperatorGrid | [`0xf23559De8ab37fF7a154384B0822dA867Cfa7Eac`](https://etherscan.io/address/0xf23559De8ab37fF7a154384B0822dA867Cfa7Eac) | Update group share limits | Phase 2/3 (1M stETH max) |
| RegisterTiersInOperatorGrid | [`0x5292A1284e4695B95C0840CF8ea25A818751C17F`](https://etherscan.io/address/0x5292A1284e4695B95C0840CF8ea25A818751C17F) | Register new risk tiers | All phases |
| AlterTiersInOperatorGrid | [`0xa29173C7BCf39dA48D5E404146A652d7464aee14`](https://etherscan.io/address/0xa29173C7BCf39dA48D5E404146A652d7464aee14) | Modify existing tier parameters | Phase 1 (0 default tier limit) |
| AlterTiersInOperatorGrid | [`0x73f80240ad9363d5d3C5C3626953C351cA36Bfe9`](https://etherscan.io/address/0x73f80240ad9363d5d3C5C3626953C351cA36Bfe9) | Modify existing tier parameters | Phase 2/3 (1M default tier limit) |
| SetJailStatusInOperatorGrid | [`0x93F1DEE4473Ee9F42c8257C201e33a6Da30E5d67`](https://etherscan.io/address/0x93F1DEE4473Ee9F42c8257C201e33a6Da30E5d67) | Jail/unjail vault minting capability | All phases |
| UpdateVaultsFeesInOperatorGrid | [`0x5C3bDFa3E7f312d8cf72F56F2b797b026f6B471c`](https://etherscan.io/address/0x5C3bDFa3E7f312d8cf72F56F2b797b026f6B471c) | Update vault fee rates | All phases |
| ForceValidatorExitsInVaultHub | [`0x6C968cD89CA358fbAf57B18e77a8973Fa869a6aA`](https://etherscan.io/address/0x6C968cD89CA358fbAf57B18e77a8973Fa869a6aA) | Trigger forced validator exits | All phases |
| SocializeBadDebtInVaultHub | [`0x1dF50522A1D868C12bF71747Bb6F24A18Fe6d32C`](https://etherscan.io/address/0x1dF50522A1D868C12bF71747Bb6F24A18Fe6d32C) | Socialize bad debt between vaults | All phases |
| VaultsAdapter | [`0xe2DE6d2DefF15588a71849c0429101F8ca9FB14D`](https://etherscan.io/address/0xe2DE6d2DefF15588a71849c0429101F8ca9FB14D) | Helper contract for Easy Track operations | All phases |

> **Notes** :
> 
> 1. `SetLiabilitySharesTargetInVaultHub` ([`0x4E5Cc771c7b77f1417fa6BA9262d83C6CCc1e969`](https://etherscan.io/address/0x4E5Cc771c7b77f1417fa6BA9262d83C6CCc1e969)) is deployed but will **not** be connected in the initial vote, as there are no current plans to use it.
> 2. Phase 2/3 factories `RegisterGroupsInOperatorGrid` [`0xE73842AEbEC99Dacf2aAEec61409fD01A033f478`](https://etherscan.io/address/0xE73842AEbEC99Dacf2aAEec61409fD01A033f478), `UpdateGroupsShareLimitInOperatorGrid` [`0xf23559De8ab37fF7a154384B0822dA867Cfa7Eac`](https://etherscan.io/address/0xf23559De8ab37fF7a154384B0822dA867Cfa7Eac), `AlterTiersInOperatorGrid` [`0x73f80240ad9363d5d3C5C3626953C351cA36Bfe9`](https://etherscan.io/address/0x73f80240ad9363d5d3C5C3626953C351cA36Bfe9) are deployed but also will **not** be connected in the initial vote.

### Discontinued Contracts

| Contract | Address | Notes |
| --- | --- | --- |
| Burner (old) | `0xD15a672319Cf0352560eE76d9e89eAB0889046D3` | Non-upgradeable; replaced by new Burner |
| OracleReportSanityChecker (old) | `0x6232397ebac4f5772e53285b26c47914e9461e75` | Replaced by new instance |
| TokenRateNotifier (old) | `0xe6793B9e4FbA7DE0ee833F9D02bba7DB5EB27823` | Observers migrated to new notifier |
| LegacyOracle | `0x442af784A788A5bd6F42A01Ebe9F287a871243fb` | Fully deprecated; no longer referenced |

* * *

## Constructor/initializer parameters and rationale

### V3Template Constructor

```auto
constructorArgs: [
  V3AddressesParams (struct with 29 addresses and lido app id),
  expireSinceInclusive: 1768435200, // Unix timestamp: Jan 15, 2026
  initialMaxExternalRatioBP: 300 // 3% = 300 basis points
]

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| `expireSinceInclusive` | `1768435200` (Jan 15, 2026 00:00:00 UTC) | Safety mechanism: if the upgrade isn’t enacted by this date, the template becomes unusable. Provides ~4 weeks buffer from expected enactment. |
| `initialMaxExternalRatioBP` | `300` (3%) | **Phase 1 global cap** : At most 3% of total stETH supply can be minted via stVaults initially. Ensures Core Pool remains ≥97% of Lido TVL during pilot phase. Per the [Risk Assessment Framework](https://research.lido.fi/t/risk-assessment-framework-for-stvaults/9978) and Phase 1 limits ratified via the snapshot. |

### V3VoteScript Constructor

```auto
constructorArgs: [
  upgradeTemplate: 0x34E01ecFebd403370b0879C628f8A5319dDb8507,
  timeConstraints: 0x2a30F5aC03187674553024296bed35Aa49749DDa,
  odcSlashingReserveWeRightShiftEpochs: 8192,
  odcSlashingReserveWeLeftShiftEpochs: 8192
]

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| `timeConstraints` | `0x2a30F5aC03187674553024296bed35Aa49749DDa` | An axuliary contracts that allows to create time windows eligible for the vote enactments, used in DG before |
| `odcSlashingReserveWeRightShiftEpochs` | `8192` | Oracle daemon config: epochs to look back from `withdrawable_epoch` when including slashings in stVault oracle reports. 8192 epochs ≈ 36 days — covers possible correlation penalty period effects. |
| `odcSlashingReserveWeLeftShiftEpochs` | `8192` | Oracle daemon config: forward-looking window for slashing inclusion. Symmetric with right shift for consistent accounting. |
| `ENABLED_DAY_SPAN_START` | `50400` (14:00 UTC) | Execution window start — ensures enactment happens somewhere after regular AccountingOracle report arrival. |
| `ENABLED_DAY_SPAN_END` | `82800` (23:00 UTC) | Execution window end — 9-hour window accommodates global contributors availability. |

### VaultHub Constructor

```auto
constructorArgs: [
  lidoLocator: 0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb,
  lido: 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84,
  hashConsensusForAccountingOracle: 0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288,
  maxRelativeShareLimitBP: 1000 // 10%
]

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| `maxRelativeShareLimitBP` | `1000` (10%) | Maximum share limit any single vault can have relative to total stETH. Sanity check defensive parameter. |

### OperatorGrid Initialization

```auto
initialize params (encoded):
  admin: 0xf738A2C7d69694B618dbB547C1c5A152D7958f06 (V3TemporaryAdmin),
  defaultTierId: 0,
  defaultTierReserveRatio: 5000, // 50%
  defaultTierForceRebalanceThreshold: 4975, // 49.75%
  defaultTierInfraFeeBP: 100, // 1%
  defaultTierLiquidityFeeBP: 650, // 6.5%
  defaultTierReservationFeeBP: 0 // 0%

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| Default Tier Reserve Ratio | `5000` (50%) | Permissionless vaults must hold 50% collateral unminted. Identified operators get lower RR via custom tiers. Per [Default Parameters Proposal](https://research.lido.fi/t/default-risk-assessment-framework-and-fees-parameters-for-lido-v3-stvaults/10504). |
| Default Tier Force Rebalance Threshold | `4975` (49.75%) | 0.25% below RR. If a vault’s reserve falls below this (e.g., due to slashing), forced rebalancing becomes possible. Small buffer prevents trivial fluctuations triggering rebalance. |
| Default Tier Infrastructure Fee | `100` (1%) | DAO’s share of vault rewards for platform usage. Covers oracle/operational costs. Per [Default Parameters Proposal](https://research.lido.fi/t/default-risk-assessment-framework-and-fees-parameters-for-lido-v3-stvaults/10504). |
| Default Tier Liquidity Fee | `650` (6.5%) | Fee for stETH liquidity provision. Compensates for liquidity risk. Per [Default Parameters Proposal](https://research.lido.fi/t/default-risk-assessment-framework-and-fees-parameters-for-lido-v3-stvaults/10504). |
| Default Tier Reservation Fee | `0` (0%) | Initially 0% to simplify initial Lido V3 design. May be revisited to incentivize efficient capital use in future protocol versions. |

### LazyOracle Initialization

```auto
initialize params (encoded):
  admin: 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c (Agent),
  quarantinePeriod: 259200, // 3 days in seconds
  rewardRatioBP: 350, // 3.5%
  maxLidoFeeRatePerSecond: 2880000000000000000 // ~0.0029 ETH/s

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| `quarantinePeriod` | `259200` (3 days) | Per [LIP-32](https://github.com/lidofinance/lido-improvement-proposals/blob/develop/LIPS/lip-32.md): suspicious vault value increases are quarantined for 3 days before being credited. Prevents manipulation via fake value increases. |
| `rewardRatioBP` | `350` (3.5%) | Maximum reward ratio per oracle report. Sanity check against abnormal reward spikes. |
| `maxLidoFeeRatePerSecond` | `~2.88e18` | Maximum **theoretical** fee rate the protocol can charge per second. Safety bound. |

### Easy Track Factory Limits

| Factory Type | Phase 1 Limit | Phase 2/3 Limit | Rationale |
| --- | --- | --- | --- |
| Group registration/update | 50,000 stETH | 1,000,000 stETH | Phase 1: Conservative per-operator cap. Later phases allow larger operators. |
| Default tier share limit | 0 stETH | 1,000,000 stETH | Phase 1: Permissionless minting disabled. Phase 3 enables permissionless **minting** vaults. |
| Fee bounds (infrastructure) | ≤1% (100 BP) | — | Committee can adjust within bounds; higher requires DAO vote. |
| Fee bounds (liquidity) | ≤10% (1000 BP) | — | Committee can adjust within bounds; higher requires DAO vote. |
| Fee bounds (reservation) | =0% (fixed) | — | Currently unused. |
| Validator exit fee limit | 0.1 ETH | — | Max EIP-7002 fee paid for forced exit operations (under EL requests congestion). |

### OracleReportSanityChecker Constructor

```auto
constructorArgs: [
  lidoLocator,
  accountingOracle,
  accounting,
  agent,
  limits: [3600, 1800, 1000, 50, 600, 8, 24, 7680, 750000, 8, 101, 50]
]

```

| Limit | Value | Meaning |
| --- | --- | --- |
| `exitedValidatorsPerDayLimit` | `3600` | The max possible number of validators that might be reported as `exited` |
| `appearedValidatorsPerDayLimit` | `1800` | The max possible number of validators that might be reported as `appeared` |
| `annualBalanceIncreaseBPLimit` | `1000` (10%) | Max annual CL balance increase rate |
| `simulatedShareRateDeviationBPLimit` | `50` (0.5%) | Max share rate deviation in simulation |
| `maxValidatorExitRequestsPerReport` | `600` | Max exit requests per validator exit bus oracle report |
| `maxItemsPerExtraDataTransaction` | `8` | Max extra data items in accounting reports |
| `maxNodeOperatorsPerExtraDataItem` | `24` | Max operators per extra data item |
| `requestTimestampMargin` | `7680` | Timestamp margin for requests (seconds) |
| `maxPositiveTokenRebase` | `750000` | Max positive rebase (in 1e9 precision) |
| `initialSlashingAmountPWei` | `8` | Initial slashing amount (peta-wei) |
| `inactivityPenaltiesAmountPWei` | `101` | Inactivity penalties (peta-wei) |
| `clBalanceOraclesErrorUpperBPLimit` | `50` | CL balance oracle error upper bound |

Note: these parameters are 1:1 with the currently plugged and used [`OracleReportSanityChecker`](https://etherscan.io/address/0x6232397ebac4f5772e53285b26c47914e9461e75) version.

### AccountingOracle Constructor

```auto
constructorArgs: [
  lidoLocator: 0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb,
  secondsPerSlot: 12,
  genesisTime: 1606824023
]

```

| Parameter | Value | Rationale |
| --- | --- | --- |
| `secondsPerSlot` | `12` | Ethereum mainnet slot duration |
| `genesisTime` | `1606824023` | Ethereum mainnet beacon chain genesis (Dec 1, 2020) |
| Post-upgrade consensus version | `5` | Bumped from 4 to support stVaults state root reporting |
| Post-upgrade contract version | `4` | Bumped from 3 to reflect new capabilities |

### GateSeal Configuration

| Parameter | Value | Rationale |
| --- | --- | --- |
| Seal Duration | 14 days | Pause duration before automatic expiry. Ensures system can’t be halted indefinitely. |
| Sealing Committee | `0x8772E3a2D86B9347A2688f9bc1808A6d8917760C` | Existing GateSeal Committee multisig. |
| Sealables | VaultHub, PredepositGuarantee | New V3 contracts requiring emergency pause capability. |
| Expiration timestamp | 1796302499 | Roughly 1 year duration, corresponds to Thursday, December 3, 2026 12:54:59 PM |

* * *

## Voting Structure

The on-chain Aragon vote is an omnibus proposal with **two distinct parts** :

### Part 1: Voting Items (8 items) — Execute Immediately

These items are executed when the Aragon vote passes (no Dual Governance delay):

| # | Action | Contract Target | Permission Granted |
| --- | --- | --- | --- |
| 2 | Add AlterTiersInOperatorGrid (Phase 1) factory to Easy Track | EasyTrack | `operatorGrid.alterTiers` |
| 3 | Add RegisterGroupsInOperatorGrid (Phase 1) factory to Easy Track | EasyTrack | `operatorGrid.registerGroup`, `operatorGrid.registerTiers` |
| 4 | Add RegisterTiersInOperatorGrid factory to Easy Track | EasyTrack | `operatorGrid.registerTiers` |
| 5 | Add UpdateGroupsShareLimitInOperatorGrid (Phase 1) factory to Easy Track | EasyTrack | `operatorGrid.updateGroupShareLimit` |
| 6 | Add SetJailStatusInOperatorGrid factory to Easy Track | EasyTrack | `vaultsAdapter.setVaultJailStatus` |
| 7 | Add UpdateVaultsFeesInOperatorGrid factory to Easy Track | EasyTrack | `vaultsAdapter.updateVaultFees` |
| 8 | Add ForceValidatorExitsInVaultHub factory to Easy Track | EasyTrack | `vaultsAdapter.forceValidatorExit` |
| 9 | Add SocializeBadDebtInVaultHub factory to Easy Track | EasyTrack | `vaultsAdapter.socializeBadDebt` |

### Part 2: Dual Governance Items (21 items) — Subject to DG Veto Period

These items go through Dual Governance and execute only after the veto period:

| # | Action | Purpose |
| --- | --- | --- |
| 1.1 | Check execution time window (14:00–23:00 UTC) | Ensure DG proposal enactment aligned with oracle reports and during monitored hours |
| 1.2 | Call `V3Template.startUpgrade()` | Lock upgrade window, record initial state |
| 1.3 | Upgrade LidoLocator implementation | Point to new V3 contract registry |
| 1.4 | Grant `APP_MANAGER_ROLE` to Agent | Temporary permission for Lido upgrade |
| 1.5 | Set Lido implementation in Aragon Kernel | Upgrade stETH contract to V3 logic |
| 1.6 | Revoke `APP_MANAGER_ROLE` from Agent | Clean up temporary permission |
| 1.7 | Revoke `REQUEST_BURN_SHARES_ROLE` from Lido on old Burner | Remove obsolete permission |
| 1.8 | Revoke `REQUEST_BURN_SHARES_ROLE` from Curated Module on old Burner | Remove obsolete permission |
| 1.9 | Revoke `REQUEST_BURN_SHARES_ROLE` from SimpleDVT on old Burner | Remove obsolete permission |
| 1.10 | Revoke `REQUEST_BURN_SHARES_ROLE` from CSM Accounting on old Burner | Remove obsolete permission |
| 1.11 | Upgrade AccountingOracle implementation | Enable stVaults state root reporting |
| 1.12 | Revoke `REPORT_REWARDS_MINTED_ROLE` from Lido on StakingRouter | Transfer responsibility to Accounting |
| 1.13 | Grant `REPORT_REWARDS_MINTED_ROLE` to Accounting on StakingRouter | New rewards reporting path |
| 1.14 | Grant `CONFIG_MANAGER_ROLE` to Agent on OracleDaemonConfig | Temporary permission for config update |
| 1.15 | Set `SLASHING_RESERVE_WE_RIGHT_SHIFT` in OracleDaemonConfig | Configure oracle slashing lookback (8192 epochs) |
| 1.16 | Set `SLASHING_RESERVE_WE_LEFT_SHIFT` in OracleDaemonConfig | Configure oracle slashing look-ahead (8192 epochs) |
| 1.17 | Revoke `CONFIG_MANAGER_ROLE` from Agent on OracleDaemonConfig | Clean up temporary permission |
| 1.18 | Grant `PAUSE_ROLE` to Agent on `PredepositGurantee` | Temporary permission for PDG state update |
| 1.19 | Pause `PredepositGurantee` indefinitely | Disable PDG-guided deposit flows |
| 1.20 | Revoke `PAUSE_ROLE` to Agent from `PredepositGurantee` | Clean up temporary permission |
| 1.21 | Call `V3Template.finishUpgrade()` | Finalize upgrade, migrate burner state, set external ratio |

> **NOTE:** Items 1.18—1.20 added according to the [2025-12-11 update by @tamtamchik](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665/9)

### Role Changes Summary

**New Burner roles (post-upgrade):**

- `DEFAULT_ADMIN_ROLE`: Agent
- `REQUEST_BURN_SHARES_ROLE`: Accounting, CSM Accounting
- `REQUEST_BURN_MY_STETH_ROLE`: ∅ (none)

**VaultHub roles:**

- `DEFAULT_ADMIN_ROLE`: Agent
- `VALIDATOR_EXIT_ROLE`: VaultsAdapter
- `BAD_DEBT_MASTER_ROLE`: VaultsAdapter
- `PAUSE_ROLE`: GateSeal, ResealManager
- `RESUME_ROLE`: ResealManager
- `VAULT_MASTER_ROLE`: ∅ (none)
- `REDEMPTION_MASTER_ROLE`: ∅ (none)

**OperatorGrid roles:**

- `DEFAULT_ADMIN_ROLE`: Agent
- `REGISTRY_ROLE`: EVMScriptExecutor, VaultsAdapter

**PredepositGuarantee roles:**

- `DEFAULT_ADMIN_ROLE`: Agent
- `PAUSE_ROLE`: GateSeal, ResealManager
- `RESUME_ROLE`: ResealManager

**StakingRouter changes:**

- `REPORT_REWARDS_MINTED_ROLE`: Lido → Accounting

* * *

## Tentative Timeline

> **NOTE** : Timing subject to security findings and operational readiness. Any delays will be communicated.

| Date | Milestone |
| --- | --- |
| **December 10th** | On-chain Aragon vote commences (~3 days voting + 2 days objection) |
| **December 15th** | Vote enactment; Easy Track factories become active; DG submission for core upgrade |
| **December 15th–19th** | Dual Governance veto collection period (~3 days) + pre-execution timelock (~1 day) |
| **December 19th** | **Rollout date** — Enactment window 14:00–23:00 UTC. First stVaults can be created and connected to VaultHub. |
| **December 20th** | First AccountingOracle report containing stVaults state data (may have slight delays) |
| **Late Dec 2025+** | Active monitoring, running-in period, phase transition planning |
| **~Jan 2026** | If 30 days pass with no incidents, DAO considers Phase 2 transition (30% cap) |
| **~Q1 2026** | Target for Phase 3 (permissionless minting) if conditions met |

* * *

## Verification and Audit Status

### Audits

Lido V3 has undergone multiple independent audits:

| Firm | Scope | Status |
| --- | --- | --- |
| **Certora** | Formal verification + on/off-chain audit rounds | Completed, reports to be published |
| **ConsenSys Diligence** | An on-chain audit + invariant fuzzing | Completed, report to be published |
| **Composable Security** | Oracle/infra audit, threat models beyond | Completed, report to be published |
| **MixBytes** | Vault logic, global accounting math, Easy Track factories, governance wiring | Completed, reports to be published |

Final audit reports will be published in the [Lido Audits repository](https://github.com/lidofinance/audits) and linked here once available.

### Deployment Verification

An independent deployment verification report by **MixBytes** will be published before the vote begins. This report will confirm:

- Bytecode matches audited commit
- Constructor parameters are correct
- Access control is properly configured
- State initialization is valid

### Bug Bounty

The [Immunefi bug bounty program](https://immunefi.com/bug-bounty/lido/) are to be extended to cover V3 contracts. Also, there is an [ongoing Lido V3 bug bounty competition](https://immunefi.com/audit-competition/lido-v3-bug-bounty-competition/information/) with boosted rewards for any severe vulnerabilities found.

* * *

## What this means for stakers

**Existing stETH/wstETH holders** : No action required. The upgrade is backward-compatible. All existing functionality (staking, wrapping, withdrawals, transfers, permits) continues to work exactly as before.

**New vault users** : After enactment, you can create stVaults and stake ETH immediately. stETH minting will be available for identified operators within the 3% global cap (Phase 1). Permissionless minting is disabled until Phase 3.

**Node Operators** : Early adopters and Lido V3 supporters will be onboarded first. Contact the [stVaults Committee](https://research.lido.fi/t/stvaults-committee-proposal/10608) for participation details.

* * *

## Next Steps

1. **Final audit reports** — To be published and linked
2. **MixBytes deployment verification report** — Expected before vote launch
3. **On-chain vote** — Tentatively penciled for December, 10th
4. **Community monitoring** — Post-upgrade observation period

* * *

If you have questions about the upgrade mechanics, contract parameters, or any edge cases, please ask below. Lido contributors are here to address your queries.

Thank you for your engagement in the Lido DAO governance. Onwards to Lido V3! 🚀

---

_[View the full topic](https://research.lido.fi/t/lido-v3-design-implementation-proposal/10665)._
