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