## EPF Final Update: ERA File Support In Lodestar plus Zig-side tooling
### TL;dr
- Implemented ERA Reading and Writing in Lodestar.
- Implemented [3 ssz](https://github.com/ChainSafe/lodestar-z/pull/99) EIPs ([EIP-7916](https://eips.ethereum.org/EIPS/eip-7916),[EIP-7495](https://eips.ethereum.org/EIPS/eip-7495),[EIP-8016](https://eips.ethereum.org/EIPS/eip-8016))
- [Implemented Fulu specs](https://github.com/ChainSafe/lodestar-z/pull/71) for the State Transition zig library.
- Other Contributions.
## Abstract
This fellowship consisted of two parallel but independent tracks:
1. Support for **ERA files** in the Lodestar consensus client, enabling standardized, compact historical data storage.
2. A implementation of the SSZ Progressive Types and the Fulu specs in State Transition-Z, targeting the computationally intensive parts of consensus-client execution.
## Status of the Project
- The Reading and Writing of ERA files is merged into Lodestar
- The Beacon Db integration of ERA files to act as a archival node is still left to be merged.
- SSZ Progressive Types are passing spec tests but are unmerged
- Fulu specs of State Transition zig library is implemented and review is in progress.
## 🛠️ ERA Implementation
I used the [specs from Nimbus](https://github.com/status-im/nimbus-eth2/blob/stable/docs/e2store.md) and the official [era specs](https://github.com/eth-clients/e2store-format-specs/blob/main/formats/era.md) for my implementation. Even tho Era has an official spec , there are some nuances that were more clear with the nimbus spec and the [ethereum js implementation](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/e2store/src/era). I have a local implementation ready that can produce and consume era files. Lodestar uses Level Db and I will first get my era consumption pr merged and then proceed with ERA production.
#### All PRs related to ERA
<details>
<summary>🔥 List of PRs:</summary>
[Reading and Writing of ERA files
](https://github.com/ChainSafe/lodestar/pull/8035)
</details>
## ⚡️ Lodestar-Zig Implementation
Due to Lodestar Team's more involvement in Fusaka Release and their push towards the zig and typescript hybrid client , I started contributing to their SSZ library and I started to work on an issue that implemented Progressive Types. My first week has been to revise and understand SSZ and look more into what Progressive types are and what it does. My original work was in their [ssz zig libraries](https://github.com/ChainSafe/ssz-z/pull/64) where I implemented the progressive types one by one such as Progressive List, Progressive Bitlist, Progressive Containers and Compatible Union along with their spec tests. I found some errors in consensus spec data for `v1.6.0-alpha.4` which were mainly caused when generating in multithreading which were later fixed in `v1.6.0`.
I also added the EIP-7917 - Deterministic proposer lookahead as part of implementing Fulu specs for state transition zig library .
#### All PRs related to Zig Contributions
<details>
<summary>🔥 List of PRs:</summary>
[Implement the equal api
](https://github.com/ChainSafe/ssz-z/pull/33) [ Fix test in List Composite Test ](https://github.com/ChainSafe/ssz-z/pull/63)
[Progressive Types](https://github.com/ChainSafe/lodestar-z/pull/99)
[Implement Fulu Specs](https://github.com/ChainSafe/lodestar-z/pull/71)
</details>
## Whats Next
- Complete the ERA implementation and implement the later ERA specs like ERA Blobs.
- Contribute to Lodestar-Z as Lodestar fully embraces a hybrid typescript zig client.
## 🙏 Thanks
I would like to thank Josh and Mario for coordinating this wonderful program! It is an honor for me to join this fellowship. Office hours are fantastic and breakout rooms are awesome!
I would like to thank Phil for guiding me on some situations when i felt lost. I would also like to thank Cayman who is my mentor , Nico , Mathiew for jumping in when i needed reviews on my pr.
I would also thank my fellows who participated with me in this cohort. It was awesome seeing the work others were doing.