-
Notifications
You must be signed in to change notification settings - Fork 324
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: k-shifts #11663
feat: k-shifts #11663
Conversation
Changes to public function bytecode sizes
🧾 Summary (100% most significant diffs)
Full diff report 👇
|
@@ -26,6 +26,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") | |||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 18) | |||
# We target clang18 and need this, eventually warning should be fixed or this will be unconditional. | |||
add_compile_options(-Wno-vla-cxx-extension) | |||
# This gets in the way of a valid designated initializer pattern (i.e. MyClass my_class{ .my_member = init_value }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was added after a discussion with Adam. IIUC this is part of Charlies incoming PR anyway.
|
||
namespace bb { | ||
|
||
/** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This class was added in a prior PR, I'm just moving it to its own file. The only changes are those associated with the right shift by k claims.
* combinations (based on challenge rho) of the unshifted, to-be-shifted-by-1, and to-be-right-shifted-by-k | ||
* polynomials by F, G, and H respectively, then A₀ = F + G/X + X^k*H. This polynomial is "folded" in Gemini to | ||
* produce d-1 univariate polynomials Fold_i, i = 1, ..., d-1. The second and third are the partially evaluated | ||
* batched polynomials A₀₊ = F + G/r + r^K*H, and A₀₋ = F - G/r + r^K*H. These are required in order to prove the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there should be a sign in A_{0-}, right? like F- G/r + (-1)^K r^K * H
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ahh I see below that K is even
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll add a note about even k to this block as well
RefVector(instance_witness.unshifted_commitments), | ||
RefVector(instance_witness.to_be_shifted_commitments), | ||
verifier_transcript); | ||
auto verifier_claims = GeminiVerifier::reduce_verification( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks much cleaner
const size_t num_not_to_be_shifted = num_polynomials - total_num_to_be_shifted; | ||
|
||
// Construct claim data for polynomials that are NOT to be shifted | ||
for (size_t idx = 0; idx < num_not_to_be_shifted; idx++) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks for improving the readability here
@@ -28,6 +28,35 @@ TEST(Polynomial, Shifted) | |||
} | |||
} | |||
|
|||
// Simple test/demonstration of right_shifted functionality | |||
TEST(Polynomial, RightShifted) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that's useful, thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
great work!
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.75.0</summary> ## [0.75.0](aztec-package-v0.74.0...aztec-package-v0.75.0) (2025-02-06) ### Miscellaneous * Playground name change ([#11720](#11720)) ([c5cbf65](c5cbf65)) </details> <details><summary>barretenberg.js: 0.75.0</summary> ## [0.75.0](barretenberg.js-v0.74.0...barretenberg.js-v0.75.0) (2025-02-06) ### Miscellaneous * Better bundling for bb.js, remove aztec.js bundling ([#11761](#11761)) ([8cc3f0a](8cc3f0a)) * Playground name change ([#11720](#11720)) ([c5cbf65](c5cbf65)) </details> <details><summary>aztec-packages: 0.75.0</summary> ## [0.75.0](aztec-packages-v0.74.0...aztec-packages-v0.75.0) (2025-02-06) ### ⚠ BREAKING CHANGES * introduce `WithHash<T>` + use it in `PublicImmutable` ([#8022](#8022)) * leonidas library ([#11596](#11596)) ### Features * Allow resolved types in constructors (noir-lang/noir#7223) ([b60a39d](b60a39d)) * Allow specifying multiple patterns in nargo test (noir-lang/noir#7186) ([b60a39d](b60a39d)) * Contracts deployed in txe should emit deployment nullifier automatically ([#11708](#11708)) ([20f5653](20f5653)) * **docs:** Applying structure feedback + adding nodes docs ([#10976](#10976)) ([2fd08ba](2fd08ba)) * **docs:** Inspiration / ideas page ([#11755](#11755)) ([0b012f1](0b012f1)) * **experimental:** Implement enum tag constants (noir-lang/noir#7183) ([b60a39d](b60a39d)) * **experimental:** Implement zeroed for enums (noir-lang/noir#7252) ([b60a39d](b60a39d)) * **experimental:** Parse match expressions (noir-lang/noir#7243) ([b60a39d](b60a39d)) * **experimental:** Support enums in comptime code (noir-lang/noir#7194) ([b60a39d](b60a39d)) * Gen public base prover.toml ([#11757](#11757)) ([1fa89da](1fa89da)) * Introduce `WithHash<T>` + use it in `PublicImmutable` ([#8022](#8022)) ([6c15604](6c15604)) * K-shifts ([#11663](#11663)) ([511abe5](511abe5)) * Leonidas library ([#11596](#11596)) ([e8cfed7](e8cfed7)) * **LSP:** Suggest enum variants without parameters (noir-lang/noir#7261) ([b60a39d](b60a39d)) * **optimization:** Add purity analysis to SSA (noir-lang/noir#7197) ([b60a39d](b60a39d)) * Report wrong proof length in the verifier contract ([#11728](#11728)) ([1a83cd2](1a83cd2)) * Simplify subtraction from self to return zero (noir-lang/noir#7189) ([b60a39d](b60a39d)) * Sync from aztec-packages (noir-lang/noir#7241) ([b60a39d](b60a39d)) ### Bug Fixes * Add missing `is_empty` check for enums (noir-lang/noir#7257) ([b60a39d](b60a39d)) * Avoid type error when calling something with a type alias of a function (noir-lang/noir#7239) ([b60a39d](b60a39d)) * **brillig:** Globals entry point reachability analysis (noir-lang/noir#7188) ([b60a39d](b60a39d)) * Contracts with no private / public functions should not fail to generate a contract artifact ([#11744](#11744)) ([672171c](672171c)) * Correct reversed callstacks (noir-lang/noir#7212) ([b60a39d](b60a39d)) * Deflake prover node epoch proof quote test ([#11773](#11773)) ([04e1061](04e1061)) * **docs:** Fix docs previews ([#11736](#11736)) ([255b3d8](255b3d8)) * Handle sequencer building block mid-synch ([#11735](#11735)) ([435a0af](435a0af)) * Prevent panic within `remove_possibly_mutated_cached_make_arrays` (noir-lang/noir#7264) ([b60a39d](b60a39d)) * **ssa:** Only attempt to inline constant Brillig calls for entry points (noir-lang/noir#7260) ([b60a39d](b60a39d)) * **ssa:** Use number of SSA instructions for the Brillig unrolling bytecode size limit (noir-lang/noir#7242) ([b60a39d](b60a39d)) * **unrolling:** Fetch original bytecode size from the original function (noir-lang/noir#7253) ([b60a39d](b60a39d)) ### Miscellaneous * **avm:** Add names to lookup settings ([#11768](#11768)) ([fafe3ba](fafe3ba)) * **avm:** Full row cleanup ([#11767](#11767)) ([6145cd0](6145cd0)) * **avm:** Use lookup by clk for sha params ([#11762](#11762)) ([b003567](b003567)) * Better bundling for bb.js, remove aztec.js bundling ([#11761](#11761)) ([8cc3f0a](8cc3f0a)) * Build docs in the merge queue (noir-lang/noir#7218) ([b60a39d](b60a39d)) * Bump gates diff (noir-lang/noir#7245) ([b60a39d](b60a39d)) * Change log level for block proposal ([#11734](#11734)) ([29ee9aa](29ee9aa)) * **ci:** Add test for global vars entry points regression (noir-lang/noir#7209) ([b60a39d](b60a39d)) * Clarify to_radix docs examples (noir-lang/noir#7230) ([b60a39d](b60a39d)) * **docs:** Moving references to noir-starter to awesome-noir (noir-lang/noir#7203) ([b60a39d](b60a39d)) * Early check type equality in try_unify (noir-lang/noir#7263) ([b60a39d](b60a39d)) * Exclude dependency fetching time from benchmarks (noir-lang/noir#7210) ([b60a39d](b60a39d)) * Fix struct example (noir-lang/noir#7198) ([b60a39d](b60a39d)) * More scalability for our metrics ([#11732](#11732)) ([52bbf14](52bbf14)) * Playground name change ([#11720](#11720)) ([c5cbf65](c5cbf65)) * Re-enable p2p test ([#11706](#11706)) ([652c251](652c251)), closes [#10737](#10737) * Remove stale zk constants and methods ([#11715](#11715)) ([7a2870f](7a2870f)) * Replace relative paths to noir-protocol-circuits ([aabab34](aabab34)) * Replace relative paths to noir-protocol-circuits ([0720d18](0720d18)) * Request txs in prover-node after each block finishes ([#11749](#11749)) ([61e4eee](61e4eee)) * Rework defunctionalize pass to not rely on DFG bugs (noir-lang/noir#7222) ([b60a39d](b60a39d)) * Sandbox lower sequencer log level ([#11742](#11742)) ([7b30758](7b30758)), closes [#11677](#11677) * **spartan:** Making the spartan script add the coinbase address ([#11235](#11235)) ([b97ff0d](b97ff0d)) * **ssa:** Flip the SSA Brillig constraint check to off by default (noir-lang/noir#7211) ([b60a39d](b60a39d)) * Start tracking time to run critical library tests (noir-lang/noir#7221) ([b60a39d](b60a39d)) * Update docs to use devcontainer feature (noir-lang/noir#7206) ([b60a39d](b60a39d)) * Use batch p2p reqresp for requesting txs in prover node ([#11741](#11741)) ([df9e4ec](df9e4ec)) </details> <details><summary>barretenberg: 0.75.0</summary> ## [0.75.0](barretenberg-v0.74.0...barretenberg-v0.75.0) (2025-02-06) ### Features * K-shifts ([#11663](#11663)) ([511abe5](511abe5)) * Report wrong proof length in the verifier contract ([#11728](#11728)) ([1a83cd2](1a83cd2)) ### Miscellaneous * **avm:** Add names to lookup settings ([#11768](#11768)) ([fafe3ba](fafe3ba)) * **avm:** Full row cleanup ([#11767](#11767)) ([6145cd0](6145cd0)) * **avm:** Use lookup by clk for sha params ([#11762](#11762)) ([b003567](b003567)) * Better bundling for bb.js, remove aztec.js bundling ([#11761](#11761)) ([8cc3f0a](8cc3f0a)) * Remove stale zk constants and methods ([#11715](#11715)) ([7a2870f](7a2870f)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.75.0</summary> ## [0.75.0](AztecProtocol/aztec-packages@aztec-package-v0.74.0...aztec-package-v0.75.0) (2025-02-06) ### Miscellaneous * Playground name change ([#11720](AztecProtocol/aztec-packages#11720)) ([c5cbf65](AztecProtocol/aztec-packages@c5cbf65)) </details> <details><summary>barretenberg.js: 0.75.0</summary> ## [0.75.0](AztecProtocol/aztec-packages@barretenberg.js-v0.74.0...barretenberg.js-v0.75.0) (2025-02-06) ### Miscellaneous * Better bundling for bb.js, remove aztec.js bundling ([#11761](AztecProtocol/aztec-packages#11761)) ([8cc3f0a](AztecProtocol/aztec-packages@8cc3f0a)) * Playground name change ([#11720](AztecProtocol/aztec-packages#11720)) ([c5cbf65](AztecProtocol/aztec-packages@c5cbf65)) </details> <details><summary>aztec-packages: 0.75.0</summary> ## [0.75.0](AztecProtocol/aztec-packages@aztec-packages-v0.74.0...aztec-packages-v0.75.0) (2025-02-06) ### ⚠ BREAKING CHANGES * introduce `WithHash<T>` + use it in `PublicImmutable` ([#8022](AztecProtocol/aztec-packages#8022)) * leonidas library ([#11596](AztecProtocol/aztec-packages#11596)) ### Features * Allow resolved types in constructors (noir-lang/noir#7223) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Allow specifying multiple patterns in nargo test (noir-lang/noir#7186) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Contracts deployed in txe should emit deployment nullifier automatically ([#11708](AztecProtocol/aztec-packages#11708)) ([20f5653](AztecProtocol/aztec-packages@20f5653)) * **docs:** Applying structure feedback + adding nodes docs ([#10976](AztecProtocol/aztec-packages#10976)) ([2fd08ba](AztecProtocol/aztec-packages@2fd08ba)) * **docs:** Inspiration / ideas page ([#11755](AztecProtocol/aztec-packages#11755)) ([0b012f1](AztecProtocol/aztec-packages@0b012f1)) * **experimental:** Implement enum tag constants (noir-lang/noir#7183) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **experimental:** Implement zeroed for enums (noir-lang/noir#7252) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **experimental:** Parse match expressions (noir-lang/noir#7243) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **experimental:** Support enums in comptime code (noir-lang/noir#7194) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Gen public base prover.toml ([#11757](AztecProtocol/aztec-packages#11757)) ([1fa89da](AztecProtocol/aztec-packages@1fa89da)) * Introduce `WithHash<T>` + use it in `PublicImmutable` ([#8022](AztecProtocol/aztec-packages#8022)) ([6c15604](AztecProtocol/aztec-packages@6c15604)) * K-shifts ([#11663](AztecProtocol/aztec-packages#11663)) ([511abe5](AztecProtocol/aztec-packages@511abe5)) * Leonidas library ([#11596](AztecProtocol/aztec-packages#11596)) ([e8cfed7](AztecProtocol/aztec-packages@e8cfed7)) * **LSP:** Suggest enum variants without parameters (noir-lang/noir#7261) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **optimization:** Add purity analysis to SSA (noir-lang/noir#7197) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Report wrong proof length in the verifier contract ([#11728](AztecProtocol/aztec-packages#11728)) ([1a83cd2](AztecProtocol/aztec-packages@1a83cd2)) * Simplify subtraction from self to return zero (noir-lang/noir#7189) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Sync from aztec-packages (noir-lang/noir#7241) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) ### Bug Fixes * Add missing `is_empty` check for enums (noir-lang/noir#7257) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Avoid type error when calling something with a type alias of a function (noir-lang/noir#7239) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **brillig:** Globals entry point reachability analysis (noir-lang/noir#7188) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Contracts with no private / public functions should not fail to generate a contract artifact ([#11744](AztecProtocol/aztec-packages#11744)) ([672171c](AztecProtocol/aztec-packages@672171c)) * Correct reversed callstacks (noir-lang/noir#7212) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Deflake prover node epoch proof quote test ([#11773](AztecProtocol/aztec-packages#11773)) ([04e1061](AztecProtocol/aztec-packages@04e1061)) * **docs:** Fix docs previews ([#11736](AztecProtocol/aztec-packages#11736)) ([255b3d8](AztecProtocol/aztec-packages@255b3d8)) * Handle sequencer building block mid-synch ([#11735](AztecProtocol/aztec-packages#11735)) ([435a0af](AztecProtocol/aztec-packages@435a0af)) * Prevent panic within `remove_possibly_mutated_cached_make_arrays` (noir-lang/noir#7264) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **ssa:** Only attempt to inline constant Brillig calls for entry points (noir-lang/noir#7260) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **ssa:** Use number of SSA instructions for the Brillig unrolling bytecode size limit (noir-lang/noir#7242) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **unrolling:** Fetch original bytecode size from the original function (noir-lang/noir#7253) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) ### Miscellaneous * **avm:** Add names to lookup settings ([#11768](AztecProtocol/aztec-packages#11768)) ([fafe3ba](AztecProtocol/aztec-packages@fafe3ba)) * **avm:** Full row cleanup ([#11767](AztecProtocol/aztec-packages#11767)) ([6145cd0](AztecProtocol/aztec-packages@6145cd0)) * **avm:** Use lookup by clk for sha params ([#11762](AztecProtocol/aztec-packages#11762)) ([b003567](AztecProtocol/aztec-packages@b003567)) * Better bundling for bb.js, remove aztec.js bundling ([#11761](AztecProtocol/aztec-packages#11761)) ([8cc3f0a](AztecProtocol/aztec-packages@8cc3f0a)) * Build docs in the merge queue (noir-lang/noir#7218) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Bump gates diff (noir-lang/noir#7245) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Change log level for block proposal ([#11734](AztecProtocol/aztec-packages#11734)) ([29ee9aa](AztecProtocol/aztec-packages@29ee9aa)) * **ci:** Add test for global vars entry points regression (noir-lang/noir#7209) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Clarify to_radix docs examples (noir-lang/noir#7230) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * **docs:** Moving references to noir-starter to awesome-noir (noir-lang/noir#7203) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Early check type equality in try_unify (noir-lang/noir#7263) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Exclude dependency fetching time from benchmarks (noir-lang/noir#7210) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Fix struct example (noir-lang/noir#7198) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * More scalability for our metrics ([#11732](AztecProtocol/aztec-packages#11732)) ([52bbf14](AztecProtocol/aztec-packages@52bbf14)) * Playground name change ([#11720](AztecProtocol/aztec-packages#11720)) ([c5cbf65](AztecProtocol/aztec-packages@c5cbf65)) * Re-enable p2p test ([#11706](AztecProtocol/aztec-packages#11706)) ([652c251](AztecProtocol/aztec-packages@652c251)), closes [#10737](AztecProtocol/aztec-packages#10737) * Remove stale zk constants and methods ([#11715](AztecProtocol/aztec-packages#11715)) ([7a2870f](AztecProtocol/aztec-packages@7a2870f)) * Replace relative paths to noir-protocol-circuits ([aabab34](AztecProtocol/aztec-packages@aabab34)) * Replace relative paths to noir-protocol-circuits ([0720d18](AztecProtocol/aztec-packages@0720d18)) * Request txs in prover-node after each block finishes ([#11749](AztecProtocol/aztec-packages#11749)) ([61e4eee](AztecProtocol/aztec-packages@61e4eee)) * Rework defunctionalize pass to not rely on DFG bugs (noir-lang/noir#7222) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Sandbox lower sequencer log level ([#11742](AztecProtocol/aztec-packages#11742)) ([7b30758](AztecProtocol/aztec-packages@7b30758)), closes [#11677](AztecProtocol/aztec-packages#11677) * **spartan:** Making the spartan script add the coinbase address ([#11235](AztecProtocol/aztec-packages#11235)) ([b97ff0d](AztecProtocol/aztec-packages@b97ff0d)) * **ssa:** Flip the SSA Brillig constraint check to off by default (noir-lang/noir#7211) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Start tracking time to run critical library tests (noir-lang/noir#7221) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Update docs to use devcontainer feature (noir-lang/noir#7206) ([b60a39d](AztecProtocol/aztec-packages@b60a39d)) * Use batch p2p reqresp for requesting txs in prover node ([#11741](AztecProtocol/aztec-packages#11741)) ([df9e4ec](AztecProtocol/aztec-packages@df9e4ec)) </details> <details><summary>barretenberg: 0.75.0</summary> ## [0.75.0](AztecProtocol/aztec-packages@barretenberg-v0.74.0...barretenberg-v0.75.0) (2025-02-06) ### Features * K-shifts ([#11663](AztecProtocol/aztec-packages#11663)) ([511abe5](AztecProtocol/aztec-packages@511abe5)) * Report wrong proof length in the verifier contract ([#11728](AztecProtocol/aztec-packages#11728)) ([1a83cd2](AztecProtocol/aztec-packages@1a83cd2)) ### Miscellaneous * **avm:** Add names to lookup settings ([#11768](AztecProtocol/aztec-packages#11768)) ([fafe3ba](AztecProtocol/aztec-packages@fafe3ba)) * **avm:** Full row cleanup ([#11767](AztecProtocol/aztec-packages#11767)) ([6145cd0](AztecProtocol/aztec-packages@6145cd0)) * **avm:** Use lookup by clk for sha params ([#11762](AztecProtocol/aztec-packages#11762)) ([b003567](AztecProtocol/aztec-packages@b003567)) * Better bundling for bb.js, remove aztec.js bundling ([#11761](AztecProtocol/aztec-packages#11761)) ([8cc3f0a](AztecProtocol/aztec-packages@8cc3f0a)) * Remove stale zk constants and methods ([#11715](AztecProtocol/aztec-packages#11715)) ([7a2870f](AztecProtocol/aztec-packages@7a2870f)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Adds logic to the Shplemini PCS to open right-shift-by-k polynomials from their unshifted counterparts. As a result of prior PRs in this series, the logic for doing this is isolated to sub classes
PolynomialBatcher
andClaimBatcher
.Note: the mechanism is tested in the commitment_schemes_tests suite but not yet used in any real protocols.