-
Notifications
You must be signed in to change notification settings - Fork 310
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!: introduce WithHash<T>
+ use it in PublicImmutable
#8022
feat!: introduce WithHash<T>
+ use it in PublicImmutable
#8022
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Benchmark resultsMetrics with a significant change:
Detailed resultsAll benchmarks are run on txs on the This benchmark source data is available in JSON format on S3 here. Proof generationEach column represents the number of threads used in proof generation.
L2 block published to L1Each column represents the number of txs on an L2 block published to L1.
L2 chain processingEach column represents the number of blocks on the L2 chain where each block has 8 txs.
Circuits statsStats on running time and I/O sizes collected for every kernel circuit run across all benchmarks.
Stats on running time collected for app circuits
AVM SimulationTime to simulate various public functions in the AVM.
Public DB AccessTime to access various public DBs.
Tree insertion statsThe duration to insert a fixed batch of leaves into each tree type.
MiscellaneousTransaction sizes based on how many contract classes are registered in the tx.
Transaction size based on fee payment method | Metric | | |
957f63f
to
f5d0c27
Compare
f5d0c27
to
94b1141
Compare
PublicImmutable
6e3ad72
to
72ef3db
Compare
Changes to public function bytecode sizes
🧾 Summary (100% most significant diffs)
Full diff report 👇
|
0bc9c0c
to
b006047
Compare
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.
Very lovely, thanks for linking to the commits in each message in the review!
Co-authored-by: Nicolás Venturo <[email protected]>
Co-authored-by: Nicolás Venturo <[email protected]>
This reverts commit df24234.
Co-authored-by: Nicolás Venturo <[email protected]>
Co-authored-by: Nicolás Venturo <[email protected]>
faac2b8
to
e6b47b8
Compare
🤖 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).
Fixes #8399
Introducing
WithHash<T>
which Nico originally implemented in #11684 and using that inPublicImmutable
.+ Fixes a bug with generating TS artifacts of contracts containing storage slots larger than 9 (see comments below for explanation).
Optimizes
PublicImmutable
by storing packed values along with their hash in storage, then fetching the packed values in unconstrained, fetching hash in constrained and checking the hash.Note: It's not worthwhile to optimize the case where we store only 1 field in storage by not going with the loading-in-unconstrained flow because hashing 2 fields costs 80 gates and here we would hash just 1 extra field (to get the value hash). The gain is not worth the complexity here.
1 field gate diff:
TokenBridge::get_portal_address
Before: 9787
After: 9869
diff: +82 gates
As expected for 1 field we get a gate count rise as we do 1 more pedersen hash.
2 fields gate diff:
FPC::fee_entrypoint_private(...) gates
Before: 14219
After: 10464
diff: -3755 gates
3 fields gate diff:
AMM:add_liquidity
Before: 19113
After: 12039
diff: -7074 gates