feat(l1): upgrade stateless-validator guests to ERE v0.17.0 and pin ere by tag - #7249
feat(l1): upgrade stateless-validator guests to ERE v0.17.0 and pin ere by tag#7249ilitteri wants to merge 3 commits into
Conversation
v0.16.3 fixes the OpenVM zkvm accelerator and v0.17.0 adds zkVMProver::execute_estimated_cost. Neither release moves a zkVM SDK: openvm stays at v2.1.0-preview, sp1 at v6.4.0 and zisk at 1.1.0-alpha, so the version table in zkvm-version.sh is unchanged and only the rev it is keyed on moves.
…h for which ere release the stateless validator is built against. The ere version is stated in the four stateless-validator manifests, in zkvm-version.sh and in the release workflow, and nothing compares them. A bare rev is also not something the release workflow can act on: it pulls ere-compiler-<zkvm> and ere-server-<zkvm> by image tag, so the rev and the image tag are two independent statements of the same fact. If they disagree the guests are compiled against one ere and executed under another, which produces a plausible ELF rather than a failure. The manifests now pin tag = "v0.17.0", ere-tag.sh reads the tag back out of them and fails if they disagree or if any regresses to a bare rev, and the release workflow derives ERE_TAG from it instead of hardcoding a copy. zkvm-version.sh keys its SDK table on the tag for the same reason it keyed on the rev before, so bumping ere still forces the table to be revisited. make check-ere-pins runs in the check-cargo-locks job so a disagreement surfaces on the pull request rather than at release time.
|
🤖 Kimi Code ReviewI'll review this PR which changes ere dependency pinning from bare git revisions to version tags, adding verification scripts to prevent silent divergence between compiler and runtime images. Overall AssessmentThis is a well-structured DevOps/infrastructure PR that fixes a real operational hazard: silent version skew between the ere compiler image used to build guest ELF binaries and the ere server image used to execute them. The solution is sound—derive image tags from manifest pins rather than hardcoding them separately. Detailed Findings1. Shell Script Robustness:
|
| Item | Severity | Status |
|---|---|---|
| 1. Greedy regex fragility | Low | Acceptable with documentation |
| 2. Empty input handling | None | Working as intended |
| 3. Makefile comment accuracy | Low | Minor clarification needed |
4. GITHUB_ENV injection risk |
Low | Consider hardening |
| 5. Hardcoded ZKVM version table | Medium | Design limitation, document |
6. check-cargo-lock path bug |
Medium | Pre-existing, fix separately |
| 7. Stale comment in Cargo.toml | Low | Fix in this PR |
The PR is fundamentally sound and addresses a real operational risk. The most important fix is Item 7 (stale comment), which could mislead future maintainers about the pinning mechanism.
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
🤖 Codex Code ReviewNo findings. I reviewed the operational path around the new source-of-truth change and didn’t find a correctness or security regression in the PR. The new guard in .github/scripts/ere-tag.sh correctly rejects missing or conflicting I also executed the scripts locally against the checked-out manifests: Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
🤖 Claude Code ReviewGood, executable bit is set correctly. I have everything needed for the review. Review: PR 7249 — Pin ere by tag, add
|
ere-tag.sh re-derived agreement that zkvm-version.sh already enforced: it declares the ere tag and fails when a guest manifest does not pin it, so pairwise agreement between those manifests follows from that check rather than needing its own. What the separate script did add is kept. zkvm-version.sh now checks the parent manifest alongside the three bins, which matters because the parent pins ere-platform-core while each bin pins its own ere-platform-<zkvm>, so a drift between them puts two ere versions in one guest and checking only the bin being asked about would let that through. It also grew --ere-tag, so the release workflow can derive ERE_TAG rather than repeating it, and make check-ere-pins runs the same check on pull requests.
| # The table above is only valid for ERE_TAG; refuse to guess if anything moved. | ||
| for manifest in "${MANIFESTS[@]}"; do | ||
| [[ -f $manifest ]] || { echo "no manifest at $manifest" >&2; exit 1; } | ||
| grep -q "tag = \"$ERE_TAG\"" "$manifest" && continue |
There was a problem hiding this comment.
We should match against git = "https://github.com/eth-act/ere", tag = "$ERE_TAG" here, in case there's another dependency tagged by tag and version as ERE
Motivation
ERE v0.17.0 is out (v0.16.3 fixed the OpenVM zkvm accelerator, v0.17.0 added
zkVMProver::execute_estimated_cost).Separately, the ere version is stated in the guest manifests, in
zkvm-version.shand in the release workflow'sERE_TAG, and nothing compares the last of those to the others. A bare rev is also not something the release workflow can act on: it pullsere-compiler-<zkvm>andere-server-<zkvm>by image tag, so the rev and the image tag are two independent statements of one fact. If they disagree, the guests are compiled against one ere and executed under another, which yields a plausible ELF rather than a failure.Description
rev = "8961a4e7…"totag = "v0.17.0", and regenerate the four lockfiles.zkvm-version.shalready declared the ere tag and rejected a guest manifest that had moved off it. It now also checks the parent manifest, not justbin/<zkvm>— the parent pinsere-platform-corewhile each bin pins its ownere-platform-<zkvm>, so a drift between them puts two ere versions in one guest, and checking only the bin being asked about let that through.--ere-tagto that script so the release workflow derivesERE_TAGfrom it instead of keeping a second copy of the version.make check-ere-pins, wired into the existingcheck-cargo-locksjob, so a disagreement surfaces on the pull request rather than at release time.No zkVM SDK moves in this range — OpenVM stays
v2.1.0-preview, SP1v6.4.0, ZisK1.1.0-alpha— so the version table and the release artifact names are unchanged.Worth noting for reviewers: the only ere change in this range that touches a crate the guests link is
crates/platform/openvm/src/zkvm_accelerator.rs, and that file is behind thezkvm-acceleratorfeature this build disables (we keep ethrex's own OpenVM crypto provider). The ELF bytes may still differ, since they are produced by a different compiler image.build-stateless-validator-guestruns on pushes to main and tags, not on pull requests, so the guest compile itself is exercised after merge.Checklist
STORE_SCHEMA_VERSION(crates/storage/lib.rs) if the PR includes breaking changes to theStorerequiring a re-sync. — not applicable, noStorechanges.