Skip to content

feat(l1): unify guest programs and publish assets ourselves - #7115

Draft
iovoid wants to merge 30 commits into
mainfrom
feat/stateless-validator-upstream-v2
Draft

feat(l1): unify guest programs and publish assets ourselves#7115
iovoid wants to merge 30 commits into
mainfrom
feat/stateless-validator-upstream-v2

Conversation

@iovoid

@iovoid iovoid commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Motivation

Takes ownership of the stateless execution guest program release processes.

Currently our guest program deserializes using legacy logic instead of the standard, so we get rid of the legacy path.

Description

Removes the unused legacy guest program path.

Uses ere-compiler to produce the ELF and VKs, and minisign to sign them.

Closes #7011

@github-actions github-actions Bot added the L1 Ethereum client label Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

⚠️ Known Issues — intentionally skipped tests

Source: docs/known_issues.md

Stateless (zkEVM) Amsterdam+ EF tests skipped

Where: tooling/ef_tests/blockchain/test_runner.rsparse_and_execute skips
fixtures with network >= Fork::Amsterdam when running with a stateless backend.
Affects make test-stateless (the vectors_zkevm/ run); make test-levm is
unaffected.

Why: The stateless run uses the tests-zkevm@v0.5.0 bundle, filled against
glamsterdam-devnet v6.1.0, which predeploys the EIP-8282 builder deposit/exit
contracts at the OLD addresses (0x0000884d…d9008282 / 0x000014574a…0f008282).
This client uses the devnet-7 addresses (0x0000bff4…300d8282 /
0x000064d6…800e8282, matching the live tests-glamsterdam-devnet@v7.2.0 bundle
used by make test-levm). Every Amsterdam+ block runs the end-of-block EIP-8282
builder system call; with the new addresses absent from the v0.5.0 bundle, each
stateless Amsterdam+ block fails with
SystemContractCallFailed("System contract: 0x0000…8282 has no code after deployment").
The skip is by fork rather than by test name, since cross-fork directories such as
for_amsterdam/prague/... still execute at the Amsterdam fork.

Removal: Delete the skip_stateless_amsterdam branch in parse_and_execute
once a tests-zkevm bundle filled with the devnet-7 builder predeploy addresses is
released and .fixtures_url_zkevm is bumped to it.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

Lines of code report

Total lines added: 1072
Total lines removed: 907
Total lines changed: 1979

Detailed view
+------------------------------------------------------------------------------+-------+------+
| File                                                                         | Lines | Diff |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/blockchain/prewarm.rs                                          | 575   | -2   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/blockchain/stateless.rs                                        | 54    | -2   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/crypto/provider.rs                                      | 529   | +21  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/types/block_execution_witness.rs                        | 842   | -93  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/types/mod.rs                                            | 32    | -2   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/types/stateless_ssz.rs                                  | 628   | -157 |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/types/transaction.rs                                    | 5047  | +21  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/common/types/unsync_cell.rs                                    | 86    | +86  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/bin/openvm/src/main.rs                           | 23    | -10  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/bin/risc0/src/main.rs                            | 32    | -7   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/bin/sp1/src/main.rs                              | 23    | -6   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/bin/zisk/src/main.rs                             | 23    | -6   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/src/l1/input.rs                                  | 33    | -262 |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/src/l1/mod.rs                                    | 7     | -13  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/src/l1/program.rs                                | 309   | -328 |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/src/l2/program.rs                                | 68    | +5   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/src/lib.rs                                       | 48    | -4   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/bin/openvm/openvm_init.rs    | 3     | +3   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/bin/openvm/src/main.rs       | 6     | +6   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/bin/sp1/src/main.rs          | 7     | +7   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/bin/zisk/src/main.rs         | 7     | +7   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/src/crypto/mod.rs            | 15    | +15  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/src/crypto/openvm.rs         | 449   | +449 |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/src/crypto/zkvm_interface.rs | 326   | +326 |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/src/lib.rs                   | 14    | +14  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/guest-program/stateless-validator/src/platform.rs              | 59    | +59  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/l2/sequencer/native_rollup/l1_advancer.rs                      | 663   | +1   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/backend/exec.rs                                     | 83    | -5   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/backend/openvm.rs                                   | 106   | +3   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/backend/risc0.rs                                    | 135   | +3   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/backend/sp1.rs                                      | 184   | +3   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/backend/zisk.rs                                     | 169   | +3   |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/prover/src/lib.rs                                              | 15    | -10  |
+------------------------------------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/execute_precompile.rs                              | 376   | +40  |
+------------------------------------------------------------------------------+-------+------+

@github-actions

