Skip to content

refactor: build SP1 ELFs via sp1_build + embed via include_elf!() (OP Succinct pattern)#743

Open
agentotto[bot] wants to merge 37 commits into
mainfrom
refactor/elf-hash-manifest
Open

refactor: build SP1 ELFs via sp1_build + embed via include_elf!() (OP Succinct pattern)#743
agentotto[bot] wants to merge 37 commits into
mainfrom
refactor/elf-hash-manifest

Conversation

@agentotto

@agentotto agentotto Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace the previous hash-manifest approach with the upstream OP Succinct pattern:
compile the SP1 guest ELFs at cargo build time via sp1_build and embed
them into the host binary at link time via sp1_sdk::include_elf!(). There is
no committed ELF blob, no SHA-256 manifest, no --range-elf flag, and no
RANGE_ELF_PATH env var anywhere in the codebase any more.

This matches how succinctlabs/op-succinct
itself handles its SP1 programs (utils/build/,
utils/elfs/,
include_elf!() across host crates).

Supersedes the SHA-256 manifest approach from the previous revision of this PR.

What's in the PR

Build pipeline

  • proofs/succinct/utils/host/build.rs (new) — calls
    sp1_build::build_program_with_args for both guest crates:

    • proofs/succinct/programs/range-ethereum/world-chain-proof-succinct-range-ethereum
    • proofs/succinct/programs/aggregation/world-chain-proof-succinct-aggregation

    Defaults to docker: true at pinned tag v6.1.0 (matches the
    sp1-sdk / sp1-zkvm pin). Set SP1_BUILD_DOCKER=false to use a
    locally-installed cargo-prove instead — used inside Dockerfile.proof
    because the Docker daemon isn't reachable from inside a docker build.

    The build is gated on CARGO_FEATURE_SP1, so non-sp1 builds (witness only,
    nitro only) no-op and don't need Docker or the SP1 toolchain.

  • proofs/succinct/utils/host/Cargo.toml — adds sp1-build = "=6.1.0"
    as a [build-dependencies] entry and declares build = "build.rs".

Embedding

  • proofs/succinct/utils/host/src/env_prover.rs:

    pub fn range_elf() -> Elf {
        include_elf!("world-chain-proof-succinct-range-ethereum")
    }
    pub fn aggregation_elf() -> Elf {
        include_elf!("world-chain-proof-succinct-aggregation")
    }

    EnvSuccinctProver::new(kind, agg_mode) now reads no arguments beyond the
    prover backend and the aggregation proof mode — it uses the embedded ELFs.
    EnvSuccinctProver::new_with_elfs(kind, range_elf, agg_elf, mode) is
    retained for tests and custom programs.

Removed

  • The committed ELF binaries (proofs/succinct/elf/world-chain-range-ethereum
    and world-chain-aggregation).
  • The hash-manifest pipeline introduced in the previous revision of this PR:
    • scripts/elf-manifest.py
    • proofs/succinct/elf/manifest.toml
    • proofs/succinct/elf/.gitignore
    • Justfile recipes build-proof-range-elf, build-proof-aggregation-elf,
      build-proof-elfs, verify-proof-elfs, build-and-verify-proof-elfs,
      update-proof-elf-hashes.
  • CLI flags / env vars for ELF paths from every host: --range-elf,
    --agg-elf, --elf, RANGE_ELF_PATH, AGG_ELF_PATH,
    WORLD_CHAIN_RANGE_ELF, WORLD_CHAIN_AGGREGATION_ELF.
  • Per-image ELFs in Dockerfile.proof (the COPY lines and the ENV exports).
  • crates/devnet/src/full_stack.rs no longer joins repo_root() with
    proofs/succinct/elf/... — the worker links the bytes in directly.

Kept

  • just proof-vkeys — still the way to print on-chain vkey commitments
    (it now triggers the embedded build automatically, no separate
    build-proof-elfs step required).

Docs

docs/proof/elf-management.md is rewritten to describe the new pipeline.
docs/proof/proof-cli.md and docs/proof/release.md are updated to drop
references to the old ELF flags / manifest / Justfile targets.

Workflow changes (need maintainer with workflows scope)

The GitHub App opening this PR can't write to .github/workflows/**. The
two updates that match this refactor:

1. Delete .github/workflows/elf.yml

The workflow was specifically gating ELF reproducibility against a committed
manifest. With sp1_build baked into the host crate, every cargo build
under the sp1 feature already rebuilds the guest ELFs — there's nothing
separate to verify any more. Just git rm .github/workflows/elf.yml.

2. .github/workflows/release-proof.yml

Three changes:

  • Drop the verify-elfs job entirely (and needs: [verify-elfs] from every
    other job).

  • In vkeys, install the SP1 toolchain and set SP1_BUILD_DOCKER=false
    before running just proof-vkeys:

    - name: Install SP1 toolchain
      run: |
        curl -L https://sp1.succinct.xyz | bash
        ~/.sp1/bin/sp1up --version v6.1.0
        echo "$HOME/.sp1/bin" >> $GITHUB_PATH
    - name: Compute vkeys
      env:
        SP1_BUILD_DOCKER: "false"
      run: just proof-vkeys --output vkeys.json && cat vkeys.json
  • In build-binaries, install the SP1 toolchain and set
    SP1_BUILD_DOCKER=false before cargo build --release ... -p proof --features sp1,nitro:

    - name: Install SP1 toolchain
      run: |
        curl -L https://sp1.succinct.xyz | bash
        ~/.sp1/bin/sp1up --version v6.1.0
        echo "$HOME/.sp1/bin" >> $GITHUB_PATH
    - name: Cargo Build Release
      env:
        SP1_BUILD_DOCKER: "false"
      run: cargo build --release --locked -p proof --bin proof --features sp1,nitro --target ${{ matrix.target }}
  • In draft-release, drop the two cp proofs/succinct/elf/... lines
    (the ELFs are no longer shipped as standalone release artifacts —
    they're embedded in the proof CLI tarballs and the docker image
    manifest).

Verification

  • cargo check -p world-chain-proof-succinct-host-utils (no sp1 feature)
    succeeds locally — the build.rs correctly no-ops without
    CARGO_FEATURE_SP1.
  • With sp1 feature, build.rs invokes
    sp1_build::build_program_with_args for each program crate and emits
    cargo:rustc-env=SP1_ELF_world-chain-proof-succinct-range-ethereum=...
    directives that include_elf!() picks up. Confirmed by sp1-build
    panicking with "failed to run docker command" in environments without
    Docker — i.e. the wiring is correct, only the runtime is missing.
  • Reproducibility property is unchanged: pinned tag: "v6.1.0" (whether
    via docker: true Docker image or via sp1up --version v6.1.0 install)
    → bit-for-bit identical ELFs → identical vkeys.

Migration

Developers don't need to do anything separate. cargo build /
cargo build -p proof --features sp1 / cargo build -p world-chain-sp1-worker
runs sp1_build transparently. The first build pulls
succinctlabs/sp1:v6.1.0 (a few minutes); subsequent builds reuse the
cached ELFs unless guest source or the pinned tag changes.

For fast iteration on host code after a successful build, set
SP1_SKIP_PROGRAM_BUILD=true to skip the ELF recompile while letting
include_elf!() resolve against the cached ELFs.

Risks

  • Dockerfile.proof now installs the SP1 toolchain in the builder stage
    and uses SP1_BUILD_DOCKER=false. First image build is slower until
    layer caching kicks in; the ELFs are no longer COPYed in.
  • Anyone whose tooling pinned RANGE_ELF_PATH / AGG_ELF_PATH will need
    to stop setting them — those env vars are gone from every binary.

Note

High Risk
Changes how on-chain SP1 vkeys are derived and what release/Docker images contain; guest or toolchain drift without updating vkeys.json or registries would break proof-lane governance.

Overview
Moves SP1 guest program handling to the OP Succinct pattern: a new world-chain-proof-succinct-elfs crate runs sp1_build::build_program_with_args in build.rs and exposes ELFs through include_elf!(). world-chain-prover-sp1 and sp1-worker (default embedded-elfs) no longer take --range-elf / --agg-elf or read committed ELF files; EnvSuccinctProver::new_with_elfs is the production path.

CI and release drop the dedicated build-elfs job and ELF upload/download from docker-proof.yml and release-proof.yml. Vkeys are computed from embedded ELFs (SP1_BUILD_DOCKER=false + pinned sp1up v6.1.0); standalone guest ELF release assets and manifest.toml go away. proofs/succinct/elf/vkeys.json is committed, with just verify-proof-vkeys and a new verify-vkeys workflow.

Dockerfile.prover installs the SP1 toolchain, requires PROVER_PACKAGE / PROVER_BIN, and no longer copies ELF blobs into the image—bytes live inside the built binary. Devnet disables sp1-worker embedded ELFs and expects RANGE_ELF_PATH / AGG_ELF_PATH for runtime loading.

Docs and Justfile recipes are updated (build-proof-elfs removed; update-proof-vkeys / verify-proof-vkeys added). sp1-build is pinned to 6.1.0 in Cargo.lock.

