fix: harden batch chonk verifier.#23484
Merged
Merged
Conversation
277cd63 to
235d46b
Compare
ludamad
approved these changes
May 29, 2026
iakovenkos
approved these changes
Jun 2, 2026
ludamad
approved these changes
Jun 3, 2026
ludamad
approved these changes
Jun 3, 2026
Main changes: - Bind prover-supplied IPA `G_0` values in `IPA::batch_reduce_verify` with an independent batched SRS MSM check. - Harden `ChonkBatchVerifier` lifecycle, queue validation, duplicate request IDs, queue bounds, invalid VK/proof-size handling, callback exceptions, and shutdown cleanup. - Harden bbapi batch verifier FIFO result delivery and startup cleanup, including FIFO path validation, terminal FIFO failure handling, and pending request failure results for malformed proof fields. - Make `BatchChonkVerifier` reject pending TS promises on FIFO/decode failures, wait briefly for native stop to flush FIFO result frames, and clean up temp FIFO directories reliably. - Make Chonk verifier API wrong-VK byte lengths return `valid=false` before deserialization, including in wasm builds where catch blocks are compiled away. - Keep the pinned bb.js Chonk test from re-reading bounded wasm inputs after the native backend case has run.
AztecBot
added a commit
that referenced
this pull request
Jun 8, 2026
… --ci-refresh-chonk ## What Refreshes the pinned Chonk IVC inputs (`barretenberg/cpp/scripts/chonk-inputs.hash`) so the **Nightly Debug Build** goes green again. This PR carries the `ci-refresh-chonk` label **and** a `--ci-refresh-chonk` head-commit marker. PR CI's post-action (`ci_update_chonk_inputs.sh`) regenerates the pinned inputs, uploads the new tarball to S3, verifies the smallest flow through `ChonkPinnedIvcInputsTest.AllPinnedFlows`, and pushes a follow-up commit replacing the placeholder hash in this PR with the freshly-pinned value. **Do not merge until that follow-up commit lands** — the hash here is a `0000…` placeholder until then. Supersedes the earlier closed-unmerged refresh attempt #23744; the pin is still at the 2026-05-21 value (`209dde8e69a27c9f`), so the nightly has stayed red. ## Root cause Nightly debug build run [27085031299](https://github.com/AztecProtocol/aztec-packages/actions/runs/27085031299) failed in: ``` FAILED: barretenberg/cpp/scripts/run_test.sh bbapi_tests ChonkPinnedIvcInputsTest.AllPinnedFlows (code: 1) ``` The failure is on circuit 10/10 (`hiding_kernel`) of the `deploy_ecdsar1+sponsored_fpc` pinned flow: ``` Pub inputs offset mismatch: 669 vs 673 Commitment mismatch: Q_M, Q_C, Q_L, Q_R, Q_O, Q_4, Q_5, Q_ARITH, Q_SORT, ... C++ exception: Assertion failed: (kernel_return_data_match) Reason: kernel_return_data mismatch: proof contains { 0x183227397098d014..., 0x0 } but kernel_calldata commitment is { 0x..01, 0x..02 } ``` The `hiding_kernel` circuit's public-input layout changed (offset 669 → 673, plus selector-commitment changes), so the **precomputed VK and proof baked into the pinned `ivc-inputs.msgpack` are stale**. The reconstructed `kernel_return_data` from the stale public inputs reads a sentinel `{1, 2}` (the BN254 generator, i.e. an empty databus column) instead of the real return-data commitment, tripping the consistency check. That check is `BB_ASSERT_DEBUG(kernel_return_data_match, ...)` at `barretenberg/cpp/src/barretenberg/chonk/chonk.cpp:169` — a **debug-only** assertion compiled out of release/PR CI. Only the nightly *debug* build exercises it, which is why the stale pin slips past merge-queue CI. The pin was last bumped 2026-05-21. Circuit-affecting barretenberg changes have since landed on `next` without `ci-refresh-chonk`, most notably: - #23484 *fix: harden batch chonk verifier* — adds an independent batched-SRS MSM check in `IPA::batch_reduce_verify` (`commitment_schemes/ipa/ipa.hpp`); the IPA verifier lives inside the hiding kernel, which accounts for the new public inputs and changed selector commitments. - #23615 *feat: optimize sumcheck in ECCVM and Translator*. ## Fix Regenerate and re-pin the Chonk inputs via the standard `ci-refresh-chonk` flow (this PR). No source changes are needed — the pinned fixtures just need to track the current circuits. ## Follow-up (separate) Because the assertion is debug-only, circuit changes can stale the pin with no PR-CI signal, and refresh PRs have repeatedly been opened and closed without landing. Worth deciding whether `chonk_inputs.sh check` should exercise the pinned-flow IVC with debug asserts at PR time (or whether the nightly should hard-block), so this is caught before it reaches the nightly. Tracking separately. --- *Created by [claudebox](https://claudebox.work/v2/sessions/1bec730eb3623e82) · group: `slackbot`*
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Main changes:
G_0values inIPA::batch_reduce_verifywith an independent batched SRS MSM check.ChonkBatchVerifierlifecycle, queue validation, duplicate request IDs, queue bounds, invalid VK/proof-size handling, callback exceptions, and shutdown cleanup.BatchChonkVerifierreject pending TS promises on FIFO/decode failures, wait briefly for native stop to flush FIFO result frames, and clean up temp FIFO directories reliably.valid=falsebefore deserialization, including in wasm builds where catch blocks are compiled away.