EigenLayer M2 is a testnet-only release that extends the functionality of EigenLayer M1 (which is live on both Goerli and mainnet).
M1 enables very basic restaking: users that stake ETH natively or with a liquid staking token can opt-in to the M1 smart contracts, which currently support two basic operations: deposits and withdrawals.
M2 adds several features, the most important of which is the basic support needed to create an AVS. The M2 release includes the first AVS, EigenDA . The other features of M2 support AVSs and pad out existing features of M1. A short list of new features includes:
- Anyone can register as an operator
- Operators can begin providing services to an AVS
- Stakers can delegate their stake to a single operator
- Native ETH restaking is now fully featured, using beacon chain state proofs to validate withdrawal credentials, validator balances, and validator exits
- Proofs are supported by beacon chain headers provided by an oracle (See
EigenPodManager
docs for more info) - TODO - multiquorums
EigenPodManager:
File | Type | Proxy? | Goerli |
---|---|---|---|
EigenPodManager.sol |
Singleton | Transparent proxy | TODO |
EigenPod.sol |
Instanced, deployed per-user | Beacon proxy | TODO |
DelayedWithdrawalRouter.sol |
Singleton | Transparent proxy | TODO |
succinctlabs/EigenLayerBeaconOracle.sol |
Singleton | UUPS proxy | 0x40B1...9f2c |
These contracts work together to enable native ETH restaking:
- Users deploy
EigenPods
via theEigenPodManager
, which contain beacon chain state proof logic used to verify a validator's withdrawal credentials, balance, and exit. AnEigenPod's
main role is to serve as the withdrawal address for one or more of a user's validators. - The
EigenPodManager
handlesEigenPod
creation and accounting+interactions between users with restaked native ETH and theDelegationManager
. - The
DelayedWithdrawalRouter
imposes a 7-day delay on completing certain withdrawals from anEigenPod
. This is primarily to add a stopgap against a hack being able to instantly withdraw funds (note that most withdrawals are processed via theDelegationManager
, not theDelayedWithdrawalRouter
). - The
EigenLayerBeaconOracle
provides beacon chain block roots for use in various proofs. The oracle is supplied by Succinct's Telepathy protocol (docs link).
See full documentation in /core/EigenPodManager.md
.
StrategyManager:
File | Type | Proxy? | Goerli |
---|---|---|---|
StrategyManager.sol |
Singleton | Transparent proxy | TODO |
StrategyBaseTVLLimits.sol |
3 instances (for cbETH, rETH, stETH) | Transparent proxy | TODO |
These contracts work together to enable restaking for LSTs:
- The
StrategyManager
acts as the entry and exit point for LSTs in EigenLayer. It handles deposits into each of the 3 LST-specific strategies, and manages accounting+interactions between users with restaked LSTs and theDelegationManager
. StrategyBaseTVLLimits
is deployed as three separate instances, one for each supported LST (cbETH, rETH, and stETH). When a user deposits into a strategy through theStrategyManager
, this contract receives the tokens and awards the user with a proportional quantity of shares in the strategy. When a user withdraws, the strategy contract sends the LSTs back to the user.
See full documentation in /core/StrategyManager.md
.
DelegationManager:
File | Type | Proxy? | Goerli |
---|---|---|---|
DelegationManager.sol |
Singleton | Transparent proxy | TODO |
The DelegationManager
sits between the EigenPodManager
and StrategyManager
to manage delegation and undelegation of Stakers to Operators. Its primary features are to allow Operators to register as Operators (registerAsOperator
), to keep track of shares being delegated to Operators across different strategies, and to manage withdrawals on behalf of the EigenPodManager
and StrategyManager
.
See full documentation in /core/DelegationManager.md
.
Slasher:
File | Type | Proxy? | Goerli |
---|---|---|---|
Slasher.sol |
Singleton | Transparent proxy | TODO |
The Slasher
is deployed, but will remain completely paused during M2. Its design is not finalized.