---
# System prepended metadata

title: Engine Api Reth Design Doc

---

# Engine Api Reth Design Doc

1. Downloader
2. API
    * [`get_payload`](https://github.com/paradigmxyz/reth/blob/2c9a54c0a3a3460df42752f40d64dd89bb57ce5e/crates/rpc/rpc-engine-api/src/engine_api.rs#L122):
        * Used when you want 
    * [`new_payload`](https://github.com/paradigmxyz/reth/blob/2c9a54c0a3a3460df42752f40d64dd89bb57ce5e/crates/rpc/rpc-engine-api/src/engine_api.rs#L186): Received when the CL receives new block. The CL asks the EL to verify, EL returns OK/NOTOK. Does not modify state.
        * If you want to stay at the tip you need to keep receiving blocks from CL, otherwise you'll receive them over P2P.
    * fork choice updated: 
5. Multiple Fork Handling
6. Time-based hardforks
7. Block Builder
8. TxPool

# Missing
* `self.local_store` is never modified, so `get_payload` is always empty?
* https://github.com/paradigmxyz/reth/blob/2c9a54c0a3a3460df42752f40d64dd89bb57ce5e/crates/rpc/rpc-engine-api/src/engine_api.rs#L219 notify fork choice rule
* Multiple CLs? 


1. Update the tip
2. No-reorg
    3. Downlaoders keep going
4. Reorg


Map<BlockHash, Block>

1. No reorg / all the blocks to new fork chocie are local
    2. 