Skip to content

Conversation

@Manav-Aggarwal
Copy link
Member

@Manav-Aggarwal Manav-Aggarwal commented Jul 2, 2025

Overview

Simpler version of #2377, was reverted in #2394

Summary by CodeRabbit

  • Bug Fixes

    • Improved block validation to enforce stricter checks on block timestamp and application hash consistency.
    • Enhanced error messages for validation failures to provide clearer feedback.
  • Tests

    • Re-enabled tests to verify block timestamp and application hash validation during block processing.
  • Refactor

    • Simplified transaction execution logic for improved performance by removing unnecessary locking during forkchoice state creation.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 2, 2025

Walkthrough

The changes re-enable and enforce stricter block validation checks in the block manager, ensuring block timestamps are strictly increasing and application hashes match. Corresponding test cases for these checks are also reactivated. Additionally, mutex locking is removed from a section of the EVM execution logic involving forkchoice state creation.

Changes

File(s) Change Summary
block/manager.go Uncommented and activated block timestamp and app hash validation checks in execValidate.
block/manager_test.go Re-enabled test cases for block timestamp and app hash validation errors in TestManager_execValidate.
execution/evm/execution.go Removed mutex locking/unlocking around forkchoice state creation in ExecuteTxs.

Suggested reviewers

  • julienrbrt

Poem

A block must tick ahead in time,
And hashes, too, must always rhyme.
The tests awake, the locks are gone,
The chain grows strict, and hops along.
🐇✨

With every line, the ledger sings—
Consistent, safe, and full of springs!


📜 Recent review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 63c0996 and 2e0b538.

📒 Files selected for processing (3)
  • block/manager.go (1 hunks)
  • block/manager_test.go (1 hunks)
  • execution/evm/execution.go (0 hunks)
💤 Files with no reviewable changes (1)
  • execution/evm/execution.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • block/manager_test.go
  • block/manager.go
⏰ Context from checks skipped due to timeout of 90000ms (9)
  • GitHub Check: lint / golangci-lint
  • GitHub Check: lint / markdown-lint
  • GitHub Check: test / Run Integration Tests
  • GitHub Check: test / Run Unit Tests
  • GitHub Check: test / Build All Rollkit Binaries
  • GitHub Check: test / Build Rollkit EVM Single Docker Image
  • GitHub Check: test / Build Rollkit Docker Image
  • GitHub Check: Analyze (go)
  • GitHub Check: Summary
✨ 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.

@github-actions
Copy link
Contributor

github-actions bot commented Jul 2, 2025

The latest Buf updates on your PR. Results from workflow CI and Release / buf-check (pull_request).

BuildFormatLintBreakingUpdated (UTC)
✅ passed⏩ skipped✅ passed✅ passedJul 2, 2025, 9:03 PM

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Summary of Changes

Hello @Manav-Aggarwal, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refines the block execution and verification process by introducing explicit execution modes (delayed and immediate). This allows the system to adapt its state management and AppHash validation logic based on the specific behavior of the underlying execution environment, ensuring correctness and flexibility for different types of applications, such as EVM-based ones.

Highlights

  • Execution Mode Definition: Introduced an ExecutionMode enum (ExecutionModeDelayed and ExecutionModeImmediate) to explicitly define when an executor applies state transitions relative to block creation. This clarifies the behavior of different execution environments.
  • Dynamic AppHash Calculation: Modified the block creation logic (execCreateBlock) to dynamically calculate the AppHash based on the executor's ExecutionMode. For immediate execution, transactions are executed during block creation to derive the new state root, while for delayed execution, the previous state's AppHash is used.
  • Conditional Block Verification: Updated block validation (execValidate) and application (execApplyBlock) to correctly verify and process blocks according to the determined ExecutionMode. This includes conditional AppHash checks and transaction execution based on whether the node is a block creator or a syncing node.
  • Executor Interface Extension: Extended the Executor interface with a GetExecutionMode() method, requiring all executor implementations (e.g., KVExecutor, DummyExecutor, EngineClient) to declare their supported execution mode.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new ExecutionMode to distinguish between immediate and delayed transaction execution, which is a great feature. The changes are well-implemented across the Executor interface and its implementations. My review includes a couple of suggestions for block/manager.go to improve maintainability by reducing code duplication and to enhance robustness by adding logging for silently handled errors. Overall, this is a solid contribution.

