Eigenlayer
Docs
Source
ChefGPT

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

test.sol
Base.sol
console.sol
console2.sol
IMulticall3.sol
StdAssertions.sol
StdChains.sol
StdCheats.sol
StdError.sol
StdInvariant.sol
StdJson.sol
StdMath.sol
StdStorage.sol
StdStyle.sol
StdUtils.sol
Test.sol
Vm.sol
OwnableUpgradeable.sol
Initializable.sol
ReentrancyGuardUpgradeable.sol
AddressUpgradeable.sol
ContextUpgradeable.sol
MathUpgradeable.sol
Ownable.sol
draft-IERC1822.sol
IERC1271.sol
BeaconProxy.sol
IBeacon.sol
ERC1967Upgrade.sol
Proxy.sol
draft-IERC20Permit.sol
IERC20.sol
SafeERC20.sol
Address.sol
Context.sol
Create2.sol
ECDSA.sol
Math.sol
StorageSlot.sol
Strings.sol
Staker.sol
DelegationManager.sol
DelegationManagerStorage.sol
Slasher.sol
StrategyManager.sol
StrategyManagerStorage.sol
IBeaconChainOracle.sol
IBLSPublicKeyCompendium.sol
IBLSRegistry.sol
IDelayedService.sol
IDelayedWithdrawalRouter.sol
IDelegationManager.sol
IEigenPod.sol
IEigenPodManager.sol
IETHPOSDeposit.sol
IPausable.sol
IPauserRegistry.sol
IPaymentManager.sol
IQuorumRegistry.sol
IRegistry.sol
IServiceManager.sol
ISlasher.sol
IStrategy.sol
IStrategyManager.sol
IVoteWeigher.sol
IWhitelister.sol
BeaconChainProofs.sol
BN254.sol
BytesArrayBitmaps.sol
BytesLib.sol
EIP1271SignatureUtils.sol
Endian.sol
Merkle.sol
MiddlewareUtils.sol
StructuredLinkedList.sol
BLSPublicKeyCompendium.sol
BLSRegistry.sol
BLSSignatureChecker.sol
ECDSARegistry.sol
HashThreshold.sol
PaymentManager.sol
RegistryBase.sol
VoteWeigherBase.sol
VoteWeigherBaseStorage.sol
Pausable.sol
PauserRegistry.sol
BeaconChainOracle.sol
DelayedWithdrawalRouter.sol
EigenPod.sol
EigenPodManager.sol
EigenPodPausingConstants.sol
StrategyBase.sol
StrategyBaseTVLLimits.sol
UpgradeableSignatureCheckingUtils.sol

TVL

$10.81B
Downloads149

Chains

Authors

Eigenlayer
Info
Source
ChefGPT
Expand
Share

Get Cookin'

Downloads149

Chains

Authors

EigenLayer

🚧 The Slasher contract is under active development and its interface expected to change. We recommend writing slashing logic without integrating with the Slasher at this point in time. 🚧

EigenLayer (formerly 'EigenLayr') is a set of smart contracts deployed on Ethereum that enable restaking of assets to secure new services. At present, this repository contains *both* the contracts for EigenLayer *and* a set of general "middleware" contracts, designed to be reusable across different applications built on top of EigenLayer.

Note that the interactions between middleware and EigenLayer are not yet "set in stone", and may change somewhat prior to the platform being fully live on mainnet; in particular, payment architecture is likely to evolve. As such, the "middleware" contracts should not be treated as definitive, but merely as a helpful reference, at least until the architecture is more settled.

Click the links in the Table of Contents below to access more specific documentation. We recommend starting with the EigenLayer Technical Specification to get a better overview before diving into any of the other docs. For contracts addresses deployed on Goerli, click here.

Table of Contents

Design Docs

Flow Docs

Installation and Running Tests / Analyzers

Installation

foundryup

forge install

This repository uses Foundry as a smart contract development toolchain.

See the Foundry Docs for more info on installation and usage.

Natspec Documentation

You will notice that we also have hardhat installed in this repo. This is only used to generate natspec docgen. This is our workaround until foundry finishes implementing the forge doc command.

To generate the docs, run npx hardhat docgen (you may need to run npm install first). The output is located in docs/docgen

Run Tests

Prior to running tests, you should set up your environment. At present this repository contains fork tests against ETH mainnet; your environment will use an RPC_MAINNET key to run these tests. See the .env.example file for an example -- two simple options are to copy the LlamaNodes RPC url to your env or use your own infura API key in the provided format. If you don't set the RPC_MAINNET key then the test cases will default to LlamaNodes RPC url when fork testing.

The main command to run tests is:

forge test -vv

Run Tests on a Fork

Environment config is contained in config.yml. Before running the following commands, install yq. Then set up the environment with this script:

source source-env.sh [CHAIN]

for example, on goerli: source source-env.sh goerli. Currently options for [CHAIN] are goerli, local. Then to run the actual tests:

forge test --fork-url [RPC_URL]

Run Static Analysis

solhint 'src/contracts/**/*.sol'

slither .

Generate Inheritance and Control-Flow Graphs

first install surya

then run

