plonk(recursion): handle zero public inputs in PI computation and add tests #1618
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
Safely compute PI when there are zero public inputs and add a test verifying recursive proof works with an inner circuit that has no public inputs.
std/recursion/plonk/verifier.go):pito0and compute Lagrange sum only whenlen(witness.Public) > 0.wPowI/lagrangeupdates to avoid out-of-range access.std/recursion/plonk/verifier_test.go):InnerCircuitZeroPublicand helper to produce proof with zero public inputs.TestZeroPublicInputsBW6InBN254to ensure recursive verification succeeds with emptywitness.Public.Written by Cursor Bugbot for commit 4a99cc4. This will update automatically on new commits. Configure here.