Reviewed by Cursor Bugbot for commit ec552f8. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Compared on the same runner in the same workflow run.

group                                                                                              base                                   pr
-----                                                                                              ----                                   --
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_125tx                  1.01     28.6±0.07ms        ? ?/sec    1.00     28.2±0.06ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_250tx                  1.01     56.8±0.20ms        ? ?/sec    1.00     56.0±0.15ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers/stream/4fb_x_50tx                   1.01     12.0±0.03ms        ? ?/sec    1.00     11.9±0.16ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_125tx         1.01     36.2±0.56ms        ? ?/sec    1.00     35.8±1.36ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_250tx         1.00     66.2±0.97ms        ? ?/sec    1.02     67.5±0.86ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_eth_transfers_with_bal/stream/4fb_x_50tx          1.03     17.0±0.24ms        ? ?/sec    1.00     16.6±0.12ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_125tx                            1.00     27.2±0.20ms        ? ?/sec    1.00     27.3±0.07ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_250tx                            1.00     53.0±0.33ms        ? ?/sec    1.00     53.0±0.08ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib/stream/4fb_x_50tx                             1.01     11.3±0.03ms        ? ?/sec    1.00     11.2±0.03ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_125tx                   1.00     33.9±0.20ms        ? ?/sec    1.00     34.0±0.30ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_250tx                   1.00     62.4±0.20ms        ? ?/sec    1.00     62.4±0.25ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_fib_with_bal/stream/4fb_x_50tx                    1.03     16.1±0.12ms        ? ?/sec    1.00     15.7±0.25ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_10tx             1.00    136.1±0.23ms        ? ?/sec    1.00    135.9±0.31ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_12tx             1.00    162.3±0.16ms        ? ?/sec    1.00    162.5±0.27ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254/stream/4fb_x_5tx              1.01     68.7±0.11ms        ? ?/sec    1.00     68.2±0.08ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_10tx    1.00     23.2±1.29ms        ? ?/sec    1.00     23.1±1.45ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_12tx    1.00     24.2±1.46ms        ? ?/sec    1.07     25.9±1.51ms        ? ?/sec
flashblock_validation_launch_flashblock_sequence_world_id_like_bn254_with_bal/stream/4fb_x_5tx     1.00     19.6±0.70ms        ? ?/sec    1.00     19.5±1.24ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/1000                                    1.01     49.0±0.15ms        ? ?/sec    1.00     48.7±0.11ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/50                                      1.02      2.7±0.02ms        ? ?/sec    1.00      2.7±0.01ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers/txs/500                                     1.01     24.6±0.08ms        ? ?/sec    1.00     24.4±0.05ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/1000                           1.00     58.9±0.23ms        ? ?/sec    1.01     59.3±0.25ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/50                             1.00      3.8±0.03ms        ? ?/sec    1.03      3.9±0.07ms        ? ?/sec
flashblock_validation_process_flashblock_eth_transfers_with_bal/txs/500                            1.00     30.1±0.31ms        ? ?/sec    1.00     30.0±0.15ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/1000                                              1.00     48.2±0.11ms        ? ?/sec    1.00     48.0±0.09ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/50                                                1.00      2.5±0.01ms        ? ?/sec    1.00      2.5±0.01ms        ? ?/sec
flashblock_validation_process_flashblock_fib/txs/500                                               1.00     24.2±0.07ms        ? ?/sec    1.00     24.1±0.04ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/1000                                     1.01     55.8±0.27ms        ? ?/sec    1.00     55.2±0.20ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/50                                       1.00      3.7±0.09ms        ? ?/sec    1.00      3.7±0.06ms        ? ?/sec
flashblock_validation_process_flashblock_fib_with_bal/txs/500                                      1.00     28.2±0.14ms        ? ?/sec    1.00     28.2±0.22ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/10                                1.00     33.8±0.05ms        ? ?/sec    1.00     33.8±0.07ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/25                                1.00     84.4±0.12ms        ? ?/sec    1.00     84.0±0.11ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254/txs/50                                1.00    168.6±0.33ms        ? ?/sec    1.00    168.5±0.64ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/10                       1.02      5.5±0.32ms        ? ?/sec    1.00      5.4±0.23ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/25                       1.00      8.2±0.08ms        ? ?/sec    1.00      8.2±0.10ms        ? ?/sec
flashblock_validation_process_flashblock_world_id_like_bn254_with_bal/txs/50                       1.00     15.0±0.23ms        ? ?/sec    1.01     15.1±0.21ms        ? ?/sec

Threshold: 10% regression triggers failure

