# EPF Cohort 6 – Week 3 Update
Started a deep dive into Grandine to build a clearer understanding of its internal components and tracing opportunities.
Joined the Grandine Discord and got confirmation from maintainers that working on observability/tracing integration is welcome.
## Progress This Week
- Investigated the main crates to understand where tracing instrumentation can be inserted.
- Reviewed the purpose and lifecycle of **Context struct**, and how it controls configuration and service initialization (e.g., storage setup, P2P networking, validator duties).
- Ran Grandine on the **Holesky** network as a **beacon node** and tested replacing the existing logger with **Tokio Tracing** to validate tracing output.
- Tried **basic tracing setup** (tracing_subscriber, EnvFilter) and tested configuring log output with RUST_LOG on several binaries (such as grandine/src/main.rs and ad_hoc_bench/src/main.rs).
- Learned how CLI arguments and config parsing (GrandineArgs, GrandineConfig) feed into Context and affect runtime behavior.
- Practiced **searching and navigating the codebase** (using `grep` and `VSCode`) to locate important functions and modules.
## Next Steps
- Plan to test tracing spans and events in beacon node modules.
- Validate that tracing output provides clear and useful insights during node startup and block import.
- Prepare initial **documentation or examples** of how to enable and interpret tracing logs.
- Continue experimenting in my small Rust toy project to practice tracing and dependency management in parallel.
- Continue systematically exploring the Grandine repository to build a more comprehensive understanding of its architecture and module interactions.
- Learn more about the main components of a consensus client and identify how they are structured in Grandine.
## Resources
- [Grandine GitHub Repository](https://github.com/grandinetech/grandine)