Skip to content

perf(challenges): use signed accumulation for sparse evaluation - #266

Closed
Acentelles wants to merge 1 commit into
LayerZero-Labs:mainfrom
Acentelles:perf/signed-sparse-challenge-evaluation-main
Closed

Acentelles wants to merge 1 commit into
LayerZero-Labs:mainfrom
Acentelles:perf/signed-sparse-challenge-evaluation-main

Conversation

@Acentelles

Copy link
Copy Markdown
Collaborator

Summary

SparseChallenge evaluation at a point now accumulates coefficients of magnitude one or two by signed addition in the extension field. Other coefficients are still embedded into the base field and multiplied in with a mixed base-field operation, and the ordinary base-field case is E = F.

Magnitude two is handled by repeating the term, which preserves the polynomial over every field. Inputs are validated as before: mismatched term counts, zero coefficients and out-of-range positions return an error.

There is no change to the proof, the transcript or the setup; only the verifier's arithmetic changes.

Changes

  • akita-challenges, challenge.rs: a signed-accumulation evaluator and its validation.

Measured effect (on the recursion integration stack)

The standalone row delta on main is not measured (OPEN). The figures below are total trace rows (real plus virtual) of Jolt's recursion example, whose guest verifies one Akita proof of an inner Jolt proof. Each was measured without and with this change on the recursion integration stack, in two builds that also carry the factored compression-weight evaluation and the terminal quotient certificate.

Build 1 was measured in two runs, on an AMD Ryzen 9 7950X host and an AMD EPYC 7B13 host; rows and guest ELFs are identical across the runs.

Inner proof Without With Difference
$2^{12}$ 68,927,710 68,257,497 -670,213
$2^{20}$ 167,526,238 162,763,883 -4,762,355

Build 2 adds further verifier changes and was measured in one run, on an AMD EPYC 7B13 host:

Inner proof Without With Difference
$2^{12}$ 68,380,552 67,710,339 -670,213
$2^{20}$ 166,866,977 162,104,622 -4,762,355

On build 2, the honest proof is accepted and a tampered proof is rejected, and the proof and tampered-proof bytes are identical with and without the change.

Reproduce

Run the a16z/jolt#1911 recursion example (--features akita,field-inline,ntt-inline, trace --embed) at inner $2^{12}$ and $2^{20}$ with the Akita dependency on a recursion integration build with and without this commit, and compare the total rows.

Base

This PR targets main, and the commit applies to it without conflict. The figures above were measured on the recursion integration stack, not on main.

@Acentelles
Acentelles requested a review from a team October 26, 2026 18:27
@Acentelles

Copy link
Copy Markdown
Collaborator Author

Superseded by #268: retargeted to markos/recursion-integration, where this change was measured.

@Acentelles Acentelles closed this Oct 26, 2026
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