@agentotto agentotto Bot force-pushed the refactor/elf-hash-manifest branch from f5d2091 to 5aacc9d Compare June 16, 2026 07:59
@agentotto agentotto Bot changed the title refactor: replace committed ELF binaries with SHA-256 hash manifest refactor: build SP1 ELFs via sp1_build + embed via include_elf!() (OP Succinct pattern) Jun 16, 2026
Comment thread Dockerfile.prover
Comment thread proofs/succinct/utils/host/build.rs Outdated
@piohei piohei force-pushed the refactor/elf-hash-manifest branch from b8073dc to cf597be Compare June 16, 2026 10:10
Comment thread proofs/succinct/utils/host/build.rs Outdated
Comment thread proofs/succinct/utils/host/src/env_prover.rs
Comment thread proofs/bin/src/main.rs Outdated
Comment thread proofs/succinct/elfs/build.rs
Comment thread proofs/sp1-worker/Cargo.toml Outdated
Comment thread .github/workflows/release-proof.yml Outdated
Comment thread crates/devnet/src/full_stack.rs
Comment thread proofs/succinct/elfs/build.rs
@agentotto agentotto Bot force-pushed the refactor/elf-hash-manifest branch from 435a4cb to 4c0cce1 Compare June 18, 2026 06:19
Comment thread proofs/bin/src/main.rs Outdated
Comment thread Dockerfile.prover
Comment thread Dockerfile.prover Outdated
@agentotto agentotto Bot force-pushed the refactor/elf-hash-manifest branch from 3385f8f to b7b579d Compare June 18, 2026 06:58
Comment thread Justfile Outdated
Comment thread .github/workflows/release-proof.yml
Comment thread .github/workflows/release-proof.yml
Comment thread docs/proof/proof-cli.md Outdated
Comment thread docs/proof/proof-cli.md Outdated
Otto and others added 28 commits June 18, 2026 18:03
- Replace clippy stub-file logic in build.rs with #[cfg(clippy)] guards
  in src/lib.rs; build.rs no longer needs clippy detection
- Add clarity to ancestors().nth(3) comment explaining the index math
- Gate world-chain-proof-succinct-elfs behind embedded-elfs feature in
  sp1-worker so devnet (which loads ELFs from env vars) doesn't trigger
  the SP1 guest build
- Update devnet Cargo.toml: depend on sp1-worker with default-features=false
- Fix stale comment in full_stack.rs (referenced non-existent build.rs path)
- Update Dockerfile.proof comment to clarify vkeys CI also uses
  SP1_BUILD_DOCKER=false for consistent ELF/vkey alignment
…7817149

- crates/devnet/src/full_stack.rs: add early env-var validation in
  start_sp1_worker before spawn_blocking so RANGE_ELF_PATH / AGG_ELF_PATH
  absence surfaces as a clear Result::Err with actionable guidance instead
  of a panic buried in the spawn_blocking task.

- proofs/succinct/elfs/build.rs: update docstring to clarify that
  sp1_build::build_program_with_args already checks SP1_SKIP_PROGRAM_BUILD
  internally (skips the Docker/local build but still emits SP1_ELF_* env
  vars), so main() does not need a separate early-return for the flag.

- docs/proof/elf-management.md: fix stale file-path references
  (proofs/succinct/utils/host/build.rs -> proofs/succinct/elfs/build.rs,
  env_prover.rs -> elfs/src/lib.rs) and correct the claim that there is
  no RANGE_ELF_PATH env var (the proof CLI and devnet worker do use it).
…d-import warning

Clippy runs with `#[cfg(clippy)]` active, which means the
`include_elf!()` macro in the non-clippy branches is never reached.
This caused the top-level `use sp1_sdk::{Elf, include_elf}` to be
flagged as an unused import under `-D warnings`.

Fix: split the import into two cfg-gated lines so clippy only sees
`use sp1_sdk::Elf` (which IS used by the return types in both
functions), and the real build still imports `include_elf` as well.
…ests

The e2e integration tests in world-chain-tests (test_enforces_block_uncompressed_size_limit,
test_eth_api_assertions, test_engine_driver_pending_block_queries, etc.) intermittently fail
with 'base fee missing' or similar race conditions when many tests run in parallel on shared
CI runners. This is a pre-existing issue observed on both main and PR branches.

Adding retries=2 to the nextest default profile gives each failing test two re-runs before
it's counted as a failure, which is the standard mitigation for resource-sensitive integration
tests.
Adds a committed vkeys.json as the canonical reproducibility reference.
Run 'just verify-proof-vkeys' to verify current source matches, or
'just update-proof-vkeys' to regenerate after program changes.

