Skip to content

feat: update evm execution to support prague - #2324

Merged
tac0turtle merged 1 commit into
evstack:mainfrom
noble-assets:prague-support
May 31, 2025
Merged

feat: update evm execution to support prague#2324
tac0turtle merged 1 commit into
evstack:mainfrom
noble-assets:prague-support

Conversation

@johnletey

@johnletey johnletey commented May 30, 2025

Copy link
Copy Markdown
Contributor

Overview

Summary by CodeRabbit

  • New Features

    • Added support for the "pragueTime" hardfork in EVM genesis configurations.
  • Bug Fixes

    • Updated execution client interactions to use the latest Ethereum Engine API methods for payload retrieval and submission.
  • Documentation

    • Improved documentation to reflect the new "pragueTime" configuration and updated API usage examples.
  • Chores

    • Upgraded Docker images for the EVM and execution clients to newer versions.
    • Updated configuration files and environment variables to align with the latest genesis hash and image versions.

@coderabbitai

coderabbitai Bot commented May 30, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

This update introduces support for the "pragueTime" hardfork in EVM genesis configurations and documentation, upgrades the reth execution client image version in Docker Compose files, and updates the Engine API calls and documentation to use engine_getPayloadV4 and engine_newPayloadV4 with the appropriate parameters. Genesis hash values and example commands are also updated accordingly.

Changes

File(s) Change Summary
apps/evm/single/README.md, execution/evm/README.md Updated documentation to include "pragueTime" hardfork and new Engine API method usage in examples.
apps/evm/single/chain/genesis.json, execution/evm/docker/chain/genesis.json Added "pragueTime": 0 to the genesis config under the "config" section.
apps/evm/single/docker-compose.yml, execution/evm/docker/docker-compose.yml Upgraded reth image version and updated genesis hash environment variable where applicable.
execution/evm/execution.go Changed Engine API method calls from V3 to V4 and updated arguments to include empty execution requests.

Sequence Diagram(s)

sequenceDiagram
    participant Sequencer
    participant EngineClient
    participant ExecutionEngine

    Sequencer->>EngineClient: ExecuteTxs()
    EngineClient->>ExecutionEngine: engine_getPayloadV4(payload_id)
    ExecutionEngine-->>EngineClient: payload_v4
    EngineClient->>ExecutionEngine: engine_newPayloadV4(payload_v4, [])
    ExecutionEngine-->>EngineClient: status
    EngineClient-->>Sequencer: result
Loading

Suggested labels

execution-api, T:spec-and-docs

Suggested reviewers

  • Manav-Aggarwal
  • gupadhyaya
  • tac0turtle

Poem

A hop and a skip, a new fork in the chain,
"PragueTime" arrives—let's all entertain!
Engine V4 calls, the payloads now soar,
With Docker refreshed, we're ready for more.
The genesis is set, the docs shining bright—
This rabbit is happy, things work just right! 🐇✨

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (1.64.8)

Error: you are using a configuration file for golangci-lint v2 with golangci-lint v1: please use golangci-lint v2
Failed executing command with error: you are using a configuration file for golangci-lint v2 with golangci-lint v1: please use golangci-lint v2

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bcc8bad and 772ee16.

