---
# System prepended metadata

title: EPF Cohort 6 – Week 10 & 11 Update

---

# EPF Cohort 6 – Week 10 & 11 Update 

Exam period on my master studies last week, so here is update for past 2 week.

## Progress This 2 Week

I wrapped up Phase 2 from the [roadmap](https://hackmd.io/JX5Q0ObtQ-iStLwSmVRPVg#Phase-2-Tracing-the-Network-Boundary) ->  Phase 2 PRs ([**PR in main repo**](https://github.com/sntntn/grandine/pull/9) & [**PR in submodule**](https://github.com/sntntn/eth2_libp2p/pull/3)).
 
Discuss implementation details on meeting with [Saulius](https://github.com/sauliusgrigaitis), as well as with [Tumas](https://github.com/Tumas) through a PR discussion.
- As part of that discussion, we successfully resolved [**Issue**](https://github.com/sntntn/grandine/issues/11), which focused on how tracing levels are applied and ensuring compatibility between the new and old implementations:
    - When a tracing level is explicitly specified via environment variables, it is applied globally (including dependencies).
    - When no explicit level is provided, we use default local levels defined in grandine_utils/src/lib.rs (without affecting dependencies).

### Current state 

- Tracing is now enabled across the whole project.
- Tracing is backported from Lighthouse for external p2p submodule.
- Completed instrumentation of the network layer.
- Added PEER METRICS as a structured field in tracing, making it easier to extract statistics and parse logs.
- One issue still remains open -> [Resolve Clippy lints, failing tests and formatting](https://github.com/sntntn/grandine/issues/12)
 
---

> Until now, I avoided downloading **large external submodules** *(e.g., consensus-spec-tests, slashing-protection-interchange-tests...)*, since they weren’t required for my earlier development work. However, at this stage, I needed to include them. 
So while working with them, I wanted to **avoid** downloading them **multiple times** across different projects to **save disk space** and **memory**.


> A useful **tips & tricks** approach for this scenario:
> - Clone the required submodules once into a local directory somewhere.
> - Trick your filesystem by changing the **symlinks** of submodules (in the target project) to point to the previously mentioned local directory. 


> With this setup, the same external modules can be reused across multiple clients or across different versions of the same client, eliminating the need to pull the same large repositories separately for each project.

>In my case, this was especially helpful since I maintain both the production Grandine repository and my modified Grandine with tracing.

>This approach allows me to:
>- **Easily compare** the old logging system with the new tracing implementation.
>- Preserve the original **DX/UX** while extending it, ensuring that nothing is missed.
>- This setup will also help when I start measuring **performance differences** between the two systems.

---

## Next Steps

I think I'm making good progress in terms of deadlines, so I'll have some time to dedicate myself to expanding my perspective on consensus client testing:
- what exactly is being tested,
- and what requirements a client must satisfy to be considered a valid consensus client.

After that I will move on to **Phase 3: Instrumentation of Core Logic** – focusing on components like the fork choice rule and validator duties.
- This will require deeper research, since these calls are frequent and I’ll need to carefully manage instrumentation overhead.


## Resources

- [Grandine GitHub Repository](https://github.com/grandinetech/grandine)
- [Lighthouse_network](https://github.com/sigp/lighthouse/tree/stable/beacon_node/lighthouse_network) extracted as [eth2_libp2p](https://github.com/grandinetech/eth2_libp2p).
- [Roadmap HackMD](https://hackmd.io/JX5Q0ObtQ-iStLwSmVRPVg)
- [**PR** Phase 2: Tracing the Network Boundary](https://github.com/sntntn/grandine/pull/9)
- [**PR** Phase 2: Tracing the Network Boundary (eth2_libp2p submodule)](https://github.com/sntntn/eth2_libp2p/pull/3)
- [issue](https://github.com/sntntn/grandine/issues/11)
- **external submodules**:
    - [consensus-spec-tests](https://github.com/ethereum/consensus-spec-tests/tree/0f15fd705c3ef59fd8af0d7abdd586d1efb8a9a8)
    - [slashing-protection-interchange-tests](https://github.com/eth-clients/slashing-protection-interchange-tests/tree/bb7900688eecd287d8723154faac6addb5e63336)
    - [dedicated_executor](https://github.com/grandinetech/dedicated_executor/tree/0d36fea385dae3c576eff35e4eb7daae07a7d248)
    - [grandine-snapshot-tests](https://github.com/grandinetech/grandine-snapshot-tests/tree/65292abbcca316d05a0f958119043bd3bf7af47f)
    - [hive - Ethereum end-to-end test harness](https://github.com/grandinetech/hive/tree/79b2c3847e06d176c9cbe7cf3c96ae0565ac217a)
