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:
- Write minimal code
- Prioritize clarity
- 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, either from the Ethereum roadmap or from innovations from the L2s.
To build the main executable and its crates, run:
just buildTo run the tests from a crate, run:
just test <crate>Or just run all the tests:
just test-allTo run a localnet, we can use a fork of Ethereum Package, specifically this branch that adds support to our client.
# Make sure to have docker installed
# Kurtosis cli
brew install kurtosis-tech/tap/kurtosis-cli
# Lambdaclass fork of the kurtosis ethereum package.
git clone https://github.com/lambdaclass/ethereum-package.git
cd ethereum-package
# We're now working in the ethereum-rust-integration branch.
git checkout ethereum-rust-integrationCreate a network_params.yaml to set up the localnet
participants:
- el_type: geth
cl_type: lighthouse
count: 2
- el_type: ethereumrust
cl_type: lighthouse
vc_count: 0
validator_count: 0
count: 1Run the localnet
# Make sure we build our docker image with latest changes
docker build -t ethereum_rust .
# Assuming both repos are in the same directory and we're in the rust_ethereum directory:
kurtosis run --enclave lambdanet ../ethereum-package --args-file network_params.yamlAdd support to participate in a Cancun localnet as a read-only node.
RPC endpoints
engine_newPayloadV3(partially)eth_getBlockByHasheth_getBlockByNumbereth_blockNumbereth_getBlockReceiptseth_getBlockTransactionCountByNumbereth_getTransactionByBlockHashAndIndexeth_getTransactionByBlockNumberAndIndex
See issues and progress: https://github.com/lambdaclass/ethereum_rust/milestone/1
Implement DevP2P protocol, including RLPx and eth capability.
RPC endpoints
eth_getBalanceeth_getCodeeth_getStorageAteth_getProof
See issues and progress: https://github.com/lambdaclass/ethereum_rust/milestone/2
Support snap sync on public testnets and mainnet.
RPC endpoints
eth_syncingengine_forkchoiceUpdatedV3engine_newPayloadV3
See issues and progress: https://github.com/lambdaclass/ethereum_rust/milestone/3