# Week 1 Dev Update | June 10-16 ## Introduction Hey! I am Max, and I am joining the 5th cohort as a permissionless participant. I am a seasoned full-stack developer looking to use my skills to work on tooling and networking.\ My goal for this first week was to explore the proposed projects and choose a part of the Ethereum stack to focus on. I deep dived on [Pari's proposal: Pandaops tooling](https://github.com/ethpandaops/tooling-wishlist) - monfork and p2p debugger. ## What I have learned ### Running a testnet First things first, deploying a local testnet would be useful to get a high-level understanding of every block involved in a network and a mandatory step to work on monfork and p2p debugger.\ [Following this amazing article](https://ethpandaops.io/posts/kurtosis-deep-dive/), I was able to run a multi node testnet with various clients. Making RPC requests on EL nodes and HTTP requests on CL nodes helped me understand how things work and what data is exposed by each service. ### Monitoring Using the local testnet, I tried the [EL monitor](https://github.com/ethereum/nodemonitor) and the [CL monitor](https://github.com/ralexstokes/eth2-fork-mon) ## What I have done ### Combined forkmon [Following these instructions](https://github.com/ethpandaops/tooling-wishlist/blob/master/open-ideas/combined-forkmon.md), I investigated the code of both the CL and EL fork monitors: - nodemonitor (EL) backend is in Go, and the frontend is 'raw' html and js - eth2-fork-mon (CL) backend is in Go, and the frontend is done in clojureScript with React. They both use a Go backend, which can be merged easily. The frontend do not use the same framework, but html/js are modular, so it could be easy to merge them. I considered two options: either redo from scratch a new tool or merge the two codebases into one.\ The first option would be cleaner, but it requires a lot of work and does not provide a lot of value for the user of the tool.\ The second option takes way less work and delivers all the requested features but it is kind of 'hacky', making the codebase less maintainable.\ I chose the second approach because it is a 'quick win': we have a fork monitor for CL and EL with all the requested features with minimal effort. Merging the two backends was pretty easy; I just needed to split the main config file in two so I could run both monitors. A link was added on top of the two web pages to navigate between the two. ### P2P debugger I then chose to tackle the [p2p debugger](https://github.com/ethpandaops/tooling-wishlist/blob/master/open-ideas/p2p-debugger.md) The goal is to monitor the p2p layer of CL nodes to help with debugging. I found [this blog post](https://parithosh.com/2021/08/12/2021-08-12-debug-an-eth2-devnet/) that describes a debugging session. It helped me understand how the tool will be used and what features are needed. Thanks to [openapi specifications](https://ethereum.github.io/beacon-APIs/) it was really easy to understand how to fetch the data. I chose to go with a backendless solution, as everything can be fetched from the user's browser. The openapi specs allowed the auto generation of an api client thanks to [this generator]https://github.com/hey-api/openapi-ts At the moment, the app can show each node specified in the config file and various informations (like peerIDs, ENR, version etc) with a list of all peers connected to this node. I am also working on a visual representation (a graph). ## What I will be doing next ### Combined forkmon I will make a new github repository with the two fork monitors merged together. Once I am sure that everything is working fine, I will post the link on a appropriate discord channel (not sure which one yet) so people can test it. ### P2P debugger I will also make a new github repository. My goal is to have a working first version, that can be easily deployed with a kurtosis local testnet, so people can test it and request changes or new features. ### Study p2p of the CL Working on the p2p debugger piqued my interest. So I want to study this topic and see how p2p networking is done for different clients. This could lead to work on [this proposal](https://hackmd.io/@6-HLeMXARN2tdFLKKcqrxw/rkU0eLmEC)