Thank you for considering contributing to EigenLayer! This guide will help you set up your development environment and submit high-quality pull requests (PRs).
To set up this repo for the first time, run:
make deps
This will:
- Install the pre-commit hook
- Install foundry and its tools
- Install abigen
See the Foundry docs for more info on installation and usage of foundry. If you already have it, you can build this project with these commands:
foundryup
forge build
Verify your setup by running the test suite:
forge test
Congratulations! You've successfully set up your repository and run the tests.
We have a few fork tests against ETH mainnet. Passing these requires the environment variable RPC_MAINNET
to be set. See .env.example
for an example. Once you've set up your environment, forge test
should show these fork tests passing.
Additionally, to run all tests in a forked environment, install yq. Then, set up your environment by running the following command.
source bin/source-env.sh [local]
Then run the tests:
forge test --fork-url [RPC_URL]
- Install solhint, then run:
solhint 'src/contracts/**/*.sol'
- Install slither, then run:
slither .
- Install surya and graphviz:
npm i -g surya
apt install graphviz
- Then, run:
surya inheritance ./src/contracts/**/*.sol | dot -Tpng > InheritanceGraph.png
surya mdreport surya_report.md ./src/contracts/**/*.sol
make bindings
To update the storage reports in /docs/storage-report
run:
make storage-report
Format your PR title as follows:
<type>: <subject>
Where:
- Type: Indicates the nature of the change
- Subject: A brief description of the change
Use one of these types:
Type | Description |
---|---|
feat | A new feature |
fix | A bug fix |
docs | Documentation-only changes |
style | Changes that don't affect code meaning (formatting) |
refactor | Code changes that neither fix bugs nor add features |
ci | Changes to continuous integration configuration |
perf | Performance improvements |
test | Adding or correcting tests |
chore | Changes to build process or auxiliary tools |
release | Merging a release-dev branch to main |
Remember to set the appropriate PR label as well.
Use this template for your PR description:
**Motivation:**
- Describe the context and reason for the change
**Modifications:**
- Detail the specific changes made
**Result:**
- Explain the outcome or effects of the change
feat: Implement new withdrawal flow in StrategyManager
**Motivation:**
The current withdrawal process is inefficient and leads to delays for users.
**Modifications:**
- Refactored the `withdraw` function in `StrategyManager.sol`
- Updated associated unit tests to reflect changes
- Modified documentation to explain the new withdrawal process
**Result:**
The withdrawal process is now more efficient, reducing wait times for users.
- All PRs should include appropriate test coverage
- Write unit and integration tests that verify your changes
- Ensure all existing tests continue to pass
For first-time external contributors: A maintainer will review your PR and manually approve CI to run.
By following these guidelines, you help maintain the quality and readability of the EigenLayer codebase. We appreciate your contributions and look forward to collaborating with you!