-
Notifications
You must be signed in to change notification settings - Fork 234
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(Notes): Make get_notes return all notes at the beginning of the array #4991
Comments
While the single return value case is clear (and a common use case), the line is a bit blurred when working with multiple notes, since lack of It is unclear to me how useful this feature would be in this case, though of course let mut count = 0;
// filter
for some_note in opt_notes.filter(|opt| opt.is_some()):
count += some_note.unwrap_unchecked().value
// if let
for opt_note in opt_notes:
if let Some(note) = opt_note:
count += note.value |
…#5321) Resolves #4991 --------- Co-authored-by: Miranda Wood <miranda@aztecprotocol.com> Co-authored-by: ledwards2225 <98505400+ledwards2225@users.noreply.github.com> Co-authored-by: maramihali <mara@aztecprotocol.com> Co-authored-by: Santiago Palladino <santiago@aztecprotocol.com> Co-authored-by: ludamad <adam.domurad@gmail.com> Co-authored-by: AztecBot <tech@aztecprotocol.com> Co-authored-by: Lasse Herskind <16536249+LHerskind@users.noreply.github.com> Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Co-authored-by: Jan Beneš <janbenes1234@gmail.com>
🤖 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).
get_notes
returnsOption<Note>[]
, with theSome
values in the same order as they were returned from the PXE. This means that if e.g. we were to callget_notes
with a limit of 1 and merge #4988 (so that the function returns one and only one note), we wouldn't know where in the array the note is and would need to manually search for it. Similarly, processing all notes requires looking at the entire array, potentially keeping track of e.g. how many notes we've seen.I worry that this makes it hard to properly constrain applications that read notes. While a cooperative PXE would return all notes at the beginning, a malicious one might choose not to and exploit applications that incorrectly assume e.g. that the first note is valid.
I propose we make
get_notes
constrain the returned array so that all notes are placed at the beginning of the array. We can easily do this by having a second array that we copy into with read and write indices, or even do it in place with careful swapping ofNone
andSome
values.The text was updated successfully, but these errors were encountered: