---
# System prepended metadata

title: 'EPF5: Week 8'
tags: [epf]

---

*2024-08-05*

# EPF5: Week 8

![f1949ea1-2bde-4af7-9df0-c0ea0c71fbd5_text](https://hackmd.io/_uploads/HJaNoIRKC.gif)

It works! Early this week, I was finally able to run a full Ethereum network simulation, this time with all nodes following the chain!

There wasn't any actual issue left, I just misconfigured Lighthouse with the same fork version for Deneb and Electra, which resulted in bad behaviour - see [this issue](https://github.com/sigp/lighthouse/issues/6208).

## :crab: RIIR :crab: 

Of course, my first instinct is to Rewrite it in Rust! This is actually warranted though, as the current scripts [are already too messy for my taste](https://github.com/dknopik/ethereum-shadow/blob/bf9d9f33af9cf58f54338c3e1a8eb8fd2a4ff646/scripts/prepare-cl.sh). And since I want to make this even more flexible and configurable, it is time to support a more sophisticated configuration format, instead of environment variables. Doing this in Shell would be very painful. I decided on using Rust, as I am most comfortable with that language. Another sensible choice would have been Python. 

As for the future configuration format: I decided to "extend" Shadow's configuration file, [which is YAML-based](https://shadow.github.io/docs/guide/shadow_config_spec.html). This offers maximum flexibility for the user: they can add any valid Shadow config options necessary for their simulation without me having to explicitly support it. I will extend the available configuration options with an `ethereum` section, which will allow the user to specify any option that is currently supported by the Shell scripts, plus more, like simulated node location. Under the hood, it will work by reading that config, translating the `ethereum` section into a "pure" Shadow config and merging it with any user-specified Shadow options. That final merged config will be written alongside the genesis data (just like it is done right now) and finally, Shadow is invoked. 

## Next week

My roadmap planned "3-4 weeks" for the first project phase, and the next week is the fourth, so my goal is to finish the implementation of the new config generator laid out above, and to figure out metrics extration. As soon as that is done, the first phase is done, and I will go ahead with running the first experiments - I look forward to it. :)

