# EPF update ## Introduction This update is probably my last one for this project. I will not be able to finish it in the duration of the EPF. I have been really busy for the last few weeks and I have a lot of academic submissions and I have my final exams coming up. Even besides that, I have been stuck in the same place in my progress on the project for the past 2-3 weeks. The project is technically challenging and will require more time to really dive deep and understand the low level Merkle tree structure and implement it. It is also hard to debug because the expected value of individual nodes and the state of the tree are hard to determine. Anyway, due to my exams and submissions, I am busy for this entire month. I might be able to take a look at the project in December, but before that I have no time. ## Current Status of Project - [Skanda Bhat](https://github.com/SkandaBhat) implemented all the execution related changes for the log index structure in Reth ([PR for reference](https://github.com/paradigmxyz/reth/pull/18305)). - Consensus related changes are needed to be done. ## My progress so far: - I have written the code for getting the log root hash as written in the [Geth Implementation](https://github.com/zsfelfoldi/go-ethereum/blob/proof-poc/core/filtermaps). It includes all the consensus related changes except for generating and verifying proofs. - I have written tests for `mem_tree.rs` file, and the memory tree is being hashed and getting the root hash of it is working. - It needs to be integrated properly with the logs indexing portion, basically it is failing to properly add logs to the tree and hash the tree. ## Suggested Future Steps - Write tests for the `hasher.rs` file and the `log_index_hasher.rs` file to make sure they work properly. - Then test the full cycle using a `MockEthProvider` to get blocks and logs. - If that is completed, then the root hash can be added in the logsBloom field (pad it with zeroes to fit the size) and tested with [other implementations of this EIP](https://pureth.guide/implementations-7745/) ([EIP-7745](https://eips.ethereum.org/EIPS/eip-7745)). My current code is uploaded here: [Reth Log Index](https://github.com/18aaddy/reth/tree/feature/log-index-development) in the `feature/log-index-development` branch. ### Other Small Issues - Alloy's `Log` struct doesn't have fields like the block which the log is a part of, the transaction index in the block and the index of the log in the transaction, which are needed in the log tree. - It might be beneficial to use `pub nodes: Vec<Option<MemTreeNode>>` instead of `pub nodes: Vec<MemTreeNode>` to know which nodes are initialised and which aren't yet. A zero value might not be the best way. ## Resources that might be helpful - [2D Logs Index explainer video](https://github.com/etan-status/purified-web3/releases/download/2025-portal/2025-EIP-7745-Intro.mp4) - [PPT Slides which explain the global log index](https://purified-web3.box/Slides/2025-EthereumZuri.ch.pdf) - https://pureth.guide -> Current status of Pureth and implementations in different clients. Current Implementation branch: [18aaddy/reth/feat/log-index-development](https://github.com/18aaddy/reth/tree/feature/log-index-development)