Eigenlayer Competition
What is Eigenlayer
EigenLayer is a protocol built on Ethereum that introduces restaking, a new primitive in cryptoeconomic security. This primitive enables the reuse of ETH on the consensus layer. Users that stake ETH natively or with a liquid staking token (LST) can opt-in to EigenLayer smart contracts to restake their ETH or LST and extend cryptoeconomic security to additional applications on the network to earn additional rewards.
Prize distribution and scoring
- Scoring described in the competition scoring page.
- Findings Severities described in detail on our docs page.
- Only High and Medium findings would be accepted.
Documentation
Scope
This review concerns the upcoming M2 mainnet upgrade for EigenLayer and EigenDA. The upgrade is scheduled for end Q1/early Q2, and consists of:
- A contract upgrade of our current core contracts from the currently-deployed M1 version to their M2 versions.
- Deployment of EigenDA contracts (and offchain infrastructure), which will integrate with the M2 core contracts.
We are asking for reviewers to dig through the smart contracts for the m2 mainnet upgrade, as well as analyze the upgrade path from the current mainnet deployment to the target contracts.
Eigenlayer Contracts
What is this? Our core contract repo, primarily responsible for:
- restaking LSTs and beacon chain ETH
- deposits/withdrawals of all assets
- allowing stakers to delegate to operators (operators run nodes/infra for AVSs)
Repository: github.com/Layr-Labs/eigenlayer-contracts Commit: 6e588701c5f543ae4cd34fe9c6567cc46c7eb722
File | blank | comment | code |
---|---|---|---|
eigenlayer-contracts/src/contracts/core/DelegationManager.sol | 103 | 328 | 581 |
eigenlayer-contracts/src/contracts/core/StrategyManager.sol | 48 | 171 | 269 |
eigenlayer-contracts/src/contracts/core/AVSDirectory.sol | 24 | 56 | 103 |
eigenlayer-contracts/src/contracts/core/Slasher.sol | 27 | 17 | 58 |
eigenlayer-contracts/src/contracts/core/DelegationManagerStorage.sol | 21 | 61 | 34 |
eigenlayer-contracts/src/contracts/core/StrategyManagerStorage.sol | 7 | 47 | 33 |
eigenlayer-contracts/src/contracts/core/AVSDirectoryStorage.sol | 9 | 17 | 20 |
eigenlayer-contracts/src/contracts/pods/EigenPod.sol | 110 | 214 | 481 |
eigenlayer-contracts/src/contracts/pods/EigenPodManager.sol | 32 | 101 | 225 |
eigenlayer-contracts/src/contracts/pods/DelayedWithdrawalRouter.sol | 24 | 47 | 167 |
eigenlayer-contracts/src/contracts/pods/EigenPodManagerStorage.sol | 18 | 32 | 39 |
eigenlayer-contracts/src/contracts/pods/EigenPodPausingConstants.sol | 2 | 15 | 9 |
eigenlayer-contracts/src/contracts/strategies/StrategyBaseTVLLimits.sol | 13 | 39 | 40 |
eigenlayer-contracts/src/contracts/strategies/StrategyBase.sol | 35 | 151 | 106 |
eigenlayer-contracts/src/contracts/permissions/Pausable.sol | 18 | 49 | 69 |
eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol | 9 | 12 | 32 |
eigenlayer-contracts/src/contracts/libraries/Merkle.sol | 6 | 70 | 96 |
eigenlayer-contracts/src/contracts/libraries/EIP1271SignatureUtils.sol | 3 | 18 | 20 |
eigenlayer-contracts/src/contracts/libraries/Endian.sol | 1 | 9 | 15 |
eigenlayer-contracts/src/contracts/libraries/BytesLib.sol | 76 | 125 | 289 |
eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol | 51 | 114 | 244 |
eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol | 54 | 276 | 136 |
eigenlayer-contracts/src/contracts/interfaces/IDelegationFaucet.sol | 9 | 1 | 32 |
eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol | 38 | 97 | 88 |
eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol | 28 | 101 | 66 |
eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol | 25 | 85 | 51 |
eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol | 32 | 86 | 47 |
eigenlayer-contracts/src/contracts/interfaces/IWhitelister.sol | 9 | 1 | 31 |
eigenlayer-contracts/src/contracts/interfaces/IDelayedWithdrawalRouter.sol | 16 | 30 | 25 |
eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol | 13 | 66 | 16 |
eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol | 10 | 33 | 24 |
eigenlayer-contracts/src/contracts/interfaces/IPausable.sol | 12 | 39 | 14 |
eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol | 2 | 13 | 12 |
eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol | 6 | 23 | 12 |
eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol | 4 | 8 | 7 |
eigenlayer-contracts/src/contracts/interfaces/ISocketUpdater.sol | 5 | 11 | 5 |
eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol | 1 | 7 | 4 |
SUM: | 937 | 2714 | 3631 |
Eigenlayer Middleware
What is this? Our AVS contract repo, which AVSs will deploy to allow operators to register and begin providing services.
Repository: github.com/Layr-Labs/eigenlayer-middleware Commit: 61d554403279826fcbc38d421580811e57d29270
File | blank | comment | code |
---|---|---|---|
eigenlayer-middleware/src/RegistryCoordinator.sol | 100 | 312 | 507 |
eigenlayer-middleware/src/StakeRegistry.sol | 83 | 218 | 414 |
eigenlayer-middleware/src/IndexRegistry.sol | 47 | 114 | 182 |
eigenlayer-middleware/src/BLSSignatureChecker.sol | 32 | 92 | 166 |
eigenlayer-middleware/src/BLSApkRegistry.sol | 39 | 83 | 162 |
eigenlayer-middleware/src/OperatorStateRetriever.sol | 21 | 46 | 95 |
eigenlayer-middleware/src/ServiceManagerBase.sol | 21 | 40 | 93 |
eigenlayer-middleware/src/RegistryCoordinatorStorage.sol | 10 | 30 | 42 |
eigenlayer-middleware/src/StakeRegistryStorage.sol | 13 | 21 | 25 |
eigenlayer-middleware/src/BLSApkRegistryStorage.sol | 9 | 12 | 19 |
eigenlayer-middleware/src/IndexRegistryStorage.sol | 8 | 17 | 18 |
eigenlayer-middleware/src/libraries/BitmapUtils.sol | 25 | 89 | 85 |
eigenlayer-middleware/src/libraries/BN254.sol | 47 | 104 | 199 |
eigenlayer-middleware/src/interfaces/IStakeRegistry.sol | 33 | 135 | 80 |
eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol | 31 | 62 | 60 |
eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol | 20 | 79 | 41 |
eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol | 11 | 33 | 38 |
eigenlayer-middleware/src/interfaces/IIndexRegistry.sol | 15 | 49 | 26 |
eigenlayer-middleware/src/interfaces/IServiceManager.sol | 7 | 32 | 14 |
eigenlayer-middleware/src/interfaces/ISocketUpdater.sol | 4 | 11 | 5 |
eigenlayer-middleware/src/interfaces/IRegistry.sol | 1 | 8 | 4 |
SUM: | 577 | 1587 | 2275 |
Eigenda
What is this? Our AVS offchain repository - mostly offchain components, but also contains the EigenDAServiceManager.sol
contract, which inherits from contracts in the middleware repository.
Repository: github.com/Layr-Labs/eigenda Commit: 91838ba58b8e2525c7fd1e4db5e9903551eed326
File | blank | comment | code |
---|---|---|---|
eigenda/contracts/src/Imports.sol | 1 | 1 | 3 |
eigenda/contracts/src/core/EigenDAServiceManager.sol | 22 | 30 | 95 |
eigenda/contracts/src/core/EigenDAServiceManagerStorage.sol | 9 | 24 | 13 |
eigenda/contracts/src/interfaces/IEigenDAServiceManager.sol | 18 | 28 | 51 |
eigenda/contracts/src/libraries/EigenDAHasher.sol | 12 | 46 | 48 |
SUM: | 92 | 180 | 323 |
Out of scope
- Scripts and test files (though it may be a good idea to look through these to understand how things work!)
- Offchain components (most of the EigenDA repo is offchain components!)
- Paused functionality on mainnet: lots of current M1 code on mainnet has been paused since deployment, and will not be unpaused. Please check that any mainnet functions you're looking at are unpaused - if they're paused, chances are it's not worth your time!
Out of scope automated findings generated by LightChaserV3
Contact Us
For any issues or concerns regarding this competition, please reach out to core-team on discord.
Summary
Status
CompletedTotal reward:
$100,000
Findings submitted:
128
Start date:
27 Feb 2024 3:00am (local time)
End date:
18 Mar 2024 8:00pm (local time)