Changes:
- proofs/succinct/elf/vkeys.json: placeholder with zero hashes; real values
  require running 'just update-proof-vkeys' with the SP1 toolchain installed.
  JSON structure matches the 'proof sp1 vkeys' CLI output format.
- .gitignore: allow proofs/succinct/elf/vkeys.json (alongside manifest.toml)
- Justfile: add update-proof-vkeys and verify-proof-vkeys recipes
- proofs/vkeys-ci.yml.new: staged CI workflow — copy to
  .github/workflows/vkeys.yml once the 'proof' package Cargo.toml is in place
Replace non-existent `proof` package with `world-chain-prover-sp1`
(proofs/prover-sp1/). Also drop the spurious `--features sp1` flag
(that package has no such feature) and fix the subcommand path from
`sp1 vkeys` to `vkeys` to match the actual CLI structure.
- Dockerfile.prover: change default FEATURES from "sp1,nitro" to "" so
  packages that do not define those features (world-chain-prover-sp1,
  world-chain-prover-nitro, world-chain-proposer, etc.) are not passed
  --features sp1,nitro. Package default features still apply. Update
  header comment with correct usage examples.

- docs/proof/proof-cli.md: fix two doc/code contradictions:
  * sp1 execute: add the required --elf / RANGE_ELF_PATH flag to the table
    and update the example; remove the stale claim that no ELF flag is needed.
  * nitro prove: remove "omit all three to skip PCR verification" claim.
    The code requires all three PCR measurements and bails when they are absent.

- Justfile: correct stale comment reference from
  proofs/succinct/utils/host/build.rs to proofs/succinct/elfs/build.rs.
  Fix verify-proof-vkeys to use diff <(jq -S . ...) so key-order
  differences between committed and freshly-generated JSON do not cause
  spurious CI failures. Fix update-proof-vkeys to write through jq -S
  for a canonical, consistently-sorted vkeys.json.
Without Docker, the SP1 guest ELF is compiled on the host machine, so
absolute file paths embedded by rustc (in panic location strings and
any residual DWARF sections) vary across machines and checkout locations.
This makes ELF bytes — and therefore vkeys — non-reproducible.

Fix: inject reproducibility flags into BuildArgs::rustflags for local
(non-Docker) builds only. Docker builds already achieve reproducibility
via fixed container paths and don't need these.

Flags added via BuildArgs::rustflags (each flag word is a separate Vec
element; sp1-build joins them with \x1f into CARGO_ENCODED_RUSTFLAGS):

  -C debuginfo=0
    Prevents DWARF sections from embedding source file paths or any
    other machine-specific metadata.

  --remap-path-prefix $workspace_root=/build
    Normalizes workspace source paths (e.g. /home/alice/world-chain →
    /build) so panic Location::file() strings are machine-independent.

  --remap-path-prefix $CARGO_HOME=/cargo
    Normalizes cargo registry / git dependency source paths.

  --remap-path-prefix $RUSTUP_HOME=/rustup
    Normalizes rustup toolchain / stdlib sysroot paths.

Also canonicalize() workspace_root before use so that symlinks in the
checkout path are resolved before passing to --remap-path-prefix.
Remove SP1_BUILD_DOCKER=false from build.rs and Justfile recipes.
Docker provides reproducible ELFs by fixing the build environment path
layout — the approach used by op-succinct, sp1-helios, and all other
SP1 adopters. SP1_BUILD_DOCKER=false is kept only in Dockerfile.prover
where Docker-in-Docker is genuinely unavailable.
@piohei piohei force-pushed the refactor/elf-hash-manifest branch from 574db68 to ec552f8 Compare June 18, 2026 16:05

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ec552f8. Configure here.

Comment thread Justfile
cargo run -p world-chain-prover-sp1 -- vkeys --output /tmp/vkeys-actual.json
jq -S . proofs/succinct/elf/vkeys.json > /tmp/vkeys-committed.json
jq -S . /tmp/vkeys-actual.json > /tmp/vkeys-actual-normalized.json
diff /tmp/vkeys-committed.json /tmp/vkeys-actual-normalized.json || (echo "ERROR: vkeys.json is out of date. Run 'just update-proof-vkeys' to regenerate." && exit 1)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Justfile omits SP1_BUILD_DOCKER

Medium Severity

update-proof-vkeys and verify-proof-vkeys invoke cargo run without SP1_BUILD_DOCKER=false, while release-proof.yml, Dockerfile.prover, and the staged vkeys.yml workflow pin the local sp1up v6.1.0 toolchain. proofs/succinct/elfs/build.rs hardcodes docker: true, so maintainer updates can diverge from CI and release measurements.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit ec552f8. Configure here.

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.

1 participant