Skip to content

mikebraver/eigenlayer-contracts

 
 

Repository files navigation

EigenLayer

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

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 need 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.

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)

Name Solidity Proxy Implementation Notes
StrategyManager StrategyManager 0x8586...075A 0x5d25...42Fb Proxy: OpenZeppelin TUP@4.7.1
Strategy: cbETH StrategyBaseTVLLimits 0x5494...56bc 0xdfdA...46d3 Proxy: OpenZeppelin TUP@4.7.1
Strategy: stETH StrategyBaseTVLLimits 0x93c4...564D 0xdfdA...46d3 Proxy: OpenZeppelin TUP@4.7.1
Strategy: rETH StrategyBaseTVLLimits 0x1BeE...dCD2 0xdfdA...46d3 Proxy: OpenZeppelin TUP@4.7.1
EigenPodManager EigenPodManager 0x91E6...A338 0xEB86...e111 Proxy: OpenZeppelin TUP@4.7.1
EigenPod (beacon) EigenPod 0x5a2a...9073 0x5c86...9dA7 - Beacon: OpenZeppelin BeaconProxy@4.7.1
- Deployed pods use UpgradableBeacon@4.7.1
DelayedWithdrawalRouter DelayedWithdrawalRouter 0x7Fe7...23D8 0x44Bc...E2AF Proxy: OpenZeppelin TUP@4.7.1
DelegationManager DelegationManager 0x3905...f37A 0xf97E...75e4 Proxy: OpenZeppelin TUP@4.7.1
Slasher Slasher 0xD921...c3Cd 0xef31...d6d8 Proxy: OpenZeppelin TUP@4.7.1
PauserRegistry PauserRegistry - 0x0c43...7060
Pauser Multisig GnosisSafe@1.3.0 0x5050…2390 0xd9db...9552 Proxy: GnosisSafeProxy@1.3.0
Community Multisig GnosisSafe@1.3.0 0xFEA4...c598 0xd9db...9552 Proxy: GnosisSafeProxy@1.3.0
Executor Multisig GnosisSafe@1.3.0 0x369e...9111 0xd9db...9552 Proxy: GnosisSafeProxy@1.3.0
Operations Multisig GnosisSafe@1.3.0 0xBE16...3e90 0xd9db...9552 Proxy: GnosisSafeProxy@1.3.0
Timelock Compound: Timelock.sol - 0xA6Db...0EAF
Proxy Admin OpenZeppelin ProxyAdmin@4.7.1 - 0x8b95...2444

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Solidity 94.7%
  • Ruby 3.7%
  • Python 0.8%
  • Shell 0.4%
  • JavaScript 0.2%
  • TypeScript 0.1%
  • Other 0.1%