@codecov
Copy link

codecov bot commented Jul 2, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 72.74%. Comparing base (620ed4f) to head (2e0b538).
Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2433      +/-   ##
==========================================
+ Coverage   72.71%   72.74%   +0.03%     
==========================================
  Files          67       67              
  Lines        6395     6403       +8     
==========================================
+ Hits         4650     4658       +8     
  Misses       1347     1347              
  Partials      398      398              
Flag Coverage Δ
combined 72.74% <100.00%> (+0.03%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.

@Manav-Aggarwal Manav-Aggarwal force-pushed the manav/execution_verification branch 2 times, most recently from 0d68d9c to 63c0996 Compare July 2, 2025 20:36
@Manav-Aggarwal Manav-Aggarwal requested a review from Copilot July 2, 2025 20:37
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

The PR restores execution verification in the block manager, updates related tests, and simplifies EVM execution by removing an unnecessary lock.

  • Removed redundant mutex around ForkchoiceStateV1 construction in EVM execution.
  • Re-enabled and updated timestamp and AppHash checks in Manager.execValidate, adjusting error messages.
  • Un-commented and modified tests in manager_test.go to match the new error messages.

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
execution/evm/execution.go Dropped c.mu.Lock()/Unlock() around forkchoice args
block/manager.go Restored timestamp and AppHash validation in execValidate
block/manager_test.go Re-enabled tests for monotonic timestamps and AppHash mismatch
Comments suppressed due to low confidence (1)

@Manav-Aggarwal Manav-Aggarwal marked this pull request as ready for review July 2, 2025 20:56
@Manav-Aggarwal Manav-Aggarwal requested review from a team and tac0turtle July 2, 2025 20:56
@Manav-Aggarwal Manav-Aggarwal force-pushed the manav/execution_verification branch from 63c0996 to 2e0b538 Compare July 2, 2025 21:03
@Manav-Aggarwal Manav-Aggarwal enabled auto-merge July 3, 2025 04:37
}

// AppHash should match the last state's AppHash
if !bytes.Equal(header.AppHash, lastState.AppHash) {
Copy link
Contributor

Choose a reason for hiding this comment

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

While this works we should open an issue so we don't forget to dive deeper

@Manav-Aggarwal Manav-Aggarwal added this pull request to the merge queue Jul 3, 2025
@tac0turtle tac0turtle disabled auto-merge July 3, 2025 07:39
@tac0turtle tac0turtle removed this pull request from the merge queue due to a manual request Jul 3, 2025
@tac0turtle tac0turtle added this pull request to the merge queue Jul 3, 2025
Merged via the queue into main with commit 0ca861f Jul 3, 2025
27 of 28 checks passed
@tac0turtle tac0turtle deleted the manav/execution_verification branch July 3, 2025 09:53
@github-project-automation github-project-automation bot moved this to Done in Evolve Jul 3, 2025
alpe added a commit that referenced this pull request Jul 3, 2025
* main:
  feat: fix execution verification (#2433)
  build(deps): Bump github.com/spf13/viper from 1.19.0 to 1.20.1 (#2431)
  build(deps): Bump github.com/libp2p/go-libp2p-kad-dht from 0.29.1 to 0.33.1 (#2432)
  build(deps): Bump github.com/prometheus/client_golang from 1.21.1 to 1.22.0 (#2430)
  build(deps): Bump alpine from 3.18.3 to 3.22.0 (#2429)
  ci: fix dependabot patterns (#2427)
  feat: migrate logging to ipfs/go-log/v2 (#2416)
  fix: Consolidate some EVM E2E tests into one (#2423)
  feat: Support GetHeader in store (#2422)
  fix: Optimize E2E EVM tests (#2421)
  fix: getPeers size check (#2417)
  test: Add comprehensive EVM E2E tests (#2394)
  feat: migrate logging to ipfs/go-log/v2 (#2411)
  feat: execution verification  (#2377)
@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.

3 participants