surya inheritance ./src/contracts/**/*.sol | dot -Tpng > InheritanceGraph.png

and/or

surya graph ./src/contracts/middleware/*.sol | dot -Tpng > MiddlewareControlFlowGraph.png

and/or

surya mdreport surya_report.md ./src/contracts/**/*.sol

Deployments

M1 (Current Mainnet Deployment)

NameSolidityProxyImplementationNotes
StrategyManagerStrategyManager0x8586...075A0x5d25...42FbProxy: OpenZeppelin TUP@4.7.1
Strategy: cbETHStrategyBaseTVLLimits0x5494...56bc0xdfdA...46d3Proxy: OpenZeppelin TUP@4.7.1
Strategy: stETHStrategyBaseTVLLimits0x93c4...564D0xdfdA...46d3Proxy: OpenZeppelin TUP@4.7.1
Strategy: rETHStrategyBaseTVLLimits0x1BeE...dCD20xdfdA...46d3Proxy: OpenZeppelin TUP@4.7.1
EigenPodManagerEigenPodManager0x91E6...A3380xEB86...e111Proxy: OpenZeppelin TUP@4.7.1
EigenPod (beacon)EigenPod0x5a2a...90730x5c86...9dA7- Beacon: OpenZeppelin BeaconProxy@4.7.1
- Deployed pods use UpgradableBeacon@4.7.1
DelayedWithdrawalRouterDelayedWithdrawalRouter0x7Fe7...23D80x44Bc...E2AFProxy: OpenZeppelin TUP@4.7.1
DelegationManagerDelegationManager0x3905...f37A0xf97E...75e4Proxy: OpenZeppelin TUP@4.7.1
SlasherSlasher0xD921...c3Cd0xef31...d6d8Proxy: OpenZeppelin TUP@4.7.1
PauserRegistryPauserRegistry-0x0c43...7060
Pauser MultisigGnosisSafe@1.3.00x5050…23900xd9db...9552Proxy: GnosisSafeProxy@1.3.0
Community MultisigGnosisSafe@1.3.00xFEA4...c5980xd9db...9552Proxy: GnosisSafeProxy@1.3.0
Executor MultisigGnosisSafe@1.3.00x369e...91110xd9db...9552Proxy: GnosisSafeProxy@1.3.0
Operations MultisigGnosisSafe@1.3.00xBE16...3e900xd9db...9552Proxy: GnosisSafeProxy@1.3.0
TimelockCompound: Timelock.sol-0xA6Db...0EAF
Proxy AdminOpenZeppelin ProxyAdmin@4.7.1-0x8b95...2444
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
test.sol
Base.sol
console.sol
console2.sol
IMulticall3.sol
StdAssertions.sol
StdChains.sol
StdCheats.sol
StdError.sol
StdInvariant.sol
StdJson.sol
StdMath.sol
StdStorage.sol
StdStyle.sol
StdUtils.sol
Test.sol
Vm.sol
OwnableUpgradeable.sol
Initializable.sol
ReentrancyGuardUpgradeable.sol
AddressUpgradeable.sol
ContextUpgradeable.sol
MathUpgradeable.sol
Ownable.sol
draft-IERC1822.sol
IERC1271.sol
BeaconProxy.sol
IBeacon.sol
ERC1967Upgrade.sol
Proxy.sol
draft-IERC20Permit.sol
IERC20.sol
SafeERC20.sol
Address.sol
Context.sol
Create2.sol
ECDSA.sol
Math.sol
StorageSlot.sol
Strings.sol
Staker.sol
DelegationManager.sol
DelegationManagerStorage.sol
Slasher.sol
StrategyManager.sol
StrategyManagerStorage.sol
IBeaconChainOracle.sol
IBLSPublicKeyCompendium.sol
IBLSRegistry.sol
IDelayedService.sol
IDelayedWithdrawalRouter.sol
IDelegationManager.sol
IEigenPod.sol
IEigenPodManager.sol
IETHPOSDeposit.sol
IPausable.sol
IPauserRegistry.sol
IPaymentManager.sol
IQuorumRegistry.sol
IRegistry.sol
IServiceManager.sol
ISlasher.sol
IStrategy.sol
IStrategyManager.sol
IVoteWeigher.sol
IWhitelister.sol
BeaconChainProofs.sol
BN254.sol
BytesArrayBitmaps.sol
BytesLib.sol
EIP1271SignatureUtils.sol
Endian.sol
Merkle.sol
MiddlewareUtils.sol
StructuredLinkedList.sol
BLSPublicKeyCompendium.sol
BLSRegistry.sol
BLSSignatureChecker.sol
ECDSARegistry.sol
HashThreshold.sol
PaymentManager.sol
RegistryBase.sol
VoteWeigherBase.sol
VoteWeigherBaseStorage.sol
Pausable.sol
PauserRegistry.sol
BeaconChainOracle.sol
DelayedWithdrawalRouter.sol
EigenPod.sol
EigenPodManager.sol
EigenPodPausingConstants.sol
StrategyBase.sol
StrategyBaseTVLLimits.sol
UpgradeableSignatureCheckingUtils.sol