📒 Files selected for processing (7)
  • apps/evm/single/README.md (1 hunks)
  • apps/evm/single/chain/genesis.json (1 hunks)
  • apps/evm/single/docker-compose.yml (2 hunks)
  • execution/evm/README.md (3 hunks)
  • execution/evm/docker/chain/genesis.json (1 hunks)
  • execution/evm/docker/docker-compose.yml (1 hunks)
  • execution/evm/execution.go (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Summary
🔇 Additional comments (10)
apps/evm/single/README.md (1)

34-34: Verify genesis hash consistency.

Ensure the updated --evm.genesis-hash value (0xe720f8ec96a43a741b1ab34819acfeb029ce4f083fe73c5a08c1f6a7b17a8568) matches the actual hash of apps/evm/single/chain/genesis.json after adding pragueTime.

execution/evm/docker/chain/genesis.json (1)

18-19: Add pragueTime hardfork activation timestamp.

The new "pragueTime": 0 field alongside "cancunTime": 0 correctly extends the post-merge configuration for the Prague upgrade.

execution/evm/docker/docker-compose.yml (1)

24-24: Bump reth image to v1.4.6.

Updating to ghcr.io/paradigmxyz/reth:v1.4.6 is necessary for Prague support—please verify that this version includes the required Engine API v4 and genesis compatibility.

apps/evm/single/chain/genesis.json (1)

18-19: Mirror pragueTime addition in single sequencer genesis.

The JSON now includes both "cancunTime": 0 and "pragueTime": 0, aligning this chain with the updated fork schedule.

execution/evm/README.md (3)

23-23: Document pragueTime in genesis requirements.

The checklist now correctly mentions pragueTime alongside other post-merge settings.


45-46: Update example genesis JSON snippet.

The code block now reflects the additions of "cancunTime": 0 and "pragueTime": 0, keeping examples in sync with configuration.


69-69: Switch to Engine API v4 payload submission.

Documenting engine_newPayloadV4 ensures the guide matches the implementation changes in execution/evm/execution.go. Verify no remaining v3 references persist.

apps/evm/single/docker-compose.yml (2)

55-55:

Details

❓ Verification inconclusive

Verify the updated genesis hash matches the new genesis configuration.

The genesis hash has been updated, which suggests the genesis configuration now includes Prague hardfork parameters. Ensure this hash corresponds to the correct genesis configuration with "pragueTime": 0.


🏁 Script executed:

#!/bin/bash
# Description: Verify genesis hash matches the genesis configuration
# Expected: The hash should correspond to a genesis config with pragueTime

# Find and examine genesis configuration files
fd -e json genesis | head -5 | xargs -I {} sh -c 'echo "=== {} ==="; cat {}'

Length of output: 2350


Verify the genesis hash against the updated config

Both apps/evm/single/chain/genesis.json and execution/evm/docker/chain/genesis.json include

"pragueTime": 0

Please compute the canonical JSON hash and ensure it matches the value in your Docker Compose:

# Example using jq + keccak-256sum
jq -S . apps/evm/single/chain/genesis.json | tr -d '\n' \
  | keccak-256sum \
  | awk '{print "0x"$1}'

Verify that this output equals
0xe720f8ec96a43a741b1ab34819acfeb029ce4f083fe73c5a08c1f6a7b17a8568.
If it does, the update is correct.


7-7:

Details

❓ Verification inconclusive

Verify reth v1.4.6 supports Prague hardfork and is compatible.

The image version is updated from v1.2.1 to v1.4.6, which is a significant jump. Ensure this version supports the Prague hardfork features and verify there are no breaking changes that could affect the current configuration.


🌐 Web query:

Does reth v1.4.6 support Ethereum Prague hardfork and what are the key changes from v1.2.1?

💡 Result:

Based on the search results, there is no specific mention of Reth v1.4.6 or its features regarding the Ethereum Prague hardfork. The most recent version mentioned in the search results is Reth v1.3.10[1]. However, I can provide information about Reth's position on the Prague hardfork and what we know about recent Reth versions.

Reth and the Prague Hardfork

Reth is actively preparing for the Prague hardfork, which is expected to be implemented on Ethereum testnets by Q3 2024 and on the mainnet by the end of 2024[3][5]. The Paradigm Reth team has expressed their views on which EIPs (Ethereum Improvement Proposals) should be included in Prague, but there's no confirmation that v1.4.6 specifically supports this upcoming hardfork.

The Paradigm Reth team has indicated they are committed to contributing to the Prague/Electra hardfork development[8]. They've outlined several priorities for Prague including:

  • Support for staking-related EIPs, particularly EIP-7002 which enables trustless re-staking and staking pools[3][5]
  • Independent EVM changes[5]
  • Priority EIPs: 7002, 6110, and 2537[5][9]

Recent Reth Versions

The search results mention several recent versions of Reth:

  1. Reth v1.3.10 - The latest version mentioned in the search results, which contains various bug fixes[1].
  2. Reth v1.3.6 - An earlier version with some refactoring and fixes[1].
  3. Reth v1.3.5 - Released on April 2[1].

The Reth team announced a Beta version in March 2024, indicating they intended to release Reth 1.0 by the end of Q2 2024 as their first production-ready release recommended for staking operations[8].

Key Changes in Recent Versions

Since v1.2.1 is not specifically mentioned in the search results, I cannot provide a direct comparison. However, for Reth v1.3.10, the release notes mention several changes including:

  • Addition of the CLI --rpc.txfeecap flag
  • Lower backoff duration for trusted or static peers
  • Prague activation in custom-evm example
  • Configuration for reserved CPU cores
  • Exemption of static peers from removal
  • Various fixes for code hash in code override, CompactEnvelope, and other components[1]

Reth also appears to be preparing for the upcoming "opstack isthmus hardfork" as mentioned in the release notes[1].

For users considering adoption, Reth has recommended different priorities for updates based on user class. For v1.3.10, both Payload Builders and Non-Payload Builders are advised to update with "High" priority[1].

In summary, while Reth is actively working on Prague hardfork support, there is no specific information about v1.4.6 or a direct comparison with v1.2.1 in the search results.

Citations:


Verify Reth v1.4.6 Compatibility and Genesis Hash

I wasn’t able to find official confirmation that v1.4.6 includes Prague hardfork support or details on breaking changes since v1.2.1. Please manually confirm the following before merging:

  • Review the Reth v1.4.6 release notes (e.g. on GitHub or in the Docker image’s documentation) to ensure all required Prague/EIP-7002, 6110, 2537 changes are present.
  • Spin up the container (docker-compose up) and run reth --version or inspect the binary’s help text for Prague-related flags.
  • Verify the updated genesis hash on line 55 matches your new chainspec (you can compute it via reth chainspec hash path/to/chainspec.json).
execution/evm/execution.go (1)

235-235: LGTM: Correct upgrade to Engine API V4.

The upgrade from engine_getPayloadV3 to engine_getPayloadV4 is appropriate for Prague hardfork support.

Comment thread execution/evm/execution.go
@tac0turtle
tac0turtle enabled auto-merge May 31, 2025 08:12
@tac0turtle
tac0turtle added this pull request to the merge queue May 31, 2025
@codecov

codecov Bot commented May 31, 2025

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 0% with 3 lines in your changes missing coverage. Please review.

Project coverage is 53.54%. Comparing base (bcc8bad) to head (772ee16).
Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
execution/evm/execution.go 0.00% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2324      +/-   ##
==========================================
- Coverage   53.54%   53.54%   -0.01%     
==========================================
  Files          82       82              
  Lines        7326     7327       +1     
==========================================
  Hits         3923     3923              
- Misses       2989     2990       +1     
  Partials      414      414              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks May 31, 2025
@tac0turtle
tac0turtle added this pull request to the merge queue May 31, 2025
Merged via the queue into evstack:main with commit 8c90d88 May 31, 2025
@github-project-automation github-project-automation Bot moved this to Done in Evolve May 31, 2025
@johnletey
johnletey deleted the prague-support branch May 31, 2025 12:23
This was referenced Jun 3, 2025
@tac0turtle tac0turtle removed this from Evolve Aug 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants