A minimalist and fast Lean Consensus client by LambdaClass, bringing expertise in distributed systems and blockchain infrastructure to deliver a robust and performant implementation.
See the code
Minimalist, fast and modular implementation of the Lean Ethereum client written in Rust.
π Visit our website at ethlambda.xyz to learn more about the project.
We use cargo as our build system, but prefer make as a convenient wrapper for common tasks. These are some common targets:
# Formats all code
make fmt
# Checks and lints the code
make lint
# Runs all tests
make test
# Builds a docker image tagged as "ghcr.io/lambdaclass/ethlambda:local"
make docker-build DOCKER_TAG=local
Run make help or take a look at our Makefile for other useful commands.
To run a local devnet with multiple clients using lean-quickstart:
# This will clone lean-quickstart, build the docker image, and start a local devnet
make run-devnet
This generates fresh genesis files and starts all configured clients with metrics enabled.
Press Ctrl+C to stop all nodes.
Note: On Linux, QUIC performance benefits from larger UDP receive buffers. If you see warnings about buffer sizes, increase the kernel limit:
sudo sysctl -w net.core.rmem_max=7340032 sudo sysctl -w net.core.wmem_max=7340032To persist across reboots, add to
/etc/sysctl.conf. For Docker, pass--sysctl net.core.rmem_max=7340032 --sysctl net.core.wmem_max=7340032.
Important: When running nodes manually (outside
make run-devnet), at least one node must be started with--is-aggregatorfor attestations to be aggregated and included in blocks. Without this flag, the network will produce blocks but never finalize.
For custom devnet configurations, go to lean-quickstart/local-devnet/genesis/validator-config.yaml and edit the file before running the command above. See lean-quickstart's documentation for more details on how to configure the devnet.
Many long-established clients accumulate bloat over time. This often occurs due to the need to support legacy features for existing users or through attempts to implement overly ambitious software. The result is often complex, difficult-to-maintain, and error-prone systems.
In contrast, our philosophy is rooted in simplicity. We strive to write minimal code, prioritize clarity, and embrace simplicity in design. We believe this approach is the best way to build a client that is both fast and resilient. By adhering to these principles, we will be able to iterate fast and explore next-generation features early.
Read more about our engineering philosophy in this post of our blog.
The following links, repos, companies and projects have been important in the development of this repo, we have learned a lot from them and want to thank and acknowledge them.
If we forgot to include anyone, please file an issue so we can add you. We always strive to reference the inspirations and code we use, but as an organization with multiple people, mistakes can happen, and someone might forget to include a reference.
Full documentation is available in the docs/ directory. Please refer to it for setup, usage, and development details. For better viewing, we have it hosted in docs.ethlambda.xyz.
The client implements the core features of a Lean Ethereum consensus client:
Additional features:
Docker images are published to ghcr.io/lambdaclass/ethlambda with the following tags:
| Tag | Description |
|---|---|
devnetX | Stable image for a specific devnet (e.g. devnet4) |
latest | Alias for the latest stable image of the currently running devnet |
unstable | Built from the latest main commit; promoted to devnetX/latest once tested |
sha-XXXXXXX | Specific commit |
RELEASE.md has more details on our release process and how to tag new images.
We are running the pq-devnet-5 spec. A Docker tag devnet5 is available for this version.
pq-devnet-6 is in a planning phase; no features have been specified yet. Likely candidates are replacing LMD-GHOST and 3SF-mini, or execution layer integration.
Docker tags for each devnet are released, with format devnetX (i.e. devnet1, devnet2, devnet3, devnet4).
Support for older devnet releases is discontinued when the next devnet version is released.
We wrote a blogpost about what we think should be included in the near future.
Some features we are looking to implement in the near future, in order of priority:
We have a proof-of-concept formalization of a part of the state transition function in Lean4 in PR #269.
ethereum/pm cover cross-client Lean Ethereum work and related updates; the meeting links are posted on each issue.We take security seriously. If you discover a vulnerability in this project, please report it responsibly.
For more details, please refer to our Security Policy.
We welcome contributions! Please read our CONTRIBUTING.md for guidelines on how to get involved.
Rust
87.9%
Shell
5.7%
JavaScript
2.2%
HTML
1.5%
A minimalist and fast Lean Consensus client by LambdaClass, bringing expertise in distributed systems and blockchain infrastructure to deliver a robust and performant implementation.
See the code
Minimalist, fast and modular implementation of the Lean Ethereum client written in Rust.
π Visit our website at ethlambda.xyz to learn more about the project.
We use cargo as our build system, but prefer make as a convenient wrapper for common tasks. These are some common targets:
# Formats all code
make fmt
# Checks and lints the code
make lint
# Runs all tests
make test
# Builds a docker image tagged as "ghcr.io/lambdaclass/ethlambda:local"
make docker-build DOCKER_TAG=local
Run make help or take a look at our Makefile for other useful commands.
To run a local devnet with multiple clients using lean-quickstart:
# This will clone lean-quickstart, build the docker image, and start a local devnet
make run-devnet
This generates fresh genesis files and starts all configured clients with metrics enabled.
Press Ctrl+C to stop all nodes.
Note: On Linux, QUIC performance benefits from larger UDP receive buffers. If you see warnings about buffer sizes, increase the kernel limit:
sudo sysctl -w net.core.rmem_max=7340032 sudo sysctl -w net.core.wmem_max=7340032To persist across reboots, add to
/etc/sysctl.conf. For Docker, pass--sysctl net.core.rmem_max=7340032 --sysctl net.core.wmem_max=7340032.
Important: When running nodes manually (outside
make run-devnet), at least one node must be started with--is-aggregatorfor attestations to be aggregated and included in blocks. Without this flag, the network will produce blocks but never finalize.
For custom devnet configurations, go to lean-quickstart/local-devnet/genesis/validator-config.yaml and edit the file before running the command above. See lean-quickstart's documentation for more details on how to configure the devnet.
Many long-established clients accumulate bloat over time. This often occurs due to the need to support legacy features for existing users or through attempts to implement overly ambitious software. The result is often complex, difficult-to-maintain, and error-prone systems.
In contrast, our philosophy is rooted in simplicity. We strive to write minimal code, prioritize clarity, and embrace simplicity in design. We believe this approach is the best way to build a client that is both fast and resilient. By adhering to these principles, we will be able to iterate fast and explore next-generation features early.
Read more about our engineering philosophy in this post of our blog.
The following links, repos, companies and projects have been important in the development of this repo, we have learned a lot from them and want to thank and acknowledge them.
If we forgot to include anyone, please file an issue so we can add you. We always strive to reference the inspirations and code we use, but as an organization with multiple people, mistakes can happen, and someone might forget to include a reference.
Full documentation is available in the docs/ directory. Please refer to it for setup, usage, and development details. For better viewing, we have it hosted in docs.ethlambda.xyz.
The client implements the core features of a Lean Ethereum consensus client:
Additional features:
Docker images are published to ghcr.io/lambdaclass/ethlambda with the following tags:
| Tag | Description |
|---|---|
devnetX | Stable image for a specific devnet (e.g. devnet4) |
latest | Alias for the latest stable image of the currently running devnet |
unstable | Built from the latest main commit; promoted to devnetX/latest once tested |
sha-XXXXXXX | Specific commit |
RELEASE.md has more details on our release process and how to tag new images.
We are running the pq-devnet-5 spec. A Docker tag devnet5 is available for this version.
pq-devnet-6 is in a planning phase; no features have been specified yet. Likely candidates are replacing LMD-GHOST and 3SF-mini, or execution layer integration.
Docker tags for each devnet are released, with format devnetX (i.e. devnet1, devnet2, devnet3, devnet4).
Support for older devnet releases is discontinued when the next devnet version is released.
We wrote a blogpost about what we think should be included in the near future.
Some features we are looking to implement in the near future, in order of priority:
We have a proof-of-concept formalization of a part of the state transition function in Lean4 in PR #269.
ethereum/pm cover cross-client Lean Ethereum work and related updates; the meeting links are posted on each issue.We take security seriously. If you discover a vulnerability in this project, please report it responsibly.
For more details, please refer to our Security Policy.
We welcome contributions! Please read our CONTRIBUTING.md for guidelines on how to get involved.
Rust
87.9%
Shell
5.7%
JavaScript
2.2%
HTML
1.5%