refactor: Optimize private call stack item hash for gate count#7285
refactor: Optimize private call stack item hash for gate count#7285
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. Join @LHerskind and the rest of your teammates on |
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 | | |
921718c to
fdc5bde
Compare
fea148c to
752252f
Compare
Changes to circuit sizes
🧾 Summary (100% most significant diffs)
Full diff report 👇
|
fdc5bde to
c27ae79
Compare
752252f to
da132ed
Compare
c27ae79 to
fa9c94d
Compare
da132ed to
9ed5785
Compare
| */ | ||
| public hash(): Fr { | ||
| return pedersenHash(this.toFields(), GeneratorIndex.CALL_STACK_ITEM); | ||
| const fields = [ |
There was a problem hiding this comment.
| const fields = [ | |
| // We don't need a hash of the entire private call stack item, just a few pieces. | |
| // See Issue(#7092) for more details. | |
| const fields = [ |
Would also include the comment here as it could be confusing.
There was a problem hiding this comment.
Looks good. But I think it would be nicer to wrap the hashed values in PrivateCallRequest struct as Leila proposed (which already exists, just needs to be modified).
Hashing just a few values out of the call stack item is not very nice code-quality-wise.
But can be done in another PR.
bdecd38 to
d6f6ec0
Compare
| } | ||
| self.private_call_requests.push( | ||
| PrivateCallRequest { hash: item.hash(), caller_context, start_side_effect_counter, end_side_effect_counter } | ||
| PrivateCallRequest { |
There was a problem hiding this comment.
Could it make sense for the call_private_function oracle to return directly the items necessary for the PrivateCallRequest struct and we validate that? If the oracle returns a call stack item that is largely unconstrained somebody could modify the above code to trust the oracle response when only part of it is constrained (the items that end up in PrivateCallRequest). Previously it was constrained because the whole of it was hashed
There was a problem hiding this comment.
But we are also getting return values and such from it. Think we might look at it in a separate go?
d6f6ec0 to
58566d7
Compare
sirasistant
left a comment
There was a problem hiding this comment.
Looks good, we can tackle changing call_private_function_internal to return PrivateCallRequest in a followup PR.
This is necessary long term though to avoid exposing unconstrained witnesses to the private function that could mistakenly be used
* master: (176 commits) refactor: counters (#7342) chore: notify Noir team on changes to the stdlib (#7387) chore(bb): do not instantiate Relation (#7389) chore(avm): avoid including flavor where possible (#7361) chore(avm): better log_derivative_inverse_round (#7360) chore(avm): smaller prover (#7359) chore(avm): smaller transcript (#7357) feat: Sync from noir (#7352) feat: VK tree (#6914) chore(docs): Update token tutorial (#7241) chore: sync external contributions (#6984) fix: privacy leak in private refund (#7358) fix: included argshash computation in public call_interfaces and cleanup (#7354) docs: making private refunds smooth-brain friendly (#7343) refactor: optimize public call stack item hashing (#7330) fix: Allow importing notes from other contracts and inject them in the macros (#7349) refactor: Optimize private call stack item hash for gate count (#7285) git subrepo push --branch=master noir-projects/aztec-nr git_subrepo.sh: Fix parent in .gitrepo file. [skip ci] chore: replace relative paths to noir-protocol-circuits ...
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.46.0</summary> ## [0.46.0](aztec-package-v0.45.1...aztec-package-v0.46.0) (2024-07-09) ### Features * VK tree ([#6914](#6914)) ([8631237](8631237)) </details> <details><summary>barretenberg.js: 0.46.0</summary> ## [0.46.0](barretenberg.js-v0.45.1...barretenberg.js-v0.46.0) (2024-07-09) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.46.0</summary> ## [0.46.0](aztec-packages-v0.45.1...aztec-packages-v0.46.0) (2024-07-09) ### ⚠ BREAKING CHANGES * constant inputs for blackbox ([#7222](#7222)) ### Features * Add more slice methods to the stdlib (noir-lang/noir#5424) ([6137a10](6137a10)) * Constant inputs for blackbox ([#7222](#7222)) ([9f9ded2](9f9ded2)) * Detect subgraphs that are completely independent from inputs or outputs (noir-lang/noir#5402) ([c7b1ae4](c7b1ae4)) * Lsp "go to definition" for modules (noir-lang/noir#5406) ([c7b1ae4](c7b1ae4)) * Lsp rename/find-all-references for traits (noir-lang/noir#5409) ([c7b1ae4](c7b1ae4)) * Lsp rename/find-all-references for type aliases (noir-lang/noir#5414) ([6137a10](6137a10)) * Sync from aztec-packages (noir-lang/noir#5408) ([c7b1ae4](c7b1ae4)) * Sync from aztec-packages (noir-lang/noir#5432) ([6137a10](6137a10)) * TXE docs and usability ([#7305](#7305)) ([6b2a351](6b2a351)) * Unquote multiple items from annotations (noir-lang/noir#5441) ([6137a10](6137a10)) * VK tree ([#6914](#6914)) ([8631237](8631237)) ### Bug Fixes * Allow importing notes from other contracts and inject them in the macros ([#7349](#7349)) ([586c0b0](586c0b0)) * Change panic to error in interpreter (noir-lang/noir#5446) ([6137a10](6137a10)) * Complete call stacks with no_predicates (noir-lang/noir#5418) ([c7b1ae4](c7b1ae4)) * Correct range for overlfowing/underflowing integer assignment (noir-lang/noir#5416) ([c7b1ae4](c7b1ae4)) * Included argshash computation in public call_interfaces and cleanup ([#7354](#7354)) ([13e9b94](13e9b94)) * Lsp find struct reference in return locations and paths (noir-lang/noir#5404) ([c7b1ae4](c7b1ae4)) * Lsp struct rename/reference difference (noir-lang/noir#5411) ([6137a10](6137a10)) * Privacy leak in private refund ([#7358](#7358)) ([e05f6f0](e05f6f0)), closes [#7321](#7321) ### Miscellaneous * Add remaining slice methods to the interpreter (noir-lang/noir#5422) ([c7b1ae4](c7b1ae4)) * Add test and benchmarks for poseidon2 (noir-lang/noir#5386) ([c7b1ae4](c7b1ae4)) * **avm:** Avoid including flavor where possible ([#7361](#7361)) ([dbdffd6](dbdffd6)) * **avm:** Better log_derivative_inverse_round ([#7360](#7360)) ([6329833](6329833)) * **avm:** Smaller prover ([#7359](#7359)) ([7d8c833](7d8c833)) * **avm:** Smaller transcript ([#7357](#7357)) ([3952a44](3952a44)) * **bb:** Do not instantiate Relation ([#7389](#7389)) ([d9cbf4c](d9cbf4c)) * Counters ([#7342](#7342)) ([819f370](819f370)) * **docs:** Fix link to docker ([#7395](#7395)) ([ad4a401](ad4a401)) * **docs:** Update token tutorial ([#7241](#7241)) ([0414eb5](0414eb5)) * Dummy workflow (noir-lang/noir#5438) ([6137a10](6137a10)) * Extracts refactoring of reading error payloads from [#5403](#5403) (noir-lang/noir#5413) ([6137a10](6137a10)) * Generate declaration files for VKs ([#7391](#7391)) ([7c96636](7c96636)) * Merge `BarretenbergVerifierBackend` and `BarretenbergBackend` (noir-lang/noir#5399) ([6137a10](6137a10)) * Move SSA checks to a new folder (noir-lang/noir#5434) ([6137a10](6137a10)) * Notify Noir team on changes to the stdlib ([#7387](#7387)) ([061aac3](061aac3)) * Optimize private call stack item hash for gate count ([#7285](#7285)) ([783d9b6](783d9b6)) * Optimize public call stack item hashing ([#7330](#7330)) ([4a5093c](4a5093c)) * Refactor logic around inlining `no_predicates` functions (noir-lang/noir#5433) ([6137a10](6137a10)) * Replace relative paths to noir-protocol-circuits ([8510269](8510269)) * Replace relative paths to noir-protocol-circuits ([9eb8d1c](9eb8d1c)) * Sync external contributions ([#6984](#6984)) ([a265b29](a265b29)) ### Documentation * Making private refunds smooth-brain friendly ([#7343](#7343)) ([533c937](533c937)) * Update overview.md (fix link text) ([#7344](#7344)) ([79e5856](79e5856)) </details> <details><summary>barretenberg: 0.46.0</summary> ## [0.46.0](barretenberg-v0.45.1...barretenberg-v0.46.0) (2024-07-09) ### ⚠ BREAKING CHANGES * constant inputs for blackbox ([#7222](#7222)) ### Features * Constant inputs for blackbox ([#7222](#7222)) ([9f9ded2](9f9ded2)) ### Miscellaneous * **avm:** Avoid including flavor where possible ([#7361](#7361)) ([dbdffd6](dbdffd6)) * **avm:** Better log_derivative_inverse_round ([#7360](#7360)) ([6329833](6329833)) * **avm:** Smaller prover ([#7359](#7359)) ([7d8c833](7d8c833)) * **avm:** Smaller transcript ([#7357](#7357)) ([3952a44](3952a44)) * **bb:** Do not instantiate Relation ([#7389](#7389)) ([d9cbf4c](d9cbf4c)) * Counters ([#7342](#7342)) ([819f370](819f370)) </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.46.0</summary> ## [0.46.0](AztecProtocol/aztec-packages@aztec-package-v0.45.1...aztec-package-v0.46.0) (2024-07-09) ### Features * VK tree ([#6914](AztecProtocol/aztec-packages#6914)) ([8631237](AztecProtocol/aztec-packages@8631237)) </details> <details><summary>barretenberg.js: 0.46.0</summary> ## [0.46.0](AztecProtocol/aztec-packages@barretenberg.js-v0.45.1...barretenberg.js-v0.46.0) (2024-07-09) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.46.0</summary> ## [0.46.0](AztecProtocol/aztec-packages@aztec-packages-v0.45.1...aztec-packages-v0.46.0) (2024-07-09) ### ⚠ BREAKING CHANGES * constant inputs for blackbox ([#7222](AztecProtocol/aztec-packages#7222)) ### Features * Add more slice methods to the stdlib (noir-lang/noir#5424) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Constant inputs for blackbox ([#7222](AztecProtocol/aztec-packages#7222)) ([9f9ded2](AztecProtocol/aztec-packages@9f9ded2)) * Detect subgraphs that are completely independent from inputs or outputs (noir-lang/noir#5402) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Lsp "go to definition" for modules (noir-lang/noir#5406) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Lsp rename/find-all-references for traits (noir-lang/noir#5409) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Lsp rename/find-all-references for type aliases (noir-lang/noir#5414) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Sync from aztec-packages (noir-lang/noir#5408) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Sync from aztec-packages (noir-lang/noir#5432) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * TXE docs and usability ([#7305](AztecProtocol/aztec-packages#7305)) ([6b2a351](AztecProtocol/aztec-packages@6b2a351)) * Unquote multiple items from annotations (noir-lang/noir#5441) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * VK tree ([#6914](AztecProtocol/aztec-packages#6914)) ([8631237](AztecProtocol/aztec-packages@8631237)) ### Bug Fixes * Allow importing notes from other contracts and inject them in the macros ([#7349](AztecProtocol/aztec-packages#7349)) ([586c0b0](AztecProtocol/aztec-packages@586c0b0)) * Change panic to error in interpreter (noir-lang/noir#5446) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Complete call stacks with no_predicates (noir-lang/noir#5418) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Correct range for overlfowing/underflowing integer assignment (noir-lang/noir#5416) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Included argshash computation in public call_interfaces and cleanup ([#7354](AztecProtocol/aztec-packages#7354)) ([13e9b94](AztecProtocol/aztec-packages@13e9b94)) * Lsp find struct reference in return locations and paths (noir-lang/noir#5404) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Lsp struct rename/reference difference (noir-lang/noir#5411) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Privacy leak in private refund ([#7358](AztecProtocol/aztec-packages#7358)) ([e05f6f0](AztecProtocol/aztec-packages@e05f6f0)), closes [#7321](AztecProtocol/aztec-packages#7321) ### Miscellaneous * Add remaining slice methods to the interpreter (noir-lang/noir#5422) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * Add test and benchmarks for poseidon2 (noir-lang/noir#5386) ([c7b1ae4](AztecProtocol/aztec-packages@c7b1ae4)) * **avm:** Avoid including flavor where possible ([#7361](AztecProtocol/aztec-packages#7361)) ([dbdffd6](AztecProtocol/aztec-packages@dbdffd6)) * **avm:** Better log_derivative_inverse_round ([#7360](AztecProtocol/aztec-packages#7360)) ([6329833](AztecProtocol/aztec-packages@6329833)) * **avm:** Smaller prover ([#7359](AztecProtocol/aztec-packages#7359)) ([7d8c833](AztecProtocol/aztec-packages@7d8c833)) * **avm:** Smaller transcript ([#7357](AztecProtocol/aztec-packages#7357)) ([3952a44](AztecProtocol/aztec-packages@3952a44)) * **bb:** Do not instantiate Relation ([#7389](AztecProtocol/aztec-packages#7389)) ([d9cbf4c](AztecProtocol/aztec-packages@d9cbf4c)) * Counters ([#7342](AztecProtocol/aztec-packages#7342)) ([819f370](AztecProtocol/aztec-packages@819f370)) * **docs:** Fix link to docker ([#7395](AztecProtocol/aztec-packages#7395)) ([ad4a401](AztecProtocol/aztec-packages@ad4a401)) * **docs:** Update token tutorial ([#7241](AztecProtocol/aztec-packages#7241)) ([0414eb5](AztecProtocol/aztec-packages@0414eb5)) * Dummy workflow (noir-lang/noir#5438) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Extracts refactoring of reading error payloads from [#5403](AztecProtocol/aztec-packages#5403) (noir-lang/noir#5413) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Generate declaration files for VKs ([#7391](AztecProtocol/aztec-packages#7391)) ([7c96636](AztecProtocol/aztec-packages@7c96636)) * Merge `BarretenbergVerifierBackend` and `BarretenbergBackend` (noir-lang/noir#5399) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Move SSA checks to a new folder (noir-lang/noir#5434) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Notify Noir team on changes to the stdlib ([#7387](AztecProtocol/aztec-packages#7387)) ([061aac3](AztecProtocol/aztec-packages@061aac3)) * Optimize private call stack item hash for gate count ([#7285](AztecProtocol/aztec-packages#7285)) ([783d9b6](AztecProtocol/aztec-packages@783d9b6)) * Optimize public call stack item hashing ([#7330](AztecProtocol/aztec-packages#7330)) ([4a5093c](AztecProtocol/aztec-packages@4a5093c)) * Refactor logic around inlining `no_predicates` functions (noir-lang/noir#5433) ([6137a10](AztecProtocol/aztec-packages@6137a10)) * Replace relative paths to noir-protocol-circuits ([8510269](AztecProtocol/aztec-packages@8510269)) * Replace relative paths to noir-protocol-circuits ([9eb8d1c](AztecProtocol/aztec-packages@9eb8d1c)) * Sync external contributions ([#6984](AztecProtocol/aztec-packages#6984)) ([a265b29](AztecProtocol/aztec-packages@a265b29)) ### Documentation * Making private refunds smooth-brain friendly ([#7343](AztecProtocol/aztec-packages#7343)) ([533c937](AztecProtocol/aztec-packages@533c937)) * Update overview.md (fix link text) ([#7344](AztecProtocol/aztec-packages#7344)) ([79e5856](AztecProtocol/aztec-packages@79e5856)) </details> <details><summary>barretenberg: 0.46.0</summary> ## [0.46.0](AztecProtocol/aztec-packages@barretenberg-v0.45.1...barretenberg-v0.46.0) (2024-07-09) ### ⚠ BREAKING CHANGES * constant inputs for blackbox ([#7222](AztecProtocol/aztec-packages#7222)) ### Features * Constant inputs for blackbox ([#7222](AztecProtocol/aztec-packages#7222)) ([9f9ded2](AztecProtocol/aztec-packages@9f9ded2)) ### Miscellaneous * **avm:** Avoid including flavor where possible ([#7361](AztecProtocol/aztec-packages#7361)) ([dbdffd6](AztecProtocol/aztec-packages@dbdffd6)) * **avm:** Better log_derivative_inverse_round ([#7360](AztecProtocol/aztec-packages#7360)) ([6329833](AztecProtocol/aztec-packages@6329833)) * **avm:** Smaller prover ([#7359](AztecProtocol/aztec-packages#7359)) ([7d8c833](AztecProtocol/aztec-packages@7d8c833)) * **avm:** Smaller transcript ([#7357](AztecProtocol/aztec-packages#7357)) ([3952a44](AztecProtocol/aztec-packages@3952a44)) * **bb:** Do not instantiate Relation ([#7389](AztecProtocol/aztec-packages#7389)) ([d9cbf4c](AztecProtocol/aztec-packages@d9cbf4c)) * Counters ([#7342](AztecProtocol/aztec-packages#7342)) ([819f370](AztecProtocol/aztec-packages@819f370)) </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 #7092.
In particular notice the costs around entrypoints 👀 50% reduction, cutting away 1 million constraints.
Tests passed in CI earlier, but I updated a big stack that seemed to kill it as it could not run 4 branches in CI for me at the same time :)