---
# System prepended metadata

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

---


# EPF6 - Week 18


## Overview
- Attended Lodestar Weekly Standups and [shared updates](https://github.com/ChainSafe/lodestar/wiki/Lodestar-Weekly-Standups-2025#epf-contributors-progress)
- Adopted latest changes from **unstable branch**, resolving compatibility gaps with the Kurtosis integration
- Successfully simulated the **entire chain** on Kurtosis for the first time
- Solved `eth.sendTransaction()` issue by merging updated logic from unstable
- Added final commit to the [PR #8296](https://github.com/ChainSafe/lodestar/pull/8296/commits/2ca92a765e04292d026bea7cde5b1a097a36220a)
- Continued preparing **Devconnect presentation**, focusing on the technical story behind the migration

## Main points

### 1. Integration with Unstable Branch
The previous Docker version assumed that the EL client automatically recognized and used the unlocked <code>EL_GENESIS_ACCOUNT</code>.

With the **Kurtosis adaptation**, this assumption no longer held, initially causing failures in sending transactions.

The <code>feature/kurtosis-sim-tests</code> branch was behind <code>unstable</code>, leading to inconsistencies in transaction handling and account management.

**Key Fix:**
Merged relevant logic of [multifork.test.ts](https://github.com/ChainSafe/lodestar/blob/unstable/packages/cli/test/sim/multiFork.test.ts) from `unstable` to the Kurtosis migration branch to align with updated `ExecutionClient` behavior and transaction handling.  

**Result:**  
- Resolved the mismatch in how `eth.sendTransaction()` interacts with the execution layer  
- After integrating `unstable` code, the issue was resolved natively, no additional workaround was needed 

**Takeaway:**  
> The updated EL client logic from unstable correctly handles account unlocking and signing, making the simulation setup fully compatible with Kurtosis.

---

### 2. Full Chain Simulation on Kurtosis

> [!TIP] Milestone
For the first time, an almost full simulation, from genesis through multiple fork epochs, runs entirely on Kurtosis **without Docker** dependencies:
![image](https://hackmd.io/_uploads/Hyg-yHrRll.png)


**Remaining Issue:**
```typescript
error: uncaughtException: env.createNodePair is not a function
```

**Origin**: 
[`await assertRangeSync(env);`]((https://github.com/ChainSafe/lodestar/blob/21fbdc95266e4023c3c1872ea9c57aa71b09f457/packages/cli/test/sim/multiFork.test.ts#L162)) 
[`await assertCheckpointSync(env);`](https://github.com/ChainSafe/lodestar/blob/21fbdc95266e4023c3c1872ea9c57aa71b09f457/packages/cli/test/sim/multiFork.test.ts#L163)
[`await assertUnknownBlockSync(env);`](https://github.com/ChainSafe/lodestar/blob/21fbdc95266e4023c3c1872ea9c57aa71b09f457/packages/cli/test/sim/multiFork.test.ts#L164)
from multiFork test.

This error occurs due to a reference to a legacy Docker-based functions in [utils/syncing.ts](https://github.com/ChainSafe/lodestar/blob/unstable/packages/cli/test/utils/crucible/utils/syncing.ts), they still reference to the previous version of [`createNodePair`](https://github.com/ChainSafe/lodestar/blob/21fbdc95266e4023c3c1872ea9c57aa71b09f457/packages/cli/test/utils/crucible/simulation.ts#L219).

Currently under review to determine whether it can be safely replaced or refactored without breaking test logic.

---

### 3. Code Polishing & PR Update

- Added final commit to [PR #8296](https://github.com/ChainSafe/lodestar/pull/8296/commits/2ca92a765e04292d026bea7cde5b1a097a36220a)
- Cleaned up unused imports and legacy references


## Key Learnings

| Area | Insight |
|------|----------|
| **Branch Alignment** | Keeping Kurtosis migration synced with `unstable` eliminates outdated logic and friction |
| **EL Account Handling** | `Unstable` branch handles account unlocking seamlessly, no workaround required |
| **Simulation Parity** | The full chain simulation on Kurtosis proves parity with the Docker-based setup |
| **Code Maintenance** | PR cleanup now focuses on refinement and polish rather than core functionality |

---

## Week 19 TODOs

- Review and discuss the best way to resolve the `env.createNodePair` reference in `utils/syncing.ts` to ensure compatibility with the existing logic.
- Validate end-to-end assertions after feedback-driven adjustments.
- Continue linting and restructuring the PR for readability and consistency.
- Refine Devconnect presentation slides and narrative structure.

