Skip to content

fix(proofs): reproducibly build SP1 worker ELFs - #1037

Open
Kemperino wants to merge 8 commits into
mainfrom
kempy/fix-sp1-reproducible-elfs
Open

fix(proofs): reproducibly build SP1 worker ELFs#1037
Kemperino wants to merge 8 commits into
mainfrom
kempy/fix-sp1-reproducible-elfs

Conversation

@Kemperino

@Kemperino Kemperino commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Note

High Risk
Changes how production SP1 guest ELFs and on-chain vkeys are built and verified—governance-critical proof measurements. A build or pin mistake could ship a worker whose embedded ELFs diverge from committed vkeys.json.

Overview
Makes the production SP1 worker embed guest ELFs from a digest-pinned SP1 image and canonical /root/program layout, so on-chain vkeys no longer drift from host-path-dependent local builds.

Dockerfile.prover adds a dedicated sp1-worker target: guests are built once in sp1-guests, copied into the host builder with SP1_SKIP_PROGRAM_BUILD=true, then checked against vkeys.json both as intermediate ELF hashes and via world-chain-proof-sp1-worker vkeys --check on the linked binary. The generic final target now refuses to build the SP1 worker.

Also pins the SP1 image by digest in build.rs, adds shared embedded_vkey_manifest helpers plus the worker vkeys subcommand, and wires CI/docker-proof.yml to the new target (with QEMU on arm64 for the amd64 guest compiler).

Reviewed by Cursor Bugbot for commit 8fc37a1. Configure here.

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Base and PR measured on the same runner in the same workflow run.

Benchmark Base PR Change
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_125tx 29.2±0.18ms 28.9±0.14ms 🟢 -0.99%
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_250tx 58.5±0.49ms 57.0±0.20ms 🟢 -2.91%
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_50tx 12.1±0.04ms 12.1±0.18ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_125tx 35.6±0.13ms 35.3±0.25ms 🟢 -0.99%
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_250tx 76.0±2.70ms 74.5±0.31ms 🟢 -1.96%
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_50tx 14.7±0.12ms 15.0±0.16ms 🟡 +2.00%
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_125tx 27.2±0.12ms 27.2±0.15ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_250tx 53.7±0.45ms 53.3±0.06ms 🟢 -0.99%
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_50tx 11.4±0.02ms 11.3±0.13ms 🟢 -0.99%
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_125tx 29.3±0.39ms 29.3±0.12ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_250tx 56.0±0.48ms 55.9±0.39ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_50tx 13.6±0.13ms 13.6±0.15ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_10tx 135.7±0.13ms 135.7±0.31ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_12tx 162.4±0.09ms 162.6±0.72ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_5tx 68.4±0.09ms 68.4±0.14ms 🟢 +0.00%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_10tx 24.4±1.27ms 24.1±0.76ms 🟢 -0.99%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_12tx 26.2±1.04ms 27.6±0.56ms 🟡 +5.00%
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_5tx 19.4±0.75ms 19.1±0.76ms 🟢 -1.96%
flashblock_validation_process_flashblock_eth_transfers/txs/1000 49.6±0.09ms 50.0±0.20ms 🟡 +1.00%
flashblock_validation_process_flashblock_eth_transfers/txs/50 2.7±0.01ms 2.8±0.01ms 🟡 +2.00%
flashblock_validation_process_flashblock_eth_transfers/txs/500 24.9±0.03ms 25.1±0.08ms 🟡 +1.00%
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/1000 50.9±0.30ms 50.9±0.26ms 🟢 +0.00%
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/50 3.3±0.06ms 3.3±0.06ms 🟢 +0.00%
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/500 25.8±0.17ms 26.1±0.56ms 🟡 +1.00%
flashblock_validation_process_flashblock_fib/txs/1000 49.0±0.33ms 48.9±0.18ms 🟢 +0.00%
flashblock_validation_process_flashblock_fib/txs/50 2.6±0.03ms 2.6±0.03ms 🟢 +0.00%
flashblock_validation_process_flashblock_fib/txs/500 24.6±0.04ms 24.5±0.04ms 🟢 +0.00%
flashblock_validation_process_flashblock_fib_with_bal/txs/1000 49.1±0.12ms 49.2±0.15ms 🟢 +0.00%
flashblock_validation_process_flashblock_fib_with_bal/txs/50 3.2±0.03ms 3.3±0.05ms 🟡 +2.00%
flashblock_validation_process_flashblock_fib_with_bal/txs/500 25.1±0.06ms 25.1±0.14ms 🟢 +0.00%
flashblock_validation_process_flashblock_world_id_like_bn254/txs/10 33.8±0.02ms 33.9±0.16ms 🟢 +0.00%
flashblock_validation_process_flashblock_world_id_like_bn254/txs/25 84.5±0.57ms 84.1±0.09ms 🟢 +0.00%
flashblock_validation_process_flashblock_world_id_like_bn254/txs/50 168.4±0.39ms 167.9±0.18ms 🟢 +0.00%
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/10 6.2±0.30ms 6.1±0.38ms 🟢 -2.91%
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/25 7.9±0.13ms 7.9±0.19ms 🟢 +0.00%
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/50 14.3±0.18ms 14.2±0.11ms 🟢 -0.99%

