# 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.