Try โ€‚โ€‰HackMD

Ephemery Genesis Implementation in Lighthouse and Reth - Final EPF Update


Project summary

Ephemery is a testnet that brings a whole new concept, solving many problems that arise with the traditional testnets, such as Goerli or Sepolia. With Ephemery, instead of the network running for several years similarly to mainnet, it gets completely restarted after a set period of time. This process includes the genesis function, which automatically generates all the important genesis information after the client is launched, and the restart function, which ensures that the client gets reset and the previous values get replaced with new values with every new iteration. My contribution to EPF was mainly the implementation of the genesis function in a pair of clients - Lighthouse and Reth. This would allow for users to easily run the clients with Ephemery built-in and get their network set up and running without having to manually set any values regarding the network genesis configuration.

Status report

Lighthouse PR (WIP)
Reth PR (WIP)

โœ… Lighthouse - automatic network config generation and basic genesis state download.
โœ… Reth - automatic network config generation.
โœ… EIP - validated, fixed any mistakes and inconsistencies.

At this point, Reth and Lighthouse can be launched with the network/chain option set to "ephemery", without the need of any manual intervention, except the removal of the data directories before the clients are launched again after an iteration change.

๐Ÿ”œ Lighthouse - making genesis state download more robust.
๐Ÿ”œ Lighthouse & Reth - fixing tests broken by Ephemery functionality and creating more tests for Ephemery.
๐Ÿ”œ Reset function research, discussion and implementation.
๐Ÿ”œ More client pairs?

Future of the project

There are still many improvements that need to be done - especially in the area of genesis state download, which needs to be discussed with Lighthouse team and fixed to be more robust. Possible improvements include calculating/downloading and comparing checksum and genesis validators root (currently turned off for Ephemery) and checkpoint sync functionality also for built-in networks.

The implementations are definitely not ready yet, since the changes are quite fundamental and have broken some tests, while tests for the Ephemery functionality itself have not yet been created. The changes need to be discussed with Lighthouse and Reth teams, fixed according to their reviews and opinions, and then thoroughly tested. This will possibly take quite some time due to the character of the changes and I'm going to work on this in the near future.

In the more distant future, discussions around the reset function need to happen. There has been some concern regarding this functionality, since it requires even more radical changes than the genesis function, therefore this needs to be thoroughly thought out.

Self-evaluation

The most difficult part of the process has been the learning curve - the clients have very large codebases, which are difficult to grasp for someone like me, who previously had no experience with contributions to clients. The concepts were completely new and I still was a Rust newbie, although I do know C, which helped me tremendously. Now I'm quite confident I'd be able to contribute to more areas of the clients and even do my own Rust projects, but the beginnings were quite rough and consisted mainly of going through all the functions, trying to understand the whole process after the client gets launched. In conclusion, I'm satisfied with my progress, because while I was thinking the process of implementation would be a bit quicker, I've learned a lot during the EPF time and now, this task would definitely take me considerably less time.
The one thing I would improve is my ability of communication - I like to do things alone if possible, thinking about what to do and how to do it and then providing the result of that, but I believe the teams would definitely love to get more updates and thoughts, expressing their opinions in the process rather than after the main part is finished. I will try to get better regarding this in the future, although I do not mind getting reviews and possibly making big changes even after I finish and deliver some working code.

EPF feedback

I enjoyed this time and I am very grateful to the whole team behind EPF for giving me this opportunity. My favourite part of the fellowship is being included, seeing how EF works and how all the functionality is being researched, discussed and developed. This gave me a lot of inspiration to write my university thesis about Ethereum once again, this time with much more general overview and support, and also to research more areas in my free time. I hope I can keep contributing to EF in every way I can in the future, since the community is just the best. Thank you!