Skip to content

chore(l1,l2): bump version to 12.0.0#6602

Merged
ilitteri merged 5 commits into
mainfrom
release/v12.0.0
May 12, 2026
Merged

chore(l1,l2): bump version to 12.0.0#6602
ilitteri merged 5 commits into
mainfrom
release/v12.0.0

Conversation

@ilitteri

@ilitteri ilitteri commented May 11, 2026

Copy link
Copy Markdown
Collaborator

Motivation

Prepare the v12.0.0 release by bumping the workspace version and merging the release branch back to main.

Description

  • Bump workspace version from 11.0.0 to 12.0.0 in the root Cargo.toml, the guest-program Cargo.toml files (sp1, risc0, openvm, zisk) and crates/l2/tee/quote-gen/Cargo.toml; refresh lockfiles via make update-cargo-lock.

  • Update the --builder.extra-data default in docs/CLI.md to ethrex 12.0.0 in both ethrex and ethrex L2 sections.

  • Merge main into the release branch, picking up the two levm fixes that landed during release stabilization (fix(levm): account erroneously considered as existing after zero-value transfer #6591, fix(levm): revert doesn't unmark the account as existing #6592) along with their tests:

    • fix(levm): account erroneously considered as existing after zero-value transfer (fix(levm): account erroneously considered as existing after zero-value transfer #6591) — avoids marking an account as modified when a balance increase/decrease is zero.
    • fix(levm): revert doesn't unmark the account as existing (fix(levm): revert doesn't unmark the account as existing #6592) — restore_cache_state now restores exists alongside info, status, and has_storage so a reverted transaction no longer leaves a stale exists = true in the cache (which would cause a later EIP-7702 SetCode tx to apply a spurious REFUND_AUTH_PER_EXISTING_ACCOUNT / EIP-8037 STATE_GAS_NEW_ACCOUNT refund). Also reorders the backup in VM::get_account_mut and the SELFDESTRUCT hook so the backup captures pre-modification state.

    These fixes were also cherry-picked directly onto the release branch before the merge; the merge from main adds their tests.

Checklist

  • Updated STORE_SCHEMA_VERSION — N/A, no storage schema change.

ilitteri and others added 4 commits May 8, 2026 16:19
restore_cache_state restored info, status, and has_storage from the
backup but omitted exists. mark_modified() unconditionally sets
exists=true, so a reverted transaction that touched a non-existent
account leaves stale exists=true in the cache. A subsequent
EIP-7702 SetCode tx whose authority is that address then sees
exists=true and applies the spurious REFUND_AUTH_PER_EXISTING_ACCOUNT
(or the EIP-8037 STATE_GAS_NEW_ACCOUNT refund on Amsterdam+).

Restoring exists is only effective if the backup carries the
pre-modification state. VM::get_account_mut and the SELFDESTRUCT
hook both backed up via &mut returned from db.get_account_mut, which
runs mark_modified before the backup is taken. Reorder so the backup
captures the immutable account state and mark_modified runs after.
…0" to "ethrex 12.0.0" so the documented default matches the bumped workspace version.
Copilot AI review requested due to automatic review settings May 11, 2026 19:55
@ilitteri ilitteri requested review from a team, ManuelBilbao and avilagaston9 as code owners May 11, 2026 19:55
@github-actions github-actions Bot added L1 Ethereum client L2 Rollup client labels May 11, 2026
@github-actions

Copy link
Copy Markdown

🤖 Kimi Code Review

This PR contains a version bump (11.0.0 → 12.0.0) and a critical bugfix in the LEVM account backup/restore logic. The VM changes fix a consensus-critical issue where account backups were capturing post-modification state rather than pre-modification state.

Critical Fix Review (LEVM)

crates/vm/levm/src/db/gen_db.rs

Lines 537-542: The reordering to backup before get_account_mut is correct. get_account_mut likely calls mark_modified() which flips exists to true for lazy account creation. Capturing the backup after this mutation would cause revert operations to restore incorrect state.

Lines 551-553, 582-584: The zero-amount early returns are safe optimizations for balance operations. However, verify this doesn't skip required account "touching" for state trie clearance (EIP-158/161). If increase_account_balance(0) is called on a non-existent account, skipping the operation means it remains non-existent, which is likely correct since no actual state change occurs.

crates/vm/levm/src/hooks/default_hook.rs

Lines 365-370: Consistent application of the backup fix for self-destruct operations. Good.

crates/vm/levm/src/utils.rs

Line 85: Adding exists restoration is necessary to complete the fix. Without this, reverting a transaction that caused account creation would leave exists = true while other fields revert, causing state corruption.

Suggestions

  1. Documentation: Add a comment in increase_account_balance and decrease_account_balance explaining why zero-amount operations are no-ops (e.g., "Ethereum treats zero-value transfers as no-ops for balance state").

  2. Consider atomicity: The pattern get_account → backup → get_account_mut is correct but relies on the fact that no other reference can mutate the DB between these calls. Ensure this is single-threaded or properly synchronized.

  3. Testing: Ensure there are tests covering:

    • Reverting account creation (touching a non-existent account then reverting)
    • Self-destruct revert scenarios
    • Zero-value balance operations not creating accounts

Verdict

The VM changes are a correct and necessary bugfix. The version bump is mechanical and consistent across the workspace. Approve pending confirmation that zero-value optimization doesn't violate any EIP-161 state clearing rules.


Automated review by Kimi (Moonshot AI) · kimi-k2.5 · custom prompt

@github-actions

Copy link
Copy Markdown

🤖 Claude Code Review

Here is my review of PR #6602:


PR #6602chore(l1,l2): bump version to 12.0.0

Overview

This is a release preparation PR that bumps the workspace version from 11.0.0 to 12.0.0. It covers:

  • Root Cargo.toml workspace version bump
  • All guest-program Cargo.toml files (sp1, risc0, openvm, zisk) and crates/l2/tee/quote-gen/Cargo.toml
  • All associated Cargo.lock files refreshed via make update-cargo-lock
  • docs/CLI.md default string updated for --builder.extra-data
  • Two levm bug fixes cherry-picked into the release branch (described in the PR body, commits d71b53d68 and 36da5e14e)

Version Bump Consistency

All workspace crates appear to be bumped uniformly from 11.0.0 to 12.0.0. Coverage is thorough across:

  • Main workspace (Cargo.lock, Cargo.toml)
  • crates/guest-program/bin/{openvm,risc0,sp1,zisk}/Cargo.{toml,lock}
  • crates/l2/tee/quote-gen/Cargo.{toml,lock}
  • crates/vm/levm/bench/revm_comparison/Cargo.lock
  • tooling/Cargo.lock

No crate appears to have been accidentally left at 11.0.0.


Observations

Stale 1.0.0 entries in tooling/Cargo.lock

In tooling/Cargo.lock, the following pattern appears:

  "ethrex-common 1.0.0",
- "ethrex-common 11.0.0",
+ "ethrex-common 12.0.0",
  "ethrex-storage 1.0.0",
- "ethrex-storage 11.0.0",
+ "ethrex-storage 12.0.0",

There are still two packages (ethrex-common 1.0.0 and ethrex-storage 1.0.0) present alongside the bumped versions. These appear to be referenced by something in the tooling workspace that pins an old version. This was already present before this PR and is not a regression introduced here, but it is worth verifying that these old version references are intentional (e.g., a compatibility shim or test tool). If they are leftover, this would be the right time to clean them up as part of a major version bump.

Docs update is correct

docs/CLI.md has two occurrences of the --builder.extra-data default — one in the L1 section, one in the L2 section — and both were updated consistently.

Cherry-picked levm fixes not visible in the diff

The PR description references two levm bug fixes (restore_cache_state missing the exists flag restore, and no-op for zero-value balance changes). These are not present in the gh pr diff output, which suggests they were either committed to the release branch before the divergence point from main, or they landed on main independently. Before merging, confirm those commits are actually included in the branch (e.g. git log --oneline main..HEAD | grep -E 'd71b53d|36da5e1'), especially since the exists-flag fix carries correctness implications for EIP-7702 and Amsterdam+ refund accounting.


Summary

This is a clean, mechanical version bump with no logic changes visible in the diff. The versioning is consistent across all manifests and lockfiles. The one item to verify before merge is whether the two levm bug fixes are actually present in the branch, and whether the lingering 1.0.0 entries in tooling/Cargo.lock are intentional. No blocking issues found in the diff itself.


Automated review by Claude (Anthropic) · sonnet · custom prompt

@greptile-apps

greptile-apps Bot commented May 11, 2026

Copy link
Copy Markdown

Greptile Summary

This PR bumps the workspace version from 11.0.0 to 12.0.0 across all Cargo.toml files (root workspace, four guest programs, and the TEE quote-gen crate) and updates the docs/CLI.md default builder extra-data string to match. It also cherry-picks two levm correctness fixes into the release.

  • exists flag restored on revert (utils.rs): restore_cache_state now restores current_account.exists from the backup, preventing a stale exists = true from persisting after a reverted transaction that touched a non-existent account. The backup-capture order in VM::get_account_mut and the SELFDESTRUCT hook was also reordered so the snapshot is taken before mark_modified() unconditionally sets exists = true.
  • Zero-value balance changes short-circuit (gen_db.rs): increase_account_balance and decrease_account_balance now return early when the delta is zero, avoiding an unnecessary get_account_mut call that would mark the account as modified and pollute the revert cache.

Confidence Score: 5/5

This PR is safe to merge — the version bumps are consistent across all manifests and the two levm fixes address well-scoped correctness bugs in the revert and balance-change paths.

The version bump is mechanical and consistent across all Cargo.toml files and the CLI docs. The two cherry-picked levm fixes are narrowly scoped: restoring the exists field on revert correctly closes the stale-cache bug described in the PR, the backup reordering before mark_modified is the right fix and follows the same pattern in both get_account_mut and the SELFDESTRUCT hook, and the zero-delta early returns are safe optimisations with no observable behaviour change for non-zero inputs.

No files require special attention.

Important Files Changed

Filename Overview
crates/vm/levm/src/utils.rs Adds restoration of the exists field in restore_cache_state, closing the bug where a reverted transaction could leave a stale exists = true in the account cache.
crates/vm/levm/src/db/gen_db.rs Reorders backup capture before get_account_mut/mark_modified in VM::get_account_mut; adds zero-delta early returns in increase_account_balance and decrease_account_balance.
crates/vm/levm/src/hooks/default_hook.rs Applies the same backup-before-mark_modified pattern to the SELFDESTRUCT hook, ensuring the backup captures the immutable pre-modification account state.
docs/CLI.md Updates two occurrences of the --builder.extra-data default from ethrex 11.0.0 to ethrex 12.0.0.
Cargo.toml Bumps workspace version from 11.0.0 to 12.0.0.

Reviews (1): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

@github-actions

Copy link
Copy Markdown

🤖 Codex Code Review

Review

No findings. This is a mechanical release bump, and the exposed version surfaces are consistent: Cargo.toml moves the workspace to 12.0.0, the runtime/default CLI value still derives from CARGO_PKG_VERSION in cmd/ethrex/cli.rs, cmd/ethrex/cli.rs, and cmd/ethrex/utils.rs, and the regenerated help text matches in docs/CLI.md and docs/CLI.md.

The diff does not touch EVM execution, gas accounting, consensus checks, trie/storage code, or RLP logic, so I don’t see protocol or security risk in this PR. Static review only; cargo metadata --locked was blocked in this environment by rustup trying to write outside the writable roots.


Automated review by OpenAI Codex · gpt-5.4 · custom prompt

Copilot AI 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.

Pull request overview

Prepares the v12.0.0 release by bumping the workspace/crate versions across the project, updating user-facing CLI documentation, and refreshing the relevant Cargo lockfiles to reflect the new workspace version.

Changes:

  • Bump workspace and crate versions from 11.0.0 to 12.0.0 across root, guest-program binaries, and quote-gen.
  • Update docs/CLI.md default for --builder.extra-data to ethrex 12.0.0 (L1 and L2 sections).
  • Refresh lockfiles (Cargo.lock and several sub-lockfiles) to reflect the 12.0.0 workspace package set.

Reviewed changes

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

Show a summary per file
File Description
tooling/Cargo.lock Updates tooling lockfile entries to workspace version 12.0.0.
docs/CLI.md Updates documented default --builder.extra-data to ethrex 12.0.0 (L1 + L2).
crates/vm/levm/bench/revm_comparison/Cargo.lock Updates bench lockfile entries to 12.0.0.
crates/l2/tee/quote-gen/Cargo.toml Bumps quote-gen crate version to 12.0.0.
crates/l2/tee/quote-gen/Cargo.lock Refreshes quote-gen lockfile to 12.0.0 workspace crates.
crates/guest-program/bin/zisk/Cargo.toml Bumps guest zisk package version to 12.0.0.
crates/guest-program/bin/zisk/Cargo.lock Refreshes zisk guest lockfile to 12.0.0 workspace crates.
crates/guest-program/bin/sp1/Cargo.toml Bumps guest sp1 package version to 12.0.0.
crates/guest-program/bin/sp1/Cargo.lock Refreshes sp1 guest lockfile to 12.0.0 workspace crates.
crates/guest-program/bin/risc0/Cargo.toml Bumps guest risc0 package version to 12.0.0.
crates/guest-program/bin/risc0/Cargo.lock Refreshes risc0 guest lockfile to 12.0.0 workspace crates.
crates/guest-program/bin/openvm/Cargo.toml Bumps guest openvm package version to 12.0.0.
crates/guest-program/bin/openvm/Cargo.lock Refreshes openvm guest lockfile to 12.0.0 workspace crates.
Cargo.toml Bumps [workspace.package] version to 12.0.0.
Cargo.lock Refreshes workspace lockfile entries to version 12.0.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions

Copy link
Copy Markdown

Lines of code report

Total lines added: 9
Total lines removed: 0
Total lines changed: 9

Detailed view
+-------------------------------------------------+-------+------+
| File                                            | Lines | Diff |
+-------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/db/gen_db.rs          | 561   | +7   |
+-------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/hooks/default_hook.rs | 459   | +1   |
+-------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/utils.rs              | 461   | +1   |
+-------------------------------------------------+-------+------+

@github-actions

github-actions Bot commented May 11, 2026

Copy link
Copy Markdown

Benchmark Results Comparison

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.039 ± 0.024 3.017 3.096 1.12 ± 0.01
main_levm_BubbleSort 2.729 ± 0.017 2.711 2.753 1.01 ± 0.01
pr_revm_BubbleSort 3.006 ± 0.028 2.974 3.059 1.11 ± 0.01
pr_levm_BubbleSort 2.707 ± 0.015 2.684 2.730 1.00

Benchmark Results: ERC20Approval

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Approval 994.9 ± 11.3 982.5 1018.1 1.01 ± 0.01
main_levm_ERC20Approval 1043.1 ± 4.6 1037.0 1050.4 1.06 ± 0.01
pr_revm_ERC20Approval 980.2 ± 6.9 975.2 998.0 1.00
pr_levm_ERC20Approval 1042.8 ± 7.1 1035.2 1055.1 1.06 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 134.5 ± 0.7 133.5 136.1 1.01 ± 0.01
main_levm_ERC20Mint 157.5 ± 1.6 155.5 160.7 1.18 ± 0.01
pr_revm_ERC20Mint 133.7 ± 1.0 132.5 136.0 1.00
pr_levm_ERC20Mint 158.5 ± 0.9 157.0 160.2 1.19 ± 0.01

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 236.1 ± 3.2 234.1 243.7 1.02 ± 0.01
main_levm_ERC20Transfer 260.7 ± 2.0 257.7 264.4 1.12 ± 0.01
pr_revm_ERC20Transfer 232.1 ± 0.3 231.7 232.5 1.00
pr_levm_ERC20Transfer 261.9 ± 4.7 258.2 273.2 1.13 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 228.9 ± 0.6 227.5 229.7 1.01 ± 0.00
main_levm_Factorial 246.2 ± 7.5 241.3 267.3 1.08 ± 0.03
pr_revm_Factorial 227.5 ± 0.6 226.1 228.3 1.00
pr_levm_Factorial 246.0 ± 2.0 243.6 249.0 1.08 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.663 ± 0.037 1.602 1.719 1.07 ± 0.03
main_levm_FactorialRecursive 1.562 ± 0.036 1.536 1.663 1.01 ± 0.02
pr_revm_FactorialRecursive 1.650 ± 0.032 1.601 1.701 1.06 ± 0.02
pr_levm_FactorialRecursive 1.549 ± 0.012 1.534 1.566 1.00

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 211.0 ± 2.0 209.6 216.2 1.02 ± 0.01
main_levm_Fibonacci 221.8 ± 4.7 217.2 230.3 1.07 ± 0.02
pr_revm_Fibonacci 207.7 ± 0.7 206.5 208.8 1.00
pr_levm_Fibonacci 221.4 ± 4.2 217.6 229.4 1.07 ± 0.02

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 855.0 ± 14.1 835.5 882.6 1.25 ± 0.02
main_levm_FibonacciRecursive 692.0 ± 4.6 685.8 699.1 1.01 ± 0.01
pr_revm_FibonacciRecursive 866.1 ± 7.2 855.6 881.6 1.26 ± 0.01
pr_levm_FibonacciRecursive 686.6 ± 4.2 677.0 691.1 1.00

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.7 ± 0.1 8.6 8.9 1.02 ± 0.02
main_levm_ManyHashes 10.3 ± 0.1 10.1 10.5 1.20 ± 0.02
pr_revm_ManyHashes 8.6 ± 0.1 8.4 8.8 1.00
pr_levm_ManyHashes 10.3 ± 0.1 10.1 10.5 1.20 ± 0.02

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 266.8 ± 1.5 263.9 269.0 1.16 ± 0.01
main_levm_MstoreBench 234.8 ± 1.8 232.4 237.3 1.02 ± 0.01
pr_revm_MstoreBench 265.7 ± 6.5 261.8 278.5 1.16 ± 0.03
pr_levm_MstoreBench 229.4 ± 1.0 228.1 230.8 1.00

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 294.8 ± 2.0 293.6 300.3 1.07 ± 0.01
main_levm_Push 274.8 ± 1.6 272.7 277.2 1.00
pr_revm_Push 304.9 ± 35.6 292.5 406.1 1.11 ± 0.13
pr_levm_Push 277.5 ± 2.8 274.4 282.8 1.01 ± 0.01

Benchmark Results: SstoreBench_no_opt

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_SstoreBench_no_opt 168.0 ± 1.8 164.4 170.2 1.66 ± 0.03
main_levm_SstoreBench_no_opt 101.1 ± 1.3 100.1 103.0 1.00 ± 0.02
pr_revm_SstoreBench_no_opt 167.6 ± 2.1 163.3 170.2 1.66 ± 0.03
pr_levm_SstoreBench_no_opt 101.0 ± 1.2 100.0 102.7 1.00

@MegaRedHand MegaRedHand left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

@github-project-automation github-project-automation Bot moved this to In Review in ethrex_l1 May 11, 2026
@ilitteri ilitteri added this pull request to the merge queue May 12, 2026
Merged via the queue into main with commit e6a80a6 May 12, 2026
80 checks passed
@ilitteri ilitteri deleted the release/v12.0.0 branch May 12, 2026 18:05
@github-project-automation github-project-automation Bot moved this from In Review to Done in ethrex_l1 May 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

L1 Ethereum client L2 Rollup client

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants