reec is a lightweight Ethereum Execution Client written in Rust.
It aims to provide a modular and readable implementation of the Ethereum execution layer, while also serving as a practical base for experimentation and interoperability.
- Lightweight & modular: Clean, minimal execution client architecture written in idiomatic Rust.
- Spec-aligned: Implements the Ethereum Execution Layer as defined in the execution specs.
- Interoperable: Able to sync and communicate with other Ethereum clients.
reec/
├── consensus/ # Consensus-related interfaces (e.g., Engine API integration)
├── rpc/ # JSON-RPC server and method handlers (eth, net, web3)
├── core/ # Core Ethereum execution logic: EVM, block processing, tx pool
├── net/ # DevP2P networking, peer discovery, RLPx, protocol handling
├── storage/ # Database layer: chain data, state trie, receipts, etc.
Add support to follow a post-Merge localnet as a read-only RPC Node. This first milestone will only support a canonical chain (every incoming block has to be the child of the current head).
RPC endpoints
engine_newPayloadV3(excl. block building)eth_blobBaseFeeeth_blockNumbereth_call(at head block)eth_chainIdeth_createAccessList(at head block)eth_estimateGaseth_feeHistoryeth_getBalance(at head block)eth_getBlockByHasheth_getBlockByNumbereth_getBlockReceiptseth_getBlockTransactionCountByNumbereth_getCode(at head block)eth_getStorageAt(at head block)eth_getTransactionByBlockHashAndIndexeth_getTransactionByBlockNumberAndIndexeth_getTransactionByHash
Implement DevP2P protocol, including RLPx p2p and eth capabilities. This will allow us to receive blocks and transactions from other nodes and is a prerequisite for the next milestones.
RPC endpoints
admin_nodeInfo
Implement support for block reorganizations (reorgs) and historical state queries. This milestone involves persisting the state trie to enable efficient access to historical states and implementing a tree structure for the blockchain to manage multiple chain branches. We'll develop algorithms for chain reorganizations and enhance the query system to support state lookups at any historical block.
RPC endpoints
engine_exchangeCapabilitiesengine_forkchoiceUpdatedV3eth_call(at any block)eth_createAccessList(at any block)eth_getBalance(at any block)eth_getCode(at any block)eth_getProofeth_getStorageAt(at any block)
Add snap sync protocol, which lets us get a recent copy of the blockchain state instead of going through all blocks from genesis. Since we don't support older versions of the spec by design, this is a prerequisite to being able to sync the node with public networks, including mainnet.
RPC endpoints
engine_forkchoiceUpdatedV3engine_newPayloadV3eth_syncing
Keep transactions received from other nodes in memory, and add the ability to build new payloads, so that the consensus client can propose new blocks.
RPC endpoints
engine_getPayloadV3engine_newPayloadV3(with block building)
We're building reec in the open and welcome contributors!
If you'd like to contribute:
Clone the repo and set up your environment
Look through open issues
Create a PR with clear commit history and tests
Be kind and respectful — we’re here to learn and build together.