github-actions Bot commented Aug 5, 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 2.998 ± 0.026 2.975 3.046 1.15 ± 0.01
main_levm_BubbleSort 2.609 ± 0.015 2.588 2.638 1.00 ± 0.01
pr_revm_BubbleSort 2.980 ± 0.019 2.962 3.021 1.14 ± 0.01
pr_levm_BubbleSort 2.603 ± 0.022 2.582 2.657 1.00

Benchmark Results: ERC20Approval

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Approval 999.1 ± 15.3 982.1 1036.8 1.05 ± 0.02
main_levm_ERC20Approval 956.5 ± 5.1 949.1 965.6 1.00 ± 0.01
pr_revm_ERC20Approval 986.8 ± 14.6 972.1 1019.6 1.03 ± 0.02
pr_levm_ERC20Approval 955.7 ± 8.7 945.2 971.4 1.00

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 133.3 ± 1.4 131.3 136.5 1.00
main_levm_ERC20Mint 147.3 ± 0.6 146.4 148.6 1.10 ± 0.01
pr_revm_ERC20Mint 133.5 ± 1.8 131.3 137.6 1.00 ± 0.02
pr_levm_ERC20Mint 147.0 ± 0.5 146.1 147.9 1.10 ± 0.01

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 237.4 ± 4.9 233.2 247.4 1.01 ± 0.03
main_levm_ERC20Transfer 241.8 ± 0.8 240.4 243.1 1.03 ± 0.03
pr_revm_ERC20Transfer 235.8 ± 5.9 231.2 250.9 1.00
pr_levm_ERC20Transfer 242.2 ± 2.8 239.8 248.3 1.03 ± 0.03

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 227.1 ± 2.8 225.8 235.0 1.00
main_levm_Factorial 247.3 ± 2.3 245.2 253.1 1.09 ± 0.02
pr_revm_Factorial 227.5 ± 4.5 224.6 239.7 1.00 ± 0.02
pr_levm_Factorial 247.9 ± 2.4 244.6 253.3 1.09 ± 0.02

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.600 ± 0.019 1.571 1.634 1.00
main_levm_FactorialRecursive 8.414 ± 0.063 8.341 8.579 5.26 ± 0.07
pr_revm_FactorialRecursive 1.610 ± 0.018 1.587 1.632 1.01 ± 0.02
pr_levm_FactorialRecursive 8.410 ± 0.029 8.357 8.450 5.25 ± 0.06

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 204.6 ± 1.3 201.8 206.2 1.00 ± 0.01
main_levm_Fibonacci 221.1 ± 4.3 215.5 229.2 1.08 ± 0.02
pr_revm_Fibonacci 204.5 ± 1.0 202.7 205.9 1.00
pr_levm_Fibonacci 221.8 ± 4.9 216.8 231.0 1.08 ± 0.02

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 843.4 ± 5.9 835.8 851.2 1.21 ± 0.01
main_levm_FibonacciRecursive 708.1 ± 30.4 693.3 789.7 1.02 ± 0.04
pr_revm_FibonacciRecursive 851.3 ± 9.2 838.0 867.5 1.22 ± 0.01
pr_levm_FibonacciRecursive 695.7 ± 3.6 690.0 702.2 1.00

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.9 ± 1.6 8.3 13.5 1.06 ± 0.20
main_levm_ManyHashes 9.2 ± 0.2 9.1 9.8 1.10 ± 0.03
pr_revm_ManyHashes 8.3 ± 0.1 8.3 8.4 1.00
pr_levm_ManyHashes 9.1 ± 0.1 9.1 9.4 1.10 ± 0.01

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 263.0 ± 2.2 261.2 269.0 1.38 ± 0.02
main_levm_MstoreBench 190.8 ± 1.8 188.8 194.0 1.00
pr_revm_MstoreBench 263.2 ± 0.9 261.7 264.6 1.38 ± 0.01
pr_levm_MstoreBench 191.9 ± 1.7 190.1 194.9 1.01 ± 0.01

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 288.9 ± 1.0 287.2 290.6 1.20 ± 0.02
main_levm_Push 240.0 ± 4.7 236.4 251.3 1.00
pr_revm_Push 291.0 ± 6.0 287.5 308.0 1.21 ± 0.03
pr_levm_Push 240.3 ± 7.4 236.6 261.1 1.00 ± 0.04

Benchmark Results: SstoreBench_no_opt

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_SstoreBench_no_opt 168.2 ± 3.3 163.4 175.4 1.64 ± 0.04
main_levm_SstoreBench_no_opt 102.5 ± 1.5 101.2 104.7 1.00 ± 0.02
pr_revm_SstoreBench_no_opt 166.7 ± 4.0 163.3 176.8 1.63 ± 0.04
pr_levm_SstoreBench_no_opt 102.4 ± 1.4 101.3 104.6 1.00

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

L1 Ethereum client

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Upstream the Ethrex stateless validator and officially publish guest program ELFs

1 participant