Repository navigation
chore: drop the kurtosis-validator wrapper in favor of our ethereum-package fork - #690
Conversation
…ackage fork lambdaclass/ethereum-package's add-ethlambda branch adds ethlambda as a native cl_type and vc_type. That covers what the wrapper did (ethlambda validator on another client's beacon node, ethlambda beacon with its own validator client, a foreign validator client on ethlambda beacon) and more: ethlambda participants are ordinary services, so the package's own additional services (assertoor, dora) see them. The wrapper could only bolt one validator client onto a finished devnet, imported upstream ethereum-package unpinned, and its kurtosis.yml still named the private repo. Keeping both would mean maintaining two ways to run the same devnet.
🤖 Kimi Code ReviewI'll review this PR which removes the standalone Kurtosis tooling in favor of using a fork of Overall AssessmentThis is a cleanup PR that removes deprecated tooling after migrating to a better-integrated approach. The changes are straightforward deletions with documentation updates. No consensus-critical Rust code is modified. Detailed Review1. Documentation Update (
|
| File | Purpose | Removal Correct? |
|---|---|---|
kurtosis.yml |
Package metadata | Yes — no longer a standalone package |
main.star |
378-line Starlark orchestration | Yes — logic moved to ethereum-package fork |
network_params.yaml |
Basic devnet config | Yes — now native in fork |
network_params_ethlambda_beacon.yaml |
Beacon node testing config | Yes — now native in fork |
network_params_lighthouse_vc.yaml |
Lighthouse VC interop config | Yes — now native in fork |
3. Verification of Migration Completeness
The deleted main.star contained several important safety checks that should be preserved in the new ethereum-package fork:
Key safety logic from deleted main.star:
-
Lines 54-72: Validator key range validation — ensuring
preregistered_validator_countexceeds participant totals to avoid double-signing. Critical for slashing protection. Verify this exists in the fork. -
Lines 74-82: Explicit key index bounds checking (
first >= participants_total,last <= genesis_total,first < last). Must be preserved. -
Lines 120-122: Comment warning about slashing protection: "The ethlambda validator client keeps no slashing-protection record, so a key held by it and by any other client would be signed twice every slot." This warning should appear in fork documentation.
-
Lines 284-287:
eth2-val-toolswith--insecureflag for fast KDF in dev environments. Acceptable for testing only; verify this is still marked clearly as insecure.
4. Potential Issues in Deleted Code (for reference in fork)
While deleting, note these patterns for the new implementation:
-
Line 290-291: The
printf-basedvalidator_definitions.ymlgeneration uses shell-escaped newlines (\\n). The comment explains this is due to Kurtosis mangling newlines — verify if this workaround is still needed in the fork. -
Lines 327-328: Dora restart uses
stop_servicethenstart_service. This is a container restart that preserves filesystem state. Ensure the fork's equivalent handles Dora labeling correctly. -
Lines 364-365: geth
--override.genesisflag usage. Verify compatibility with current geth versions in the fork.
5. Security Considerations
No direct security issues in this deletion PR, but ensure the fork addresses:
-
Slashing protection: The deleted code explicitly noted ethlambda validator lacks slashing protection. The fork must maintain exclusive key assignment or implement protection.
-
JWT secret handling: The deleted code mounted JWT at
/jwt/jwtsecret. Verify path consistency in fork. -
--insecureKDF flag: Only acceptable in devnets; must not reach production configurations.
6. Suggestions
-
Add migration note: Consider a
tooling/kurtosis-validator/README.mdortooling/README.mdpointing to the new fork location (lambdaclass/ethereum-package, branchadd-ethlambda) for users with existing workflows. -
Verify fork branch naming: The docs reference branch
add-ethlambda. Ensure this branch remains available or is merged to avoid broken documentation links.
Conclusion
The PR is correct and safe as a cleanup operation. The main risk is migration completeness — ensuring the ethereum-package fork preserves the safety checks and configuration flexibility of the deleted standalone tooling. No blocking issues.
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
🤖 Codex Code ReviewLooks good overall. This PR is doc/tooling-only: it updates
No blocking issues from this diff. Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
🤖 Claude Code ReviewReview of PR 690: drop the kurtosis-validator wrapperVerdict: looks good, with one small docs nit. The PR only deletes Checks run
Notes
Automated review by Claude (Anthropic) · sonnet · custom prompt |
EIP-8453 is specified on top of Heze, which main does not implement. This brings in the team's Heze line, heze-devnet-3 at 667cd91: EIP-7805 (FOCIL, fork-choice enforced inclusion lists), EIP-8015, EIP-8365 and EIP-8198 (quick slots), with the consensus-spec-tests pin moved from v1.7.0-beta.2 to v1.7.0-beta.4, which changes gloas's behavior too. heze-devnet-3 grew from the same integration commit as the old decoupled work (3d9a031), so it was merged against that base rather than git's own (afc491b), and is squashed here rather than recorded as a merge parent. Every file this commit changes is one heze-devnet-3 changed; the six heze-devnet-3 files it leaves alone already held heze's content on main (#644, and the #668/#669 minimal-preset fixes, which main took). Resolutions: - DB_VERSION is 9. main's 7 is the slot||root state keys; heze-devnet's 7 and 8 (heze's containers, EIP-8198's config keys) were made without it, so 8 is skipped and a heze devnet directory is refused rather than read with the wrong key layout. - main's BlockProcessingOptions (skip_randao_verification) threads through gloas::process_block, which heze made generic over both block shapes, and through the heze arm of stf::block::process_block. - consensus-specs #5679 (an unslashed committee weight): main's `total_balance` replaces heze's `unslashed_active_balance`. - main's identity metadata, sync committee routes and decoders win where heze carried an older cherry-pick of #644. - tooling/kurtosis-validator stays deleted (main dropped the wrapper in #690); heze's devnet parameter files for it remain on heze-devnet-3. - Heze's inclusion-list dependent-root tests now derive their slots from SLOTS_PER_EPOCH, so they pass on the minimal preset too. Verified: workspace tests, clippy, and the beta.4 fixtures on both presets (mainnet 8,979 cases, minimal 59,442). Claude-Session: https://claude.ai/code/session_011vghNo7oGQTz3taUcwf58K
🗒️ Description / Motivation
tooling/kurtosis-validatorwrapped upstream ethereum-package to bolt one ethlambda validator client (and optionally anethlambda beacon) onto a finished devnet. Our fork,lambdaclass/ethereum-package@add-ethlambda, now adds ethlambda as a nativecl_typeandvc_type, so the wrapper is redundant:github.com/ethpandaops/ethereum-packageunpinned, and itskurtosis.ymlstill namedethlambda_private.What Changed
tooling/kurtosis-validator/(main.star,kurtosis.yml, threenetwork_params*.yaml).docs/rpc.md: the one reference to it now points at the fork.Scenario mapping
network_params.yaml(ethlambda VC on lighthouse BN)cl_type: lighthouse,vc_type: ethlambdanetwork_params_ethlambda_beacon.yaml(ethlambda VC on ethlambda beacon)cl_type: ethlambda(VC defaults to ethlambda)network_params_lighthouse_vc.yaml(Lighthouse VC + doppelganger on ethlambda beacon)cl_type: ethlambda,vc_type: lighthouse,vc_extra_params: [--enable-doppelganger-protection](accepted by the fork's input parser; not run)The fork refuses
cl_type: ethlambdaas the first participant unless bootnodoor is enabled, since ethlambda reports no ENR over the Beacon API. See the fork's.github/tests/ethlambda.yamlfor a working example.One note from the deleted yaml comments is not encoded in the fork: lighthouse peers with few validators of their own want
--subscribe-all-subnets(cl_extra_params), because ethlambda beacon publishes attestations through gossipsub fanout, which reaches only peers subscribed to the subnet. (The other note, lighthouse's--target-peers=0pin, no longer applies: ethereum-package adds it only when lighthouse is the sole participant.)Correctness / Behavior Guarantees
No code or CI change; nothing in the workspace, Makefile or workflows referenced the wrapper.
Tests Added / Run
None: no Rust touched.
git grep kurtosis-validatoris empty after the change.Related Issues / PRs