-
Notifications
You must be signed in to change notification settings - Fork 297
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
refactor: Make get notes return all notes at beginning of array #4991 #5321
refactor: Make get notes return all notes at beginning of array #4991 #5321
Conversation
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. Values are compared against data from master at commit 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 16 txs.
Circuits statsStats on running time and I/O sizes collected for every circuit run across all benchmarks.
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
Transaction processing duration by data writes.
|
@LHerskind: Requested as a sanity check, of the main impl. Also having some pain figuring out the best way to mock the response, as it seems that the code surrounding the one we need is unable to deserialize an undefined value. Maybe I'm doing it wrong though and not mocking the right place. Anywho I have a few qns for tomorrow 🙏 😄 |
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.
Can you create a test that explicitly make this return a different array that what the oracle produces 👍
I'd strongly recommend holding this off until we can test this from noir directly. There we'd simply mock the oracle response and test the noir return value from noir itself. The end to end approach has a million in-between layers that make the test a) way harder to write b) way harder to read and ensure correctness c) way slower. |
I don't disagree, I've had to deal with the pain of trying to write this test that hopefully made even a modicum of sense. Somewhere down the line I realized that to do it optimally I needed to be able to mock a function from noir directly—even the oracle mock wouldn't allow for what I'd want it to do; and when I realized the above, I had to do this dumb work around. That said, I'm also happy with merging and opening another issue that can be addressed to directly test in noir once noir has support for it. Up to you guys ! |
Will close #2019 This PR converts SHA hashing inside noir circuits from outputting 2 128-bit fields to outputting 1 248-bit field. To fit inside the field, we truncate one byte. --- ### Noir Changes The constant `NUM_FIELDS_PER_SHA256` is now 1, so any hardcoded test values and function returns have been changed to use an array of one. I've kept it as an array rather than a single `Fr` to minimise changes across the repo and ensure if we want to revert `NUM_FIELDS_PER_SHA256` in future, it won't be so painful. However, we can also just use a single `Fr` if that's preferable. `TX_EFFECTS_HASH_LOG_FIELDS` Methods: - `field_from_bytes_32_trunc`: Converts a 32 byte array to a 31 byte field element (useful for comparisons with new `sha256_to_field`), tests in `types/src/utils/field.nr`. - `sha256_to_field`: Uses the same method as the previous version to convert the sha result (BE) bytes array to field, but leaves out the final byte. - `accumulate_sha256`: Used almost exclusively for enc/unenc logs hashing - takes in 2 31 byte field elements, assumed to be outputs of a previous sha hash, pads to 32 bytes and hashes them with `sha256_to_field` as a 64 byte array. Note that as before, other circuits that use sha (like tx effects hash and messages hash) do not use this method and instead create a flat byte array, then call `sha256_to_field`. --- ### L1 Contract Changes To match the Noir method, the `sha256ToField` function now truncates a byte and prepends a blank byte. Not prepending the blank byte means changing many struct fields from `bytes32` to `bytes31`. This (IIRC) is the same gas cost and creates more awkward encoding, so I kept the length with a blank byte. This also changes the slither file, as I removed some of the old encoding which flagged with new encoding... which also flags. ~Only the 'leaves' used in computing the `txsHash` in `TxsDecoder` and logs hashes have been changed to 31 bytes to match the Noir SHA accumulation (since we are repeating hashes of hashes).~ ~The TS code (see below) does pack the Header struct with 31 bytes per SHA, so we must shift the decoding in HeaderLib` by 3 bytes.~ As of 21.3, there have been a lot of changes in master to the way the txs effect hash (formerly calldata hash/txs hash) is calculated. Plus, now we actually recalculate the in/outHash (i.e. the root of the sha tree of messages) in the contract, so I have reverted to using 32 bytes everywhere with a prepended blank byte. --- ### TS Changes All `.hash()` methods which are also computed in the circuit have been changed to match the Noir code. In most places this just means truncating a byte with `.subarray(0, 31)` on the buffer. ~The `ContentCommitment` serialise/deserialise methods have been modified, as keeping `NUM_BYTES_PER_SHA256 = 32` caused a lot of issues in the background. Changing it to 31 to match Noir does mean slightly different encoding, but many fewer changes across the repo (and hopefully less confusion).~ As of 21.3, due to changes in master, it's now cleaner to keep `NUM_BYTES_PER_SHA256 = 32` and be sure to truncate and pad all SHA hashes which touch the Noir circuits. Since I've kept the hash output as an array of one in Noir, there are many tuples of one in ts (for the above reasoning) - this can be changed if preferable. Methods: - `toTruncField`: Mirrors Noir's `field_from_bytes_32_trunc` to convert to a field element - used in place of old method `to2Fields` (tested in `free_funcs.test.ts`). - `fromTruncField`: Converts the above back to a 31 byte buffer (tested as above). ---
Purpose of this PR is to clarify and simplify the bb interface for constructing and verifying Honk proofs (both UltraHonk and GoblinUltraHonk). A similar flow was previously achieved somewhat indirectly through the `goblin` class via `goblin.accumulate`. This was simply done for convenience a while back and is not the right thing long term. The new Honk flows are simplified and do not make use of anything like the `AcirComposer` used for Plonk. I have only added flows of the prove-AND-verify variety, i.e. more logic will be needed in order to separate out the proving and verifying (a la the prove-THEN-verify flows for Plonk). This includes serialization of proving and verification keys.
Resolves AztecProtocol/barretenberg#769. Resolves AztecProtocol/barretenberg#782. Generalise Zeromorph further to be able to instantiate with both KZG and IPA and switch ECCVM to use Zeromorph + IPA. This PR also fixes a small inconsistency in Zeromorph where we assumed that first element of the SRS is always going to be [1]_1 which is not the case if we work on Grumpkin. Unskip and complete eccvm transcript tests.
Co-authored-by: Jan Beneš <[email protected]>
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 good. Just please clean up the 2 things.
Addressed, thanks for the review(s) 🙏 |
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.32.1</summary> ## [0.32.1](aztec-package-v0.32.0...aztec-package-v0.32.1) (2024-04-02) ### Miscellaneous * Explicit type imports ([#5519](#5519)) ([2a217de](2a217de)) </details> <details><summary>barretenberg.js: 0.32.1</summary> ## [0.32.1](barretenberg.js-v0.32.0...barretenberg.js-v0.32.1) (2024-04-02) ### Features * Earthly split runners, structure reverts ([#5524](#5524)) ([fcb8787](fcb8787)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](#5423)) ([bea3fcb](bea3fcb)) </details> <details><summary>aztec-cli: 0.32.1</summary> ## [0.32.1](aztec-cli-v0.32.0...aztec-cli-v0.32.1) (2024-04-02) ### Miscellaneous * Explicit type imports ([#5519](#5519)) ([2a217de](2a217de)) </details> <details><summary>aztec-packages: 0.32.1</summary> ## [0.32.1](aztec-packages-v0.32.0...aztec-packages-v0.32.1) (2024-04-02) ### Features * **acir_gen:** Fold attribute at compile-time and initial non inlined ACIR ([#5341](#5341)) ([a979150](a979150)) * **acvm:** Execute multiple circuits ([#5380](#5380)) ([bb71920](bb71920)) * Dont double check num bits in brillig vm ([#5489](#5489)) ([a18288d](a18288d)) * Earthly split runners, structure reverts ([#5524](#5524)) ([fcb8787](fcb8787)) * Parallel gtest ([#5498](#5498)) ([349ea59](349ea59)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](#5423)) ([bea3fcb](bea3fcb)) * Cpp cache and add other e2e ([#5512](#5512)) ([4118bcd](4118bcd)) * Require noir-packages-test to finish ([#5505](#5505)) ([191f0df](191f0df)) * Univariate evals not set in ECCVM prover ([#5529](#5529)) ([f9a2b7c](f9a2b7c)) ### Miscellaneous * Add goblin ops in add_gates_to_ensure_all_polys_are_non_zero ([#5468](#5468)) ([b9041e4](b9041e4)) * **avm:** Add 15 additional 16-bit registers in ALU trace of AVM circuit ([#5503](#5503)) ([8725c39](8725c39)) * **avm:** Migrate memory data structure in AVM circuit to unordered map ([#5506](#5506)) ([ccd09aa](ccd09aa)) * Build contracts and protocol circuits sequentially if not enough ram ([#5499](#5499)) ([ea072b6](ea072b6)) * Bye bye shared ptrs for ultra/goblin ultra proving_keys :) ([#5407](#5407)) ([b94d0db](b94d0db)) * Clean up compute_next_accumulator ([#5516](#5516)) ([f9be2f2](f9be2f2)) * Explicit type imports ([#5519](#5519)) ([2a217de](2a217de)) * Improve caching in noir Earthfile ([#5513](#5513)) ([5d1fb44](5d1fb44)) * Inject fetcher instead of using global ([#5502](#5502)) ([a066544](a066544)) * Make get notes return all notes at beginning of array [#4991](#4991) ([#5321](#5321)) ([5c5b627](5c5b627)) * Move alphas generation to oink ([#5515](#5515)) ([3b964f3](3b964f3)) * Replace relative paths to noir-protocol-circuits ([a689e4e](a689e4e)) * Replace relative paths to noir-protocol-circuits ([db1bab5](db1bab5)) * Replace relative paths to noir-protocol-circuits ([b2ab64b](b2ab64b)) * Replace relative paths to noir-protocol-circuits ([1f468db](1f468db)) * Run nargo format for noir-projects ([#5483](#5483)) ([277168f](277168f)) </details> <details><summary>barretenberg: 0.32.1</summary> ## [0.32.1](barretenberg-v0.32.0...barretenberg-v0.32.1) (2024-04-02) ### Features * **acvm:** Execute multiple circuits ([#5380](#5380)) ([bb71920](bb71920)) * Earthly split runners, structure reverts ([#5524](#5524)) ([fcb8787](fcb8787)) * Parallel gtest ([#5498](#5498)) ([349ea59](349ea59)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](#5423)) ([bea3fcb](bea3fcb)) * Cpp cache and add other e2e ([#5512](#5512)) ([4118bcd](4118bcd)) * Univariate evals not set in ECCVM prover ([#5529](#5529)) ([f9a2b7c](f9a2b7c)) ### Miscellaneous * Add goblin ops in add_gates_to_ensure_all_polys_are_non_zero ([#5468](#5468)) ([b9041e4](b9041e4)) * **avm:** Add 15 additional 16-bit registers in ALU trace of AVM circuit ([#5503](#5503)) ([8725c39](8725c39)) * **avm:** Migrate memory data structure in AVM circuit to unordered map ([#5506](#5506)) ([ccd09aa](ccd09aa)) * Bye bye shared ptrs for ultra/goblin ultra proving_keys :) ([#5407](#5407)) ([b94d0db](b94d0db)) * Clean up compute_next_accumulator ([#5516](#5516)) ([f9be2f2](f9be2f2)) * Move alphas generation to oink ([#5515](#5515)) ([3b964f3](3b964f3)) </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.32.1</summary> ## [0.32.1](AztecProtocol/aztec-packages@aztec-package-v0.32.0...aztec-package-v0.32.1) (2024-04-02) ### Miscellaneous * Explicit type imports ([#5519](AztecProtocol/aztec-packages#5519)) ([2a217de](AztecProtocol/aztec-packages@2a217de)) </details> <details><summary>barretenberg.js: 0.32.1</summary> ## [0.32.1](AztecProtocol/aztec-packages@barretenberg.js-v0.32.0...barretenberg.js-v0.32.1) (2024-04-02) ### Features * Earthly split runners, structure reverts ([#5524](AztecProtocol/aztec-packages#5524)) ([fcb8787](AztecProtocol/aztec-packages@fcb8787)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](AztecProtocol/aztec-packages#5423)) ([bea3fcb](AztecProtocol/aztec-packages@bea3fcb)) </details> <details><summary>aztec-cli: 0.32.1</summary> ## [0.32.1](AztecProtocol/aztec-packages@aztec-cli-v0.32.0...aztec-cli-v0.32.1) (2024-04-02) ### Miscellaneous * Explicit type imports ([#5519](AztecProtocol/aztec-packages#5519)) ([2a217de](AztecProtocol/aztec-packages@2a217de)) </details> <details><summary>aztec-packages: 0.32.1</summary> ## [0.32.1](AztecProtocol/aztec-packages@aztec-packages-v0.32.0...aztec-packages-v0.32.1) (2024-04-02) ### Features * **acir_gen:** Fold attribute at compile-time and initial non inlined ACIR ([#5341](AztecProtocol/aztec-packages#5341)) ([a979150](AztecProtocol/aztec-packages@a979150)) * **acvm:** Execute multiple circuits ([#5380](AztecProtocol/aztec-packages#5380)) ([bb71920](AztecProtocol/aztec-packages@bb71920)) * Dont double check num bits in brillig vm ([#5489](AztecProtocol/aztec-packages#5489)) ([a18288d](AztecProtocol/aztec-packages@a18288d)) * Earthly split runners, structure reverts ([#5524](AztecProtocol/aztec-packages#5524)) ([fcb8787](AztecProtocol/aztec-packages@fcb8787)) * Parallel gtest ([#5498](AztecProtocol/aztec-packages#5498)) ([349ea59](AztecProtocol/aztec-packages@349ea59)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](AztecProtocol/aztec-packages#5423)) ([bea3fcb](AztecProtocol/aztec-packages@bea3fcb)) * Cpp cache and add other e2e ([#5512](AztecProtocol/aztec-packages#5512)) ([4118bcd](AztecProtocol/aztec-packages@4118bcd)) * Require noir-packages-test to finish ([#5505](AztecProtocol/aztec-packages#5505)) ([191f0df](AztecProtocol/aztec-packages@191f0df)) * Univariate evals not set in ECCVM prover ([#5529](AztecProtocol/aztec-packages#5529)) ([f9a2b7c](AztecProtocol/aztec-packages@f9a2b7c)) ### Miscellaneous * Add goblin ops in add_gates_to_ensure_all_polys_are_non_zero ([#5468](AztecProtocol/aztec-packages#5468)) ([b9041e4](AztecProtocol/aztec-packages@b9041e4)) * **avm:** Add 15 additional 16-bit registers in ALU trace of AVM circuit ([#5503](AztecProtocol/aztec-packages#5503)) ([8725c39](AztecProtocol/aztec-packages@8725c39)) * **avm:** Migrate memory data structure in AVM circuit to unordered map ([#5506](AztecProtocol/aztec-packages#5506)) ([ccd09aa](AztecProtocol/aztec-packages@ccd09aa)) * Build contracts and protocol circuits sequentially if not enough ram ([#5499](AztecProtocol/aztec-packages#5499)) ([ea072b6](AztecProtocol/aztec-packages@ea072b6)) * Bye bye shared ptrs for ultra/goblin ultra proving_keys :) ([#5407](AztecProtocol/aztec-packages#5407)) ([b94d0db](AztecProtocol/aztec-packages@b94d0db)) * Clean up compute_next_accumulator ([#5516](AztecProtocol/aztec-packages#5516)) ([f9be2f2](AztecProtocol/aztec-packages@f9be2f2)) * Explicit type imports ([#5519](AztecProtocol/aztec-packages#5519)) ([2a217de](AztecProtocol/aztec-packages@2a217de)) * Improve caching in noir Earthfile ([#5513](AztecProtocol/aztec-packages#5513)) ([5d1fb44](AztecProtocol/aztec-packages@5d1fb44)) * Inject fetcher instead of using global ([#5502](AztecProtocol/aztec-packages#5502)) ([a066544](AztecProtocol/aztec-packages@a066544)) * Make get notes return all notes at beginning of array [#4991](AztecProtocol/aztec-packages#4991) ([#5321](AztecProtocol/aztec-packages#5321)) ([5c5b627](AztecProtocol/aztec-packages@5c5b627)) * Move alphas generation to oink ([#5515](AztecProtocol/aztec-packages#5515)) ([3b964f3](AztecProtocol/aztec-packages@3b964f3)) * Replace relative paths to noir-protocol-circuits ([a689e4e](AztecProtocol/aztec-packages@a689e4e)) * Replace relative paths to noir-protocol-circuits ([db1bab5](AztecProtocol/aztec-packages@db1bab5)) * Replace relative paths to noir-protocol-circuits ([b2ab64b](AztecProtocol/aztec-packages@b2ab64b)) * Replace relative paths to noir-protocol-circuits ([1f468db](AztecProtocol/aztec-packages@1f468db)) * Run nargo format for noir-projects ([#5483](AztecProtocol/aztec-packages#5483)) ([277168f](AztecProtocol/aztec-packages@277168f)) </details> <details><summary>barretenberg: 0.32.1</summary> ## [0.32.1](AztecProtocol/aztec-packages@barretenberg-v0.32.0...barretenberg-v0.32.1) (2024-04-02) ### Features * **acvm:** Execute multiple circuits ([#5380](AztecProtocol/aztec-packages#5380)) ([bb71920](AztecProtocol/aztec-packages@bb71920)) * Earthly split runners, structure reverts ([#5524](AztecProtocol/aztec-packages#5524)) ([fcb8787](AztecProtocol/aztec-packages@fcb8787)) * Parallel gtest ([#5498](AztecProtocol/aztec-packages#5498)) ([349ea59](AztecProtocol/aztec-packages@349ea59)) ### Bug Fixes * **ci:** Turn on earthly for everyone ([#5423](AztecProtocol/aztec-packages#5423)) ([bea3fcb](AztecProtocol/aztec-packages@bea3fcb)) * Cpp cache and add other e2e ([#5512](AztecProtocol/aztec-packages#5512)) ([4118bcd](AztecProtocol/aztec-packages@4118bcd)) * Univariate evals not set in ECCVM prover ([#5529](AztecProtocol/aztec-packages#5529)) ([f9a2b7c](AztecProtocol/aztec-packages@f9a2b7c)) ### Miscellaneous * Add goblin ops in add_gates_to_ensure_all_polys_are_non_zero ([#5468](AztecProtocol/aztec-packages#5468)) ([b9041e4](AztecProtocol/aztec-packages@b9041e4)) * **avm:** Add 15 additional 16-bit registers in ALU trace of AVM circuit ([#5503](AztecProtocol/aztec-packages#5503)) ([8725c39](AztecProtocol/aztec-packages@8725c39)) * **avm:** Migrate memory data structure in AVM circuit to unordered map ([#5506](AztecProtocol/aztec-packages#5506)) ([ccd09aa](AztecProtocol/aztec-packages@ccd09aa)) * Bye bye shared ptrs for ultra/goblin ultra proving_keys :) ([#5407](AztecProtocol/aztec-packages#5407)) ([b94d0db](AztecProtocol/aztec-packages@b94d0db)) * Clean up compute_next_accumulator ([#5516](AztecProtocol/aztec-packages#5516)) ([f9be2f2](AztecProtocol/aztec-packages@f9be2f2)) * Move alphas generation to oink ([#5515](AztecProtocol/aztec-packages#5515)) ([3b964f3](AztecProtocol/aztec-packages@3b964f3)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Resolves #4991