🔴 regression > 10%  ·  🟡 slower  ·  🟢 faster. A regression > 10% fails the check.

Raw critcmp output
group                                                                                              base                                   pr
-----                                                                                              ----                                   --
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_125tx                  1.01     29.2±0.18ms        ? ?/sec    1.00     28.9±0.14ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_250tx                  1.03     58.5±0.49ms        ? ?/sec    1.00     57.0±0.20ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_50tx                   1.00     12.1±0.04ms        ? ?/sec    1.00     12.1±0.18ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_125tx         1.01     35.6±0.13ms        ? ?/sec    1.00     35.3±0.25ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_250tx         1.02     76.0±2.70ms        ? ?/sec    1.00     74.5±0.31ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_50tx          1.00     14.7±0.12ms        ? ?/sec    1.02     15.0±0.16ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_125tx                            1.00     27.2±0.12ms        ? ?/sec    1.00     27.2±0.15ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_250tx                            1.01     53.7±0.45ms        ? ?/sec    1.00     53.3±0.06ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_50tx                             1.01     11.4±0.02ms        ? ?/sec    1.00     11.3±0.13ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_125tx                   1.00     29.3±0.39ms        ? ?/sec    1.00     29.3±0.12ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_250tx                   1.00     56.0±0.48ms        ? ?/sec    1.00     55.9±0.39ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_50tx                    1.00     13.6±0.13ms        ? ?/sec    1.00     13.6±0.15ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_10tx             1.00    135.7±0.13ms        ? ?/sec    1.00    135.7±0.31ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_12tx             1.00    162.4±0.09ms        ? ?/sec    1.00    162.6±0.72ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_5tx              1.00     68.4±0.09ms        ? ?/sec    1.00     68.4±0.14ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_10tx    1.01     24.4±1.27ms        ? ?/sec    1.00     24.1±0.76ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_12tx    1.00     26.2±1.04ms        ? ?/sec    1.05     27.6±0.56ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_5tx     1.02     19.4±0.75ms        ? ?/sec    1.00     19.1±0.76ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/1000                                    1.00     49.6±0.09ms        ? ?/sec    1.01     50.0±0.20ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/50                                      1.00      2.7±0.01ms        ? ?/sec    1.02      2.8±0.01ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/500                                     1.00     24.9±0.03ms        ? ?/sec    1.01     25.1±0.08ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/1000                           1.00     50.9±0.30ms        ? ?/sec    1.00     50.9±0.26ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/50                             1.00      3.3±0.06ms        ? ?/sec    1.00      3.3±0.06ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/500                            1.00     25.8±0.17ms        ? ?/sec    1.01     26.1±0.56ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/1000                                              1.00     49.0±0.33ms        ? ?/sec    1.00     48.9±0.18ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/50                                                1.00      2.6±0.03ms        ? ?/sec    1.00      2.6±0.03ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/500                                               1.00     24.6±0.04ms        ? ?/sec    1.00     24.5±0.04ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/1000                                     1.00     49.1±0.12ms        ? ?/sec    1.00     49.2±0.15ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/50                                       1.00      3.2±0.03ms        ? ?/sec    1.02      3.3±0.05ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/500                                      1.00     25.1±0.06ms        ? ?/sec    1.00     25.1±0.14ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/10                                1.00     33.8±0.02ms        ? ?/sec    1.00     33.9±0.16ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/25                                1.00     84.5±0.57ms        ? ?/sec    1.00     84.1±0.09ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/50                                1.00    168.4±0.39ms        ? ?/sec    1.00    167.9±0.18ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/10                       1.03      6.2±0.30ms        ? ?/sec    1.00      6.1±0.38ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/25                       1.00      7.9±0.13ms        ? ?/sec    1.00      7.9±0.19ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/50                       1.01     14.3±0.18ms        ? ?/sec    1.00     14.2±0.11ms        ? ?/sec

Comment thread .github/workflows/docker-proof.yml Outdated
Comment thread .github/workflows/docker-proof.yml Outdated
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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