plonk(recursion): handle zero public inputs in PI computation and add tests#1618
Merged
ivokub merged 5 commits intoConsensys:typo/fixes-v15from Dec 18, 2025
Conversation
Collaborator
|
Thanks for the contribution. Indeed, it crashed before. I only added a small change to avoid doing non-native |
ivokub
approved these changes
Dec 17, 2025
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.
This change fixes a crash in the recursive PLONK verifier when a circuit has zero public inputs. Previously, PrepareVerification unconditionally accessed witness.Public[0], causing an out-of-range panic. We now initialize PI to zero and only sum Lagrange contributions when len(witness.Public) > 0, matching the native backend’s behavior for zero-public-input circuits. A dedicated test was added to ensure recursive verification succeeds with an inner circuit that has no public inputs.
Note
Handles zero public inputs in recursive PLONK PI computation and adds a test verifying recursive proof with no public inputs.
std/recursion/plonk/verifier.go):PIwhen there are zero public inputs:pito0and only accumulate∑ Lᵢ*wᵢwhenlen(witness.Public) > 0.lagrange/denom/wPowIprogression to avoid out-of-range access.std/recursion/plonk/verifier_test.go):InnerCircuitZeroPublicandgetInnerZeroPublichelper.TestZeroPublicInputsBW6InBN254validating recursive verification for a circuit with no public inputs (ensureswitness.Publicis empty).Written by Cursor Bugbot for commit 3f3d36c. This will update automatically on new commits. Configure here.