---
# System prepended metadata

title: EPF6 - Week 6
tags: [Ethereum Protocol Fellowship 6]

---

# EPF6 - Week 6

## Overview
- Attended core dev call and shared updates
- Researched`multifork.test.ts` logic and generated line-by-line breakdown
- Experimented with Kurtosis SDK
- Identified two potential points of integration/replacement (from current Runner to Kurtosis)
- Determined that it is likely that new logic will be needed in addition to porting existing function
- Integrating feedback structure of project proposal into an improved draft

## Main points
- Gained deeper understanding of sim tests/assertions workflow
- Tested Kurtosis SDK with kurtosis.js file by recreating the node setup of `multifork.test.ts`

    **Instructions on how to install Kurtosis SDK**
    - `npm i kurtosis-sdk`
    - Upgrade Kurtosis tool following the instruction on [docs.kurtosis](https://docs.kurtosis.com/upgrade/)
    - Restart the engine: `kurtosis engine restart`
    ![image (16)](https://hackmd.io/_uploads/HJTLOfBDxg.png)
    - Kurtosis engine is running: `node packages/cli/test/sim/kurtosis.js` or `npx tsx packages/cli/test/sim/kurtosis.js`
    ![image (17)](https://hackmd.io/_uploads/BkahKMHDge.png)
    - Run Kurtosis from code/programmatically
    ![image (18)](https://hackmd.io/_uploads/SJhOsMHDge.png)
    This result includes:
        - Names of services started: `service-a-1`, `service-b-1`, `service-c-1`
        - Their unique IDs (UUIDs)
        - Confirmation that configuration templates were rendered and applied
    - Created a .js file to run ethereum-package with CL nodes (`cl-1-lodestar-geth` & `cl-2-lighthouse-geth`) and EL nodes (`el-1-geth-lodestar` & `el-2-geth-lighthouse`)
    ![image](https://hackmd.io/_uploads/H1qWhXrwxx.png)


## Learnings & Outcomes
- Identified with my mentor a couple of potential migration workflows:
    - Convert the logic of the `Simulation.initWithDefaults()` function so it generates kurtosis config from the same configuration we already had 
    - Create something `Simulation.fromNetworkConfig` and pass in a Kurtosis config file
 - Created a multi-client Ethereum testnet programmatically using Kurtosis SDK
 - Replicated the CLI behavior with `kurtosis run ... --args-file` in code
   
## Week 7 TODOs 

- Perform deep dive into Kurtosis SDK
- Further investigate what new logic Kurtosis SDK integration will require
- Determine the best way to port assertions over to Kurtosis SDK implementation
- Test the Kurtosis config matches env from sim test precisely or if further modification required

### Useful resources checked

- [Kurtosis SDK](https://github.com/kurtosis-tech/kurtosis/tree/main/api/typescript)
- [Upgrade Kurtosis](https://docs.kurtosis.com/upgrade/)
- [GitHub branch](https://github.com/ChainSafe/lodestar/compare/nh/kurtosis-sim) on Lodestar repo dedicated to Kurtosis test




