-
Notifications
You must be signed in to change notification settings - Fork 271
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!: compile-time incorrect exec environment errors #6442
Conversation
Marking as a draft since some parts of the docsite likely need updating (e.g. examples), and I haven't thoroughly reviewed that yet. |
pub fn private( | ||
context: &mut PrivateContext, | ||
approved_action_storage_slot: Field, | ||
is_valid_impl: fn(&mut PrivateContext, Field) -> bool | ||
) -> Self { | ||
AccountActions::init( | ||
Context::private(context), | ||
approved_action_storage_slot, | ||
is_valid_impl | ||
) | ||
} | ||
|
||
pub fn public( | ||
context: &mut PublicContext, | ||
approved_action_storage_slot: Field, | ||
is_valid_impl: fn(&mut PrivateContext, Field) -> bool | ||
) -> Self { | ||
AccountActions::init( | ||
Context::public(context), | ||
approved_action_storage_slot, | ||
is_valid_impl | ||
) | ||
} |
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 entirely unnecessary - all these do is call the init
function with the correct type. I made init
generic and replaced all of the private
and public
calls with init
.
// TODO (https://github.com/AztecProtocol/aztec-packages/issues/5818): remove this impl and leave the PublicContext impl | ||
// once AvmContext becomes PublicContext. | ||
impl <T> PublicImmutable<T, &mut AvmContext> { |
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 is simply a copy of the PublicContext
impl. I added a note in #5818 so that we don't forget to remove it once the transition is complete.
noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr
Outdated
Show resolved
Hide resolved
pub fn to_unconstrained(self) -> PrivateMutable<Note, ()> { | ||
PrivateMutable { context: (), storage_slot: self.storage_slot } | ||
} | ||
|
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 might seem odd out of context, see my comment here.
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.
Something seems wrong with this link for me, if I click, it just refreshes the page, and I don't get to another comment 🤔
#[aztec(private)] | ||
fn get_imm_card() -> CardNote { | ||
storage.private_immutable.get_note() | ||
} |
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 wrong: we can't call get_note
from unconstrained
since it requires a private context to store side-effects in! This function always fails when called, but no test called it so we never noticed this.
The fix is straightforward, though it did force me to implement the Serialize
trait for CardNote
now that we return it from a private function.
I updated the docs, including some additional notes on execution modes and the |
@@ -22,22 +22,32 @@ On this and the following pages in this section, you’ll learn: | |||
- Practical implications of Storage in real smart contracts | |||
In an Aztec.nr contract, storage is to be defined as a single struct, that contains both public and private state variables. | |||
|
|||
## Public and private state variables |
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 section didn't really seem to add anything here: the concepts are barely mentioned, whereas we have both high and low level explanations in other places. I think we can just remove this part and rely on the other sections to cover this in detail. I added links to help users find those.
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.
Really cool work. I love the changes. Having this catch at comp time is great. Contexts being added everywhere is weird but I think the added benefit is worth it. Thanks for the clear comments also.
noir-projects/noir-protocol-circuits/crates/types/src/constants.nr
Outdated
Show resolved
Hide resolved
…ion' into nv/context-traits
Commit 6b4e6da fixed the doc links, and the previous run passed CI, so we're force-merging skipping CI checks to not block other tasks. |
Docs PreviewHey there! 👋 You can check your preview at https://664cdbb7ea6b9a1e7ee99580--aztec-docs-dev.netlify.app |
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.41.0</summary> ## [0.41.0](aztec-package-v0.40.1...aztec-package-v0.41.0) (2024-05-21) ### Miscellaneous * **aztec-package:** Synchronize aztec-packages versions </details> <details><summary>barretenberg.js: 0.41.0</summary> ## [0.41.0](barretenberg.js-v0.40.1...barretenberg.js-v0.41.0) (2024-05-21) ### Features * Vk_as_fields, proof_as_fields flows for honk ([#6406](#6406)) ([a6100ad](a6100ad)) ### Miscellaneous * Remove acvmInfo from bb.js CLI ([#6507](#6507)) ([e298c76](e298c76)) </details> <details><summary>aztec-packages: 0.41.0</summary> ## [0.41.0](aztec-packages-v0.40.1...aztec-packages-v0.41.0) (2024-05-21) ### ⚠ BREAKING CHANGES * compile-time incorrect exec environment errors ([#6442](#6442)) * add is_infinite to curve addition opcode ([#6384](#6384)) * remove backend interactions from `nargo` ([#6320](#6320)) ### Features * `npk_m_hash` in all notes + key rotation test ([#6405](#6405)) ([74e98d4](74e98d4)) * Add encrypted log outgoing body ([#6334](#6334)) ([fa9f442](fa9f442)) * Add first version of kernel reset circuit ([#6393](#6393)) ([ed6df8e](ed6df8e)) * Add is_infinite to curve addition opcode ([#6384](#6384)) ([75d81c5](75d81c5)) * Add native rust implementations of pedersen functions (noir-lang/noir#4871) ([8bbbbb6](8bbbbb6)) * Add nullifying key to Token Note ([#6130](#6130)) ([95c6b4a](95c6b4a)) * Adding autogenerated variants for the reset circuit ([#6508](#6508)) ([8e8d2dd](8e8d2dd)) * **avm-simulator:** Cap gas for external calls ([#6479](#6479)) ([c8771ba](c8771ba)) * **avm:** Gzip avm bytecode ([#6475](#6475)) ([29559bd](29559bd)) * **avm:** To_radix gadget ([#6368](#6368)) ([89dd25f](89dd25f)) * Benchmark private proving ([#6409](#6409)) ([e9e5526](e9e5526)) * Compile-time incorrect exec environment errors ([#6442](#6442)) ([0f75efd](0f75efd)) * Do not return databus returndata, keep it private. (noir-lang/noir#5023) ([26f2197](26f2197)) * **docs:** Authwit how tos ([#6220](#6220)) ([78f13d9](78f13d9)) * **docs:** Key rotation / owner -> nullifier key docs ([#6538](#6538)) ([2453ba8](2453ba8)) * Full encryption and decryption of log in ts ([#6348](#6348)) ([0ac83dc](0ac83dc)) * Generic key validation request ([#6474](#6474)) ([948ec38](948ec38)) * Improved ClientIvc ([#6429](#6429)) ([f360b3f](f360b3f)) * Laying out a new recursion constraint for honk ([#6489](#6489)) ([af9fea4](af9fea4)) * New docs structure ([#6195](#6195)) ([9cca814](9cca814)) * Pay out arbitrary fee to coinbase on L1 ([#6436](#6436)) ([1b99de8](1b99de8)) * Remove total logs len from pre tail kernels + add to L1 ([#6466](#6466)) ([66a2d43](66a2d43)) * Run benchmarks for ACIR proving ([#6155](#6155)) ([ebf6fc2](ebf6fc2)) * Squash transient note logs ([#6268](#6268)) ([4574877](4574877)) * Sum transaction fees and pay on l1 ([#6522](#6522)) ([bf441da](bf441da)) * Translator recursive verifier ([#6327](#6327)) ([9321aef](9321aef)) * Update the encrypted note log format ([#6411](#6411)) ([e5cc9dc](e5cc9dc)) * Validate counters ([#6365](#6365)) ([1f28b3a](1f28b3a)) * View functions with static context enforcing ([#6338](#6338)) ([22ad5a5](22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([#6406](#6406)) ([a6100ad](a6100ad)) ### Bug Fixes * Arm ci ([#6480](#6480)) ([237952e](237952e)) * Asset struct serialization does not match Noir internal serialization ([#6494](#6494)) ([9e6a4c3](9e6a4c3)) * **avm-simulator:** Actually wrap oracles ([#6449](#6449)) ([8685acc](8685acc)) * **avm-simulator:** Nested calls should preserve static context ([#6414](#6414)) ([44d7916](44d7916)) * **avm-simulator:** Pending storage and nullifiers should be accessible in grandchild nested calls ([#6428](#6428)) ([84d2e1f](84d2e1f)) * Buggy e2e key registry test setup ([#6496](#6496)) ([52d85d1](52d85d1)) * **ci:** ARM ([#6521](#6521)) ([d1095f6](d1095f6)) * **ci:** Arm concurrency ([#6564](#6564)) ([a265da0](a265da0)) * Disable buggy ClientIVC tests ([#6546](#6546)) ([b61dea3](b61dea3)) * Disk attach edge case ([#6430](#6430)) ([2366ad3](2366ad3)) * **docs:** Clarify content on portals ([#6431](#6431)) ([869df4d](869df4d)) * Don't start multiple runners during RequestLimitExceeded ([#6444](#6444)) ([7c4c822](7c4c822)) * Dont start multiple builders ([#6437](#6437)) ([d67ab1c](d67ab1c)) * Fix no predicates for brillig with intermediate functions (noir-lang/noir#5015) ([26f2197](26f2197)) * Fixed several vulnerabilities in U128, added some tests (noir-lang/noir#5024) ([26f2197](26f2197)) * Increase N_max in Zeromorph ([#6415](#6415)) ([9e643b4](9e643b4)) * Quick fix of [#6405](#6405) by removing context from value note utils ([#6509](#6509)) ([3a4d828](3a4d828)) * Removed plain from path in array args of contract interfaces ([#6497](#6497)) ([2b37729](2b37729)) * Runs-on inconsistency and simplify concurrency keys ([#6433](#6433)) ([80674d9](80674d9)) * Spot retry fixup ([#6476](#6476)) ([784d784](784d784)) ### Miscellaneous * Add benchmarks for pedersen and schnorr verification (noir-lang/noir#5056) ([8bbbbb6](8bbbbb6)) * Add c++ tests for generator derivation ([#6528](#6528)) ([72931bd](72931bd)) * Add script to print lines of code (noir-lang/noir#4991) ([26f2197](26f2197)) * Add some docs on syncing noir ([#6340](#6340)) ([bb68fcd](bb68fcd)) * Anvil kill wrapper now supports mac ([#6520](#6520)) ([2a5d975](2a5d975)) * **avm:** Wrap oracles with unconstrained fns ([#6421](#6421)) ([3e7e094](3e7e094)) * Bump earthly ([#6419](#6419)) ([3d78751](3d78751)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6462](#6462)) ([26eac62](26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6495](#6495)) ([90d8092](90d8092)) * Change some error messages for avm switch ([#6447](#6447)) ([74d6519](74d6519)) * **ci:** Better retry defaults ([#6472](#6472)) ([b23f1fd](b23f1fd)) * **ci:** Consistency as external check ([#6460](#6460)) ([6793a75](6793a75)) * **ci:** Dont detach ebs ([#6441](#6441)) ([f933fc0](f933fc0)) * **ci:** Fix on-demand starting ([#6434](#6434)) ([c3efb9c](c3efb9c)) * **ci:** Increase timeouts ([#6426](#6426)) ([44986fe](44986fe)) * **ci:** Only run circleci on master ([#6525](#6525)) ([c75fbd4](c75fbd4)) * **ci:** Push l1-contracts tests off of critical path ([#6400](#6400)) ([ce0ae6d](ce0ae6d)) * **ci:** Reenable arm build ([#6455](#6455)) ([2862767](2862767)) * **ci:** Require setup in merge-check ([#6454](#6454)) ([ad73061](ad73061)) * **ci:** Spot capacity and reaping ([#6561](#6561)) ([8c639b5](8c639b5)) * Clean up kernel types by removing is_static from function_data ([#6557](#6557)) ([83ba29f](83ba29f)) * Cleanup the encrypted log incoming body ([#6325](#6325)) ([e88c209](e88c209)) * Copy subset of constants to cpp ([#6544](#6544)) ([21dc72a](21dc72a)) * Do not rebuild yarn-projects on bench-comment ([#6396](#6396)) ([797115b](797115b)) * **docs:** Adding analytics ([#6350](#6350)) ([6417cd9](6417cd9)) * **docs:** Restructure improvs ([#6502](#6502)) ([c3b573e](c3b573e)) * Fix linter issues in AVM ([#6057](#6057)) ([c2e72b1](c2e72b1)) * Fix logs upload to S3 ([#6401](#6401)) ([9df0602](9df0602)) * Fix migration notes ([#6458](#6458)) ([bee85a9](bee85a9)) * Fix migration notes ([#6551](#6551)) ([89bc350](89bc350)) * Fix notes 0.41.0 ([#6461](#6461)) ([04b0ec5](04b0ec5)) * Fix poor performance and long compile times in value_note.derement() ([#6523](#6523)) ([002b4aa](002b4aa)) * Fix tester image copy pattern ([#6438](#6438)) ([b892eae](b892eae)) * Get_nullifier_keys cleanup ([#6451](#6451)) ([8a71fd5](8a71fd5)) * Lower max public bytecode to 20k ([#6477](#6477)) ([ce192f0](ce192f0)) * Move `UPLOAD_LOGS` into root earthfile ([#6424](#6424)) ([d723da9](d723da9)) * Nuking `KeyStore` and `KeyPair` interfaces ([#6553](#6553)) ([23e0518](23e0518)) * Parameterise cycle_group by `Builder` rather than `Composer` ([#6565](#6565)) ([ea36bf9](ea36bf9)) * Prefetch noir deps in earthly for caching ([#6556](#6556)) ([8ee9060](8ee9060)) * Private call validation ([#6510](#6510)) ([07dc072](07dc072)) * Purge secret and open keywords ([#6501](#6501)) ([f9c74c4](f9c74c4)), closes [#5538](#5538) * Recommend Noir and rust plugin ([#6558](#6558)) ([298561f](298561f)) * Refactor key rotate and address comments from 6405 ([#6450](#6450)) ([6f3dab8](6f3dab8)) * Remove acvmInfo from bb.js CLI ([#6507](#6507)) ([e298c76](e298c76)) * Remove backend interactions from `nargo` ([#6320](#6320)) ([7a31896](7a31896)) * Replace relative paths to noir-protocol-circuits ([94ab877](94ab877)) * Replace relative paths to noir-protocol-circuits ([9f04bfe](9f04bfe)) * Replace relative paths to noir-protocol-circuits ([67f29e5](67f29e5)) * Replace relative paths to noir-protocol-circuits ([a7a4b86](a7a4b86)) * Replace relative paths to noir-protocol-circuits ([c6f61a4](c6f61a4)) * Share decider with ultra_prover ([#5467](#5467)) ([b3b7376](b3b7376)) * Switch over to constructing gates report in bash ([#6491](#6491)) ([1fa5963](1fa5963)) * **tests:** Change error messages in preparation for AVM ([#6422](#6422)) ([6616dc6](6616dc6)) ### Documentation * Sumcheck documentation ([#5841](#5841)) ([116eef0](116eef0)) * Updating key docs in concepts section ([#6387](#6387)) ([921a7f4](921a7f4)) </details> <details><summary>barretenberg: 0.41.0</summary> ## [0.41.0](barretenberg-v0.40.1...barretenberg-v0.41.0) (2024-05-21) ### ⚠ BREAKING CHANGES * add is_infinite to curve addition opcode ([#6384](#6384)) ### Features * Add is_infinite to curve addition opcode ([#6384](#6384)) ([75d81c5](75d81c5)) * **avm-simulator:** Cap gas for external calls ([#6479](#6479)) ([c8771ba](c8771ba)) * **avm:** Gzip avm bytecode ([#6475](#6475)) ([29559bd](29559bd)) * **avm:** To_radix gadget ([#6368](#6368)) ([89dd25f](89dd25f)) * Full encryption and decryption of log in ts ([#6348](#6348)) ([0ac83dc](0ac83dc)) * Improved ClientIvc ([#6429](#6429)) ([f360b3f](f360b3f)) * Laying out a new recursion constraint for honk ([#6489](#6489)) ([af9fea4](af9fea4)) * Remove total logs len from pre tail kernels + add to L1 ([#6466](#6466)) ([66a2d43](66a2d43)) * Run benchmarks for ACIR proving ([#6155](#6155)) ([ebf6fc2](ebf6fc2)) * Squash transient note logs ([#6268](#6268)) ([4574877](4574877)) * Sum transaction fees and pay on l1 ([#6522](#6522)) ([bf441da](bf441da)) * Translator recursive verifier ([#6327](#6327)) ([9321aef](9321aef)) * View functions with static context enforcing ([#6338](#6338)) ([22ad5a5](22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([#6406](#6406)) ([a6100ad](a6100ad)) ### Bug Fixes * Disable buggy ClientIVC tests ([#6546](#6546)) ([b61dea3](b61dea3)) * Increase N_max in Zeromorph ([#6415](#6415)) ([9e643b4](9e643b4)) ### Miscellaneous * Add c++ tests for generator derivation ([#6528](#6528)) ([72931bd](72931bd)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6462](#6462)) ([26eac62](26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6495](#6495)) ([90d8092](90d8092)) * Copy subset of constants to cpp ([#6544](#6544)) ([21dc72a](21dc72a)) * Lower max public bytecode to 20k ([#6477](#6477)) ([ce192f0](ce192f0)) * Parameterise cycle_group by `Builder` rather than `Composer` ([#6565](#6565)) ([ea36bf9](ea36bf9)) * Private call validation ([#6510](#6510)) ([07dc072](07dc072)) * Share decider with ultra_prover ([#5467](#5467)) ([b3b7376](b3b7376)) ### Documentation * Sumcheck documentation ([#5841](#5841)) ([116eef0](116eef0)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Benchmark resultsNo base data found for comparison. 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 16 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
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 | | Transaction processing duration by data writes.
|
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.41.0</summary> ## [0.41.0](AztecProtocol/aztec-packages@aztec-package-v0.40.1...aztec-package-v0.41.0) (2024-05-21) ### Miscellaneous * **aztec-package:** Synchronize aztec-packages versions </details> <details><summary>barretenberg.js: 0.41.0</summary> ## [0.41.0](AztecProtocol/aztec-packages@barretenberg.js-v0.40.1...barretenberg.js-v0.41.0) (2024-05-21) ### Features * Vk_as_fields, proof_as_fields flows for honk ([#6406](AztecProtocol/aztec-packages#6406)) ([a6100ad](AztecProtocol/aztec-packages@a6100ad)) ### Miscellaneous * Remove acvmInfo from bb.js CLI ([#6507](AztecProtocol/aztec-packages#6507)) ([e298c76](AztecProtocol/aztec-packages@e298c76)) </details> <details><summary>aztec-packages: 0.41.0</summary> ## [0.41.0](AztecProtocol/aztec-packages@aztec-packages-v0.40.1...aztec-packages-v0.41.0) (2024-05-21) ### ⚠ BREAKING CHANGES * compile-time incorrect exec environment errors ([#6442](AztecProtocol/aztec-packages#6442)) * add is_infinite to curve addition opcode ([#6384](AztecProtocol/aztec-packages#6384)) * remove backend interactions from `nargo` ([#6320](AztecProtocol/aztec-packages#6320)) ### Features * `npk_m_hash` in all notes + key rotation test ([#6405](AztecProtocol/aztec-packages#6405)) ([74e98d4](AztecProtocol/aztec-packages@74e98d4)) * Add encrypted log outgoing body ([#6334](AztecProtocol/aztec-packages#6334)) ([fa9f442](AztecProtocol/aztec-packages@fa9f442)) * Add first version of kernel reset circuit ([#6393](AztecProtocol/aztec-packages#6393)) ([ed6df8e](AztecProtocol/aztec-packages@ed6df8e)) * Add is_infinite to curve addition opcode ([#6384](AztecProtocol/aztec-packages#6384)) ([75d81c5](AztecProtocol/aztec-packages@75d81c5)) * Add native rust implementations of pedersen functions (noir-lang/noir#4871) ([8bbbbb6](AztecProtocol/aztec-packages@8bbbbb6)) * Add nullifying key to Token Note ([#6130](AztecProtocol/aztec-packages#6130)) ([95c6b4a](AztecProtocol/aztec-packages@95c6b4a)) * Adding autogenerated variants for the reset circuit ([#6508](AztecProtocol/aztec-packages#6508)) ([8e8d2dd](AztecProtocol/aztec-packages@8e8d2dd)) * **avm-simulator:** Cap gas for external calls ([#6479](AztecProtocol/aztec-packages#6479)) ([c8771ba](AztecProtocol/aztec-packages@c8771ba)) * **avm:** Gzip avm bytecode ([#6475](AztecProtocol/aztec-packages#6475)) ([29559bd](AztecProtocol/aztec-packages@29559bd)) * **avm:** To_radix gadget ([#6368](AztecProtocol/aztec-packages#6368)) ([89dd25f](AztecProtocol/aztec-packages@89dd25f)) * Benchmark private proving ([#6409](AztecProtocol/aztec-packages#6409)) ([e9e5526](AztecProtocol/aztec-packages@e9e5526)) * Compile-time incorrect exec environment errors ([#6442](AztecProtocol/aztec-packages#6442)) ([0f75efd](AztecProtocol/aztec-packages@0f75efd)) * Do not return databus returndata, keep it private. (noir-lang/noir#5023) ([26f2197](AztecProtocol/aztec-packages@26f2197)) * **docs:** Authwit how tos ([#6220](AztecProtocol/aztec-packages#6220)) ([78f13d9](AztecProtocol/aztec-packages@78f13d9)) * **docs:** Key rotation / owner -> nullifier key docs ([#6538](AztecProtocol/aztec-packages#6538)) ([2453ba8](AztecProtocol/aztec-packages@2453ba8)) * Full encryption and decryption of log in ts ([#6348](AztecProtocol/aztec-packages#6348)) ([0ac83dc](AztecProtocol/aztec-packages@0ac83dc)) * Generic key validation request ([#6474](AztecProtocol/aztec-packages#6474)) ([948ec38](AztecProtocol/aztec-packages@948ec38)) * Improved ClientIvc ([#6429](AztecProtocol/aztec-packages#6429)) ([f360b3f](AztecProtocol/aztec-packages@f360b3f)) * Laying out a new recursion constraint for honk ([#6489](AztecProtocol/aztec-packages#6489)) ([af9fea4](AztecProtocol/aztec-packages@af9fea4)) * New docs structure ([#6195](AztecProtocol/aztec-packages#6195)) ([9cca814](AztecProtocol/aztec-packages@9cca814)) * Pay out arbitrary fee to coinbase on L1 ([#6436](AztecProtocol/aztec-packages#6436)) ([1b99de8](AztecProtocol/aztec-packages@1b99de8)) * Remove total logs len from pre tail kernels + add to L1 ([#6466](AztecProtocol/aztec-packages#6466)) ([66a2d43](AztecProtocol/aztec-packages@66a2d43)) * Run benchmarks for ACIR proving ([#6155](AztecProtocol/aztec-packages#6155)) ([ebf6fc2](AztecProtocol/aztec-packages@ebf6fc2)) * Squash transient note logs ([#6268](AztecProtocol/aztec-packages#6268)) ([4574877](AztecProtocol/aztec-packages@4574877)) * Sum transaction fees and pay on l1 ([#6522](AztecProtocol/aztec-packages#6522)) ([bf441da](AztecProtocol/aztec-packages@bf441da)) * Translator recursive verifier ([#6327](AztecProtocol/aztec-packages#6327)) ([9321aef](AztecProtocol/aztec-packages@9321aef)) * Update the encrypted note log format ([#6411](AztecProtocol/aztec-packages#6411)) ([e5cc9dc](AztecProtocol/aztec-packages@e5cc9dc)) * Validate counters ([#6365](AztecProtocol/aztec-packages#6365)) ([1f28b3a](AztecProtocol/aztec-packages@1f28b3a)) * View functions with static context enforcing ([#6338](AztecProtocol/aztec-packages#6338)) ([22ad5a5](AztecProtocol/aztec-packages@22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([#6406](AztecProtocol/aztec-packages#6406)) ([a6100ad](AztecProtocol/aztec-packages@a6100ad)) ### Bug Fixes * Arm ci ([#6480](AztecProtocol/aztec-packages#6480)) ([237952e](AztecProtocol/aztec-packages@237952e)) * Asset struct serialization does not match Noir internal serialization ([#6494](AztecProtocol/aztec-packages#6494)) ([9e6a4c3](AztecProtocol/aztec-packages@9e6a4c3)) * **avm-simulator:** Actually wrap oracles ([#6449](AztecProtocol/aztec-packages#6449)) ([8685acc](AztecProtocol/aztec-packages@8685acc)) * **avm-simulator:** Nested calls should preserve static context ([#6414](AztecProtocol/aztec-packages#6414)) ([44d7916](AztecProtocol/aztec-packages@44d7916)) * **avm-simulator:** Pending storage and nullifiers should be accessible in grandchild nested calls ([#6428](AztecProtocol/aztec-packages#6428)) ([84d2e1f](AztecProtocol/aztec-packages@84d2e1f)) * Buggy e2e key registry test setup ([#6496](AztecProtocol/aztec-packages#6496)) ([52d85d1](AztecProtocol/aztec-packages@52d85d1)) * **ci:** ARM ([#6521](AztecProtocol/aztec-packages#6521)) ([d1095f6](AztecProtocol/aztec-packages@d1095f6)) * **ci:** Arm concurrency ([#6564](AztecProtocol/aztec-packages#6564)) ([a265da0](AztecProtocol/aztec-packages@a265da0)) * Disable buggy ClientIVC tests ([#6546](AztecProtocol/aztec-packages#6546)) ([b61dea3](AztecProtocol/aztec-packages@b61dea3)) * Disk attach edge case ([#6430](AztecProtocol/aztec-packages#6430)) ([2366ad3](AztecProtocol/aztec-packages@2366ad3)) * **docs:** Clarify content on portals ([#6431](AztecProtocol/aztec-packages#6431)) ([869df4d](AztecProtocol/aztec-packages@869df4d)) * Don't start multiple runners during RequestLimitExceeded ([#6444](AztecProtocol/aztec-packages#6444)) ([7c4c822](AztecProtocol/aztec-packages@7c4c822)) * Dont start multiple builders ([#6437](AztecProtocol/aztec-packages#6437)) ([d67ab1c](AztecProtocol/aztec-packages@d67ab1c)) * Fix no predicates for brillig with intermediate functions (noir-lang/noir#5015) ([26f2197](AztecProtocol/aztec-packages@26f2197)) * Fixed several vulnerabilities in U128, added some tests (noir-lang/noir#5024) ([26f2197](AztecProtocol/aztec-packages@26f2197)) * Increase N_max in Zeromorph ([#6415](AztecProtocol/aztec-packages#6415)) ([9e643b4](AztecProtocol/aztec-packages@9e643b4)) * Quick fix of [#6405](AztecProtocol/aztec-packages#6405) by removing context from value note utils ([#6509](AztecProtocol/aztec-packages#6509)) ([3a4d828](AztecProtocol/aztec-packages@3a4d828)) * Removed plain from path in array args of contract interfaces ([#6497](AztecProtocol/aztec-packages#6497)) ([2b37729](AztecProtocol/aztec-packages@2b37729)) * Runs-on inconsistency and simplify concurrency keys ([#6433](AztecProtocol/aztec-packages#6433)) ([80674d9](AztecProtocol/aztec-packages@80674d9)) * Spot retry fixup ([#6476](AztecProtocol/aztec-packages#6476)) ([784d784](AztecProtocol/aztec-packages@784d784)) ### Miscellaneous * Add benchmarks for pedersen and schnorr verification (noir-lang/noir#5056) ([8bbbbb6](AztecProtocol/aztec-packages@8bbbbb6)) * Add c++ tests for generator derivation ([#6528](AztecProtocol/aztec-packages#6528)) ([72931bd](AztecProtocol/aztec-packages@72931bd)) * Add script to print lines of code (noir-lang/noir#4991) ([26f2197](AztecProtocol/aztec-packages@26f2197)) * Add some docs on syncing noir ([#6340](AztecProtocol/aztec-packages#6340)) ([bb68fcd](AztecProtocol/aztec-packages@bb68fcd)) * Anvil kill wrapper now supports mac ([#6520](AztecProtocol/aztec-packages#6520)) ([2a5d975](AztecProtocol/aztec-packages@2a5d975)) * **avm:** Wrap oracles with unconstrained fns ([#6421](AztecProtocol/aztec-packages#6421)) ([3e7e094](AztecProtocol/aztec-packages@3e7e094)) * Bump earthly ([#6419](AztecProtocol/aztec-packages#6419)) ([3d78751](AztecProtocol/aztec-packages@3d78751)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6462](AztecProtocol/aztec-packages#6462)) ([26eac62](AztecProtocol/aztec-packages@26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6495](AztecProtocol/aztec-packages#6495)) ([90d8092](AztecProtocol/aztec-packages@90d8092)) * Change some error messages for avm switch ([#6447](AztecProtocol/aztec-packages#6447)) ([74d6519](AztecProtocol/aztec-packages@74d6519)) * **ci:** Better retry defaults ([#6472](AztecProtocol/aztec-packages#6472)) ([b23f1fd](AztecProtocol/aztec-packages@b23f1fd)) * **ci:** Consistency as external check ([#6460](AztecProtocol/aztec-packages#6460)) ([6793a75](AztecProtocol/aztec-packages@6793a75)) * **ci:** Dont detach ebs ([#6441](AztecProtocol/aztec-packages#6441)) ([f933fc0](AztecProtocol/aztec-packages@f933fc0)) * **ci:** Fix on-demand starting ([#6434](AztecProtocol/aztec-packages#6434)) ([c3efb9c](AztecProtocol/aztec-packages@c3efb9c)) * **ci:** Increase timeouts ([#6426](AztecProtocol/aztec-packages#6426)) ([44986fe](AztecProtocol/aztec-packages@44986fe)) * **ci:** Only run circleci on master ([#6525](AztecProtocol/aztec-packages#6525)) ([c75fbd4](AztecProtocol/aztec-packages@c75fbd4)) * **ci:** Push l1-contracts tests off of critical path ([#6400](AztecProtocol/aztec-packages#6400)) ([ce0ae6d](AztecProtocol/aztec-packages@ce0ae6d)) * **ci:** Reenable arm build ([#6455](AztecProtocol/aztec-packages#6455)) ([2862767](AztecProtocol/aztec-packages@2862767)) * **ci:** Require setup in merge-check ([#6454](AztecProtocol/aztec-packages#6454)) ([ad73061](AztecProtocol/aztec-packages@ad73061)) * **ci:** Spot capacity and reaping ([#6561](AztecProtocol/aztec-packages#6561)) ([8c639b5](AztecProtocol/aztec-packages@8c639b5)) * Clean up kernel types by removing is_static from function_data ([#6557](AztecProtocol/aztec-packages#6557)) ([83ba29f](AztecProtocol/aztec-packages@83ba29f)) * Cleanup the encrypted log incoming body ([#6325](AztecProtocol/aztec-packages#6325)) ([e88c209](AztecProtocol/aztec-packages@e88c209)) * Copy subset of constants to cpp ([#6544](AztecProtocol/aztec-packages#6544)) ([21dc72a](AztecProtocol/aztec-packages@21dc72a)) * Do not rebuild yarn-projects on bench-comment ([#6396](AztecProtocol/aztec-packages#6396)) ([797115b](AztecProtocol/aztec-packages@797115b)) * **docs:** Adding analytics ([#6350](AztecProtocol/aztec-packages#6350)) ([6417cd9](AztecProtocol/aztec-packages@6417cd9)) * **docs:** Restructure improvs ([#6502](AztecProtocol/aztec-packages#6502)) ([c3b573e](AztecProtocol/aztec-packages@c3b573e)) * Fix linter issues in AVM ([#6057](AztecProtocol/aztec-packages#6057)) ([c2e72b1](AztecProtocol/aztec-packages@c2e72b1)) * Fix logs upload to S3 ([#6401](AztecProtocol/aztec-packages#6401)) ([9df0602](AztecProtocol/aztec-packages@9df0602)) * Fix migration notes ([#6458](AztecProtocol/aztec-packages#6458)) ([bee85a9](AztecProtocol/aztec-packages@bee85a9)) * Fix migration notes ([#6551](AztecProtocol/aztec-packages#6551)) ([89bc350](AztecProtocol/aztec-packages@89bc350)) * Fix notes 0.41.0 ([#6461](AztecProtocol/aztec-packages#6461)) ([04b0ec5](AztecProtocol/aztec-packages@04b0ec5)) * Fix poor performance and long compile times in value_note.derement() ([#6523](AztecProtocol/aztec-packages#6523)) ([002b4aa](AztecProtocol/aztec-packages@002b4aa)) * Fix tester image copy pattern ([#6438](AztecProtocol/aztec-packages#6438)) ([b892eae](AztecProtocol/aztec-packages@b892eae)) * Get_nullifier_keys cleanup ([#6451](AztecProtocol/aztec-packages#6451)) ([8a71fd5](AztecProtocol/aztec-packages@8a71fd5)) * Lower max public bytecode to 20k ([#6477](AztecProtocol/aztec-packages#6477)) ([ce192f0](AztecProtocol/aztec-packages@ce192f0)) * Move `UPLOAD_LOGS` into root earthfile ([#6424](AztecProtocol/aztec-packages#6424)) ([d723da9](AztecProtocol/aztec-packages@d723da9)) * Nuking `KeyStore` and `KeyPair` interfaces ([#6553](AztecProtocol/aztec-packages#6553)) ([23e0518](AztecProtocol/aztec-packages@23e0518)) * Parameterise cycle_group by `Builder` rather than `Composer` ([#6565](AztecProtocol/aztec-packages#6565)) ([ea36bf9](AztecProtocol/aztec-packages@ea36bf9)) * Prefetch noir deps in earthly for caching ([#6556](AztecProtocol/aztec-packages#6556)) ([8ee9060](AztecProtocol/aztec-packages@8ee9060)) * Private call validation ([#6510](AztecProtocol/aztec-packages#6510)) ([07dc072](AztecProtocol/aztec-packages@07dc072)) * Purge secret and open keywords ([#6501](AztecProtocol/aztec-packages#6501)) ([f9c74c4](AztecProtocol/aztec-packages@f9c74c4)), closes [#5538](AztecProtocol/aztec-packages#5538) * Recommend Noir and rust plugin ([#6558](AztecProtocol/aztec-packages#6558)) ([298561f](AztecProtocol/aztec-packages@298561f)) * Refactor key rotate and address comments from 6405 ([#6450](AztecProtocol/aztec-packages#6450)) ([6f3dab8](AztecProtocol/aztec-packages@6f3dab8)) * Remove acvmInfo from bb.js CLI ([#6507](AztecProtocol/aztec-packages#6507)) ([e298c76](AztecProtocol/aztec-packages@e298c76)) * Remove backend interactions from `nargo` ([#6320](AztecProtocol/aztec-packages#6320)) ([7a31896](AztecProtocol/aztec-packages@7a31896)) * Replace relative paths to noir-protocol-circuits ([94ab877](AztecProtocol/aztec-packages@94ab877)) * Replace relative paths to noir-protocol-circuits ([9f04bfe](AztecProtocol/aztec-packages@9f04bfe)) * Replace relative paths to noir-protocol-circuits ([67f29e5](AztecProtocol/aztec-packages@67f29e5)) * Replace relative paths to noir-protocol-circuits ([a7a4b86](AztecProtocol/aztec-packages@a7a4b86)) * Replace relative paths to noir-protocol-circuits ([c6f61a4](AztecProtocol/aztec-packages@c6f61a4)) * Share decider with ultra_prover ([#5467](AztecProtocol/aztec-packages#5467)) ([b3b7376](AztecProtocol/aztec-packages@b3b7376)) * Switch over to constructing gates report in bash ([#6491](AztecProtocol/aztec-packages#6491)) ([1fa5963](AztecProtocol/aztec-packages@1fa5963)) * **tests:** Change error messages in preparation for AVM ([#6422](AztecProtocol/aztec-packages#6422)) ([6616dc6](AztecProtocol/aztec-packages@6616dc6)) ### Documentation * Sumcheck documentation ([#5841](AztecProtocol/aztec-packages#5841)) ([116eef0](AztecProtocol/aztec-packages@116eef0)) * Updating key docs in concepts section ([#6387](AztecProtocol/aztec-packages#6387)) ([921a7f4](AztecProtocol/aztec-packages@921a7f4)) </details> <details><summary>barretenberg: 0.41.0</summary> ## [0.41.0](AztecProtocol/aztec-packages@barretenberg-v0.40.1...barretenberg-v0.41.0) (2024-05-21) ### ⚠ BREAKING CHANGES * add is_infinite to curve addition opcode ([#6384](AztecProtocol/aztec-packages#6384)) ### Features * Add is_infinite to curve addition opcode ([#6384](AztecProtocol/aztec-packages#6384)) ([75d81c5](AztecProtocol/aztec-packages@75d81c5)) * **avm-simulator:** Cap gas for external calls ([#6479](AztecProtocol/aztec-packages#6479)) ([c8771ba](AztecProtocol/aztec-packages@c8771ba)) * **avm:** Gzip avm bytecode ([#6475](AztecProtocol/aztec-packages#6475)) ([29559bd](AztecProtocol/aztec-packages@29559bd)) * **avm:** To_radix gadget ([#6368](AztecProtocol/aztec-packages#6368)) ([89dd25f](AztecProtocol/aztec-packages@89dd25f)) * Full encryption and decryption of log in ts ([#6348](AztecProtocol/aztec-packages#6348)) ([0ac83dc](AztecProtocol/aztec-packages@0ac83dc)) * Improved ClientIvc ([#6429](AztecProtocol/aztec-packages#6429)) ([f360b3f](AztecProtocol/aztec-packages@f360b3f)) * Laying out a new recursion constraint for honk ([#6489](AztecProtocol/aztec-packages#6489)) ([af9fea4](AztecProtocol/aztec-packages@af9fea4)) * Remove total logs len from pre tail kernels + add to L1 ([#6466](AztecProtocol/aztec-packages#6466)) ([66a2d43](AztecProtocol/aztec-packages@66a2d43)) * Run benchmarks for ACIR proving ([#6155](AztecProtocol/aztec-packages#6155)) ([ebf6fc2](AztecProtocol/aztec-packages@ebf6fc2)) * Squash transient note logs ([#6268](AztecProtocol/aztec-packages#6268)) ([4574877](AztecProtocol/aztec-packages@4574877)) * Sum transaction fees and pay on l1 ([#6522](AztecProtocol/aztec-packages#6522)) ([bf441da](AztecProtocol/aztec-packages@bf441da)) * Translator recursive verifier ([#6327](AztecProtocol/aztec-packages#6327)) ([9321aef](AztecProtocol/aztec-packages@9321aef)) * View functions with static context enforcing ([#6338](AztecProtocol/aztec-packages#6338)) ([22ad5a5](AztecProtocol/aztec-packages@22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([#6406](AztecProtocol/aztec-packages#6406)) ([a6100ad](AztecProtocol/aztec-packages@a6100ad)) ### Bug Fixes * Disable buggy ClientIVC tests ([#6546](AztecProtocol/aztec-packages#6546)) ([b61dea3](AztecProtocol/aztec-packages@b61dea3)) * Increase N_max in Zeromorph ([#6415](AztecProtocol/aztec-packages#6415)) ([9e643b4](AztecProtocol/aztec-packages@9e643b4)) ### Miscellaneous * Add c++ tests for generator derivation ([#6528](AztecProtocol/aztec-packages#6528)) ([72931bd](AztecProtocol/aztec-packages@72931bd)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6462](AztecProtocol/aztec-packages#6462)) ([26eac62](AztecProtocol/aztec-packages@26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([#6495](AztecProtocol/aztec-packages#6495)) ([90d8092](AztecProtocol/aztec-packages@90d8092)) * Copy subset of constants to cpp ([#6544](AztecProtocol/aztec-packages#6544)) ([21dc72a](AztecProtocol/aztec-packages@21dc72a)) * Lower max public bytecode to 20k ([#6477](AztecProtocol/aztec-packages#6477)) ([ce192f0](AztecProtocol/aztec-packages@ce192f0)) * Parameterise cycle_group by `Builder` rather than `Composer` ([#6565](AztecProtocol/aztec-packages#6565)) ([ea36bf9](AztecProtocol/aztec-packages@ea36bf9)) * Private call validation ([#6510](AztecProtocol/aztec-packages#6510)) ([07dc072](AztecProtocol/aztec-packages@07dc072)) * Share decider with ultra_prover ([#5467](AztecProtocol/aztec-packages#5467)) ([b3b7376](AztecProtocol/aztec-packages@b3b7376)) ### Documentation * Sumcheck documentation ([#5841](AztecProtocol/aztec-packages#5841)) ([116eef0](AztecProtocol/aztec-packages@116eef0)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Automated pull of Noir development from [aztec-packages](https://github.com/AztecProtocol/aztec-packages). BEGIN_COMMIT_OVERRIDE feat: Sync from noir (AztecProtocol/aztec-packages#6573) feat!: compile-time incorrect exec environment errors (AztecProtocol/aztec-packages#6442) feat: Sync from noir (AztecProtocol/aztec-packages#6555) feat: View functions with static context enforcing (AztecProtocol/aztec-packages#6338) feat!: add is_infinite to curve addition opcode (AztecProtocol/aztec-packages#6384) feat: Sync from noir (AztecProtocol/aztec-packages#6500) chore!: remove backend interactions from `nargo` (AztecProtocol/aztec-packages#6320) fix: removed plain from path in array args of contract interfaces (AztecProtocol/aztec-packages#6497) chore: bump maximum nullifier read requests (necessary for e2e tests in AVM) (AztecProtocol/aztec-packages#6495) Revert "chore: bump maximum nullifier read requests (necessary for e2e tests in AVM)" (AztecProtocol/aztec-packages#6483) chore: bump maximum nullifier read requests (necessary for e2e tests in AVM) (AztecProtocol/aztec-packages#6462) fix: Check for public args in aztec functions (AztecProtocol/aztec-packages#6355) feat: Move abi demonomorphizer to noir_codegen and use noir_codegen in protocol types (AztecProtocol/aztec-packages#6302) feat!: switch `bb` over to read ACIR from nargo artifacts (AztecProtocol/aztec-packages#6283) feat: ToRadix BB + avm transpiler support (AztecProtocol/aztec-packages#6330) feat: Sync from noir (AztecProtocol/aztec-packages#6332) fix: temporarily revert to_radix blackbox (AztecProtocol/aztec-packages#6304) feat: move to_radix to a blackbox (AztecProtocol/aztec-packages#6294) chore: skip formatting informattable comments (AztecProtocol/aztec-packages#6288) chore(dsl): Update backend gateCount command to query a Program in a single request (AztecProtocol/aztec-packages#6228) feat: Private Kernel Recursion (AztecProtocol/aztec-packages#6278) feat: Proper padding in ts AES and constrained AES in body and header computations (AztecProtocol/aztec-packages#6269) chore: simplify nargo CLI to read from artifacts (AztecProtocol/aztec-packages#6279) feat: Sync from noir (AztecProtocol/aztec-packages#6280) chore: enforce formatting of noir code (AztecProtocol/aztec-packages#6271) feat!: specify databus arrays for BB (AztecProtocol/aztec-packages#6239) END_COMMIT_OVERRIDE --------- Co-authored-by: TomAFrench <tom@tomfren.ch>
Automated pull of Noir development from [aztec-packages](https://github.com/AztecProtocol/aztec-packages). BEGIN_COMMIT_OVERRIDE feat: Sync from noir (AztecProtocol/aztec-packages#6573) feat!: compile-time incorrect exec environment errors (AztecProtocol/aztec-packages#6442) feat: Sync from noir (AztecProtocol/aztec-packages#6555) feat: View functions with static context enforcing (AztecProtocol/aztec-packages#6338) feat!: add is_infinite to curve addition opcode (AztecProtocol/aztec-packages#6384) feat: Sync from noir (AztecProtocol/aztec-packages#6500) chore!: remove backend interactions from `nargo` (AztecProtocol/aztec-packages#6320) fix: removed plain from path in array args of contract interfaces (AztecProtocol/aztec-packages#6497) chore: bump maximum nullifier read requests (necessary for e2e tests in AVM) (AztecProtocol/aztec-packages#6495) Revert "chore: bump maximum nullifier read requests (necessary for e2e tests in AVM)" (AztecProtocol/aztec-packages#6483) chore: bump maximum nullifier read requests (necessary for e2e tests in AVM) (AztecProtocol/aztec-packages#6462) fix: Check for public args in aztec functions (AztecProtocol/aztec-packages#6355) feat: Move abi demonomorphizer to noir_codegen and use noir_codegen in protocol types (AztecProtocol/aztec-packages#6302) feat!: switch `bb` over to read ACIR from nargo artifacts (AztecProtocol/aztec-packages#6283) feat: ToRadix BB + avm transpiler support (AztecProtocol/aztec-packages#6330) feat: Sync from noir (AztecProtocol/aztec-packages#6332) fix: temporarily revert to_radix blackbox (AztecProtocol/aztec-packages#6304) feat: move to_radix to a blackbox (AztecProtocol/aztec-packages#6294) chore: skip formatting informattable comments (AztecProtocol/aztec-packages#6288) chore(dsl): Update backend gateCount command to query a Program in a single request (AztecProtocol/aztec-packages#6228) feat: Private Kernel Recursion (AztecProtocol/aztec-packages#6278) feat: Proper padding in ts AES and constrained AES in body and header computations (AztecProtocol/aztec-packages#6269) chore: simplify nargo CLI to read from artifacts (AztecProtocol/aztec-packages#6279) feat: Sync from noir (AztecProtocol/aztec-packages#6280) chore: enforce formatting of noir code (AztecProtocol/aztec-packages#6271) feat!: specify databus arrays for BB (AztecProtocol/aztec-packages#6239) END_COMMIT_OVERRIDE --------- Co-authored-by: TomAFrench <tom@tomfren.ch>
This fixes the issue described in [these comments](#6442 (comment)), which highlighted that `PrivateMutable` was providing a poor API as it forced users to call unconstrained functions and leave correctness up to them. This is a simple replacement to make #6442 cleaner and help guide future development, but it should only be considered a patch - we'll eventually do a more thoughtful complete pass over the entire API to bring coherency to it. I tried adding tests for this (I wanted to test that regardless what the return value of the nullifier check oracle was, either an inclusion proof or a new nullifier would be included in the context), but this proved to be very hard because notes are sent to the oracle as raw fields in a custom packed format which `oracle::get_notes` decodes on the spot. We'd need to have that be a separate library, but that exceeds the scope of this PR.
This fixes the issue described in [these comments](AztecProtocol/aztec-packages#6442 (comment)), which highlighted that `PrivateMutable` was providing a poor API as it forced users to call unconstrained functions and leave correctness up to them. This is a simple replacement to make #6442 cleaner and help guide future development, but it should only be considered a patch - we'll eventually do a more thoughtful complete pass over the entire API to bring coherency to it. I tried adding tests for this (I wanted to test that regardless what the return value of the nullifier check oracle was, either an inclusion proof or a new nullifier would be included in the context), but this proved to be very hard because notes are sent to the oracle as raw fields in a custom packed format which `oracle::get_notes` decodes on the spot. We'd need to have that be a separate library, but that exceeds the scope of this PR.
Continuing the work from #6442, this PR further formalizes the notion of a top-level unconstrained execution context by introducing a struct that represents it (instead of relying on the unit type). Not only is this less cryptic, it also provides access to data previously unavailable such as the current block number and contract address, which we'll need for some unconstrained getters like `SharedMutable`'s. The macro functions could potentially be refactored somewhat now that private, public and unconstrained are more similar, but I'm not sure we want to invest much effort there so I made the change as small as possible.
Continuing the work from AztecProtocol/aztec-packages#6442, this PR further formalizes the notion of a top-level unconstrained execution context by introducing a struct that represents it (instead of relying on the unit type). Not only is this less cryptic, it also provides access to data previously unavailable such as the current block number and contract address, which we'll need for some unconstrained getters like `SharedMutable`'s. The macro functions could potentially be refactored somewhat now that private, public and unconstrained are more similar, but I'm not sure we want to invest much effort there so I made the change as small as possible.
Continuing the work from #6442, this PR further formalizes the notion of a top-level unconstrained execution context by introducing a struct that represents it (instead of relying on the unit type). Not only is this less cryptic, it also provides access to data previously unavailable such as the current block number and contract address, which we'll need for some unconstrained getters like `SharedMutable`'s. The macro functions could potentially be refactored somewhat now that private, public and unconstrained are more similar, but I'm not sure we want to invest much effort there so I made the change as small as possible.
Continuing the work from #6442, this PR further formalizes the notion of a top-level unconstrained execution context by introducing a struct that represents it (instead of relying on the unit type). Not only is this less cryptic, it also provides access to data previously unavailable such as the current block number and contract address, which we'll need for some unconstrained getters like `SharedMutable`'s. The macro functions could potentially be refactored somewhat now that private, public and unconstrained are more similar, but I'm not sure we want to invest much effort there so I made the change as small as possible.
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.41.0</summary> [0.41.0](AztecProtocol/aztec-packages@aztec-package-v0.40.1...aztec-package-v0.41.0) (2024-05-21) * **aztec-package:** Synchronize aztec-packages versions </details> <details><summary>barretenberg.js: 0.41.0</summary> [0.41.0](AztecProtocol/aztec-packages@barretenberg.js-v0.40.1...barretenberg.js-v0.41.0) (2024-05-21) * Vk_as_fields, proof_as_fields flows for honk ([AztecProtocol#6406](AztecProtocol#6406)) ([a6100ad](AztecProtocol@a6100ad)) * Remove acvmInfo from bb.js CLI ([AztecProtocol#6507](AztecProtocol#6507)) ([e298c76](AztecProtocol@e298c76)) </details> <details><summary>aztec-packages: 0.41.0</summary> [0.41.0](AztecProtocol/aztec-packages@aztec-packages-v0.40.1...aztec-packages-v0.41.0) (2024-05-21) * compile-time incorrect exec environment errors ([AztecProtocol#6442](AztecProtocol#6442)) * add is_infinite to curve addition opcode ([AztecProtocol#6384](AztecProtocol#6384)) * remove backend interactions from `nargo` ([AztecProtocol#6320](AztecProtocol#6320)) * `npk_m_hash` in all notes + key rotation test ([AztecProtocol#6405](AztecProtocol#6405)) ([74e98d4](AztecProtocol@74e98d4)) * Add encrypted log outgoing body ([AztecProtocol#6334](AztecProtocol#6334)) ([fa9f442](AztecProtocol@fa9f442)) * Add first version of kernel reset circuit ([AztecProtocol#6393](AztecProtocol#6393)) ([ed6df8e](AztecProtocol@ed6df8e)) * Add is_infinite to curve addition opcode ([AztecProtocol#6384](AztecProtocol#6384)) ([75d81c5](AztecProtocol@75d81c5)) * Add native rust implementations of pedersen functions (noir-lang/noir#4871) ([8bbbbb6](AztecProtocol@8bbbbb6)) * Add nullifying key to Token Note ([AztecProtocol#6130](AztecProtocol#6130)) ([95c6b4a](AztecProtocol@95c6b4a)) * Adding autogenerated variants for the reset circuit ([AztecProtocol#6508](AztecProtocol#6508)) ([8e8d2dd](AztecProtocol@8e8d2dd)) * **avm-simulator:** Cap gas for external calls ([AztecProtocol#6479](AztecProtocol#6479)) ([c8771ba](AztecProtocol@c8771ba)) * **avm:** Gzip avm bytecode ([AztecProtocol#6475](AztecProtocol#6475)) ([29559bd](AztecProtocol@29559bd)) * **avm:** To_radix gadget ([AztecProtocol#6368](AztecProtocol#6368)) ([89dd25f](AztecProtocol@89dd25f)) * Benchmark private proving ([AztecProtocol#6409](AztecProtocol#6409)) ([e9e5526](AztecProtocol@e9e5526)) * Compile-time incorrect exec environment errors ([AztecProtocol#6442](AztecProtocol#6442)) ([0f75efd](AztecProtocol@0f75efd)) * Do not return databus returndata, keep it private. (noir-lang/noir#5023) ([26f2197](AztecProtocol@26f2197)) * **docs:** Authwit how tos ([AztecProtocol#6220](AztecProtocol#6220)) ([78f13d9](AztecProtocol@78f13d9)) * **docs:** Key rotation / owner -> nullifier key docs ([AztecProtocol#6538](AztecProtocol#6538)) ([2453ba8](AztecProtocol@2453ba8)) * Full encryption and decryption of log in ts ([AztecProtocol#6348](AztecProtocol#6348)) ([0ac83dc](AztecProtocol@0ac83dc)) * Generic key validation request ([AztecProtocol#6474](AztecProtocol#6474)) ([948ec38](AztecProtocol@948ec38)) * Improved ClientIvc ([AztecProtocol#6429](AztecProtocol#6429)) ([f360b3f](AztecProtocol@f360b3f)) * Laying out a new recursion constraint for honk ([AztecProtocol#6489](AztecProtocol#6489)) ([af9fea4](AztecProtocol@af9fea4)) * New docs structure ([AztecProtocol#6195](AztecProtocol#6195)) ([9cca814](AztecProtocol@9cca814)) * Pay out arbitrary fee to coinbase on L1 ([AztecProtocol#6436](AztecProtocol#6436)) ([1b99de8](AztecProtocol@1b99de8)) * Remove total logs len from pre tail kernels + add to L1 ([AztecProtocol#6466](AztecProtocol#6466)) ([66a2d43](AztecProtocol@66a2d43)) * Run benchmarks for ACIR proving ([AztecProtocol#6155](AztecProtocol#6155)) ([ebf6fc2](AztecProtocol@ebf6fc2)) * Squash transient note logs ([AztecProtocol#6268](AztecProtocol#6268)) ([4574877](AztecProtocol@4574877)) * Sum transaction fees and pay on l1 ([AztecProtocol#6522](AztecProtocol#6522)) ([bf441da](AztecProtocol@bf441da)) * Translator recursive verifier ([AztecProtocol#6327](AztecProtocol#6327)) ([9321aef](AztecProtocol@9321aef)) * Update the encrypted note log format ([AztecProtocol#6411](AztecProtocol#6411)) ([e5cc9dc](AztecProtocol@e5cc9dc)) * Validate counters ([AztecProtocol#6365](AztecProtocol#6365)) ([1f28b3a](AztecProtocol@1f28b3a)) * View functions with static context enforcing ([AztecProtocol#6338](AztecProtocol#6338)) ([22ad5a5](AztecProtocol@22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([AztecProtocol#6406](AztecProtocol#6406)) ([a6100ad](AztecProtocol@a6100ad)) * Arm ci ([AztecProtocol#6480](AztecProtocol#6480)) ([237952e](AztecProtocol@237952e)) * Asset struct serialization does not match Noir internal serialization ([AztecProtocol#6494](AztecProtocol#6494)) ([9e6a4c3](AztecProtocol@9e6a4c3)) * **avm-simulator:** Actually wrap oracles ([AztecProtocol#6449](AztecProtocol#6449)) ([8685acc](AztecProtocol@8685acc)) * **avm-simulator:** Nested calls should preserve static context ([AztecProtocol#6414](AztecProtocol#6414)) ([44d7916](AztecProtocol@44d7916)) * **avm-simulator:** Pending storage and nullifiers should be accessible in grandchild nested calls ([AztecProtocol#6428](AztecProtocol#6428)) ([84d2e1f](AztecProtocol@84d2e1f)) * Buggy e2e key registry test setup ([AztecProtocol#6496](AztecProtocol#6496)) ([52d85d1](AztecProtocol@52d85d1)) * **ci:** ARM ([AztecProtocol#6521](AztecProtocol#6521)) ([d1095f6](AztecProtocol@d1095f6)) * **ci:** Arm concurrency ([AztecProtocol#6564](AztecProtocol#6564)) ([a265da0](AztecProtocol@a265da0)) * Disable buggy ClientIVC tests ([AztecProtocol#6546](AztecProtocol#6546)) ([b61dea3](AztecProtocol@b61dea3)) * Disk attach edge case ([AztecProtocol#6430](AztecProtocol#6430)) ([2366ad3](AztecProtocol@2366ad3)) * **docs:** Clarify content on portals ([AztecProtocol#6431](AztecProtocol#6431)) ([869df4d](AztecProtocol@869df4d)) * Don't start multiple runners during RequestLimitExceeded ([AztecProtocol#6444](AztecProtocol#6444)) ([7c4c822](AztecProtocol@7c4c822)) * Dont start multiple builders ([AztecProtocol#6437](AztecProtocol#6437)) ([d67ab1c](AztecProtocol@d67ab1c)) * Fix no predicates for brillig with intermediate functions (noir-lang/noir#5015) ([26f2197](AztecProtocol@26f2197)) * Fixed several vulnerabilities in U128, added some tests (noir-lang/noir#5024) ([26f2197](AztecProtocol@26f2197)) * Increase N_max in Zeromorph ([AztecProtocol#6415](AztecProtocol#6415)) ([9e643b4](AztecProtocol@9e643b4)) * Quick fix of [AztecProtocol#6405](AztecProtocol#6405) by removing context from value note utils ([AztecProtocol#6509](AztecProtocol#6509)) ([3a4d828](AztecProtocol@3a4d828)) * Removed plain from path in array args of contract interfaces ([AztecProtocol#6497](AztecProtocol#6497)) ([2b37729](AztecProtocol@2b37729)) * Runs-on inconsistency and simplify concurrency keys ([AztecProtocol#6433](AztecProtocol#6433)) ([80674d9](AztecProtocol@80674d9)) * Spot retry fixup ([AztecProtocol#6476](AztecProtocol#6476)) ([784d784](AztecProtocol@784d784)) * Add benchmarks for pedersen and schnorr verification (noir-lang/noir#5056) ([8bbbbb6](AztecProtocol@8bbbbb6)) * Add c++ tests for generator derivation ([AztecProtocol#6528](AztecProtocol#6528)) ([72931bd](AztecProtocol@72931bd)) * Add script to print lines of code (noir-lang/noir#4991) ([26f2197](AztecProtocol@26f2197)) * Add some docs on syncing noir ([AztecProtocol#6340](AztecProtocol#6340)) ([bb68fcd](AztecProtocol@bb68fcd)) * Anvil kill wrapper now supports mac ([AztecProtocol#6520](AztecProtocol#6520)) ([2a5d975](AztecProtocol@2a5d975)) * **avm:** Wrap oracles with unconstrained fns ([AztecProtocol#6421](AztecProtocol#6421)) ([3e7e094](AztecProtocol@3e7e094)) * Bump earthly ([AztecProtocol#6419](AztecProtocol#6419)) ([3d78751](AztecProtocol@3d78751)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([AztecProtocol#6462](AztecProtocol#6462)) ([26eac62](AztecProtocol@26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([AztecProtocol#6495](AztecProtocol#6495)) ([90d8092](AztecProtocol@90d8092)) * Change some error messages for avm switch ([AztecProtocol#6447](AztecProtocol#6447)) ([74d6519](AztecProtocol@74d6519)) * **ci:** Better retry defaults ([AztecProtocol#6472](AztecProtocol#6472)) ([b23f1fd](AztecProtocol@b23f1fd)) * **ci:** Consistency as external check ([AztecProtocol#6460](AztecProtocol#6460)) ([6793a75](AztecProtocol@6793a75)) * **ci:** Dont detach ebs ([AztecProtocol#6441](AztecProtocol#6441)) ([f933fc0](AztecProtocol@f933fc0)) * **ci:** Fix on-demand starting ([AztecProtocol#6434](AztecProtocol#6434)) ([c3efb9c](AztecProtocol@c3efb9c)) * **ci:** Increase timeouts ([AztecProtocol#6426](AztecProtocol#6426)) ([44986fe](AztecProtocol@44986fe)) * **ci:** Only run circleci on master ([AztecProtocol#6525](AztecProtocol#6525)) ([c75fbd4](AztecProtocol@c75fbd4)) * **ci:** Push l1-contracts tests off of critical path ([AztecProtocol#6400](AztecProtocol#6400)) ([ce0ae6d](AztecProtocol@ce0ae6d)) * **ci:** Reenable arm build ([AztecProtocol#6455](AztecProtocol#6455)) ([2862767](AztecProtocol@2862767)) * **ci:** Require setup in merge-check ([AztecProtocol#6454](AztecProtocol#6454)) ([ad73061](AztecProtocol@ad73061)) * **ci:** Spot capacity and reaping ([AztecProtocol#6561](AztecProtocol#6561)) ([8c639b5](AztecProtocol@8c639b5)) * Clean up kernel types by removing is_static from function_data ([AztecProtocol#6557](AztecProtocol#6557)) ([83ba29f](AztecProtocol@83ba29f)) * Cleanup the encrypted log incoming body ([AztecProtocol#6325](AztecProtocol#6325)) ([e88c209](AztecProtocol@e88c209)) * Copy subset of constants to cpp ([AztecProtocol#6544](AztecProtocol#6544)) ([21dc72a](AztecProtocol@21dc72a)) * Do not rebuild yarn-projects on bench-comment ([AztecProtocol#6396](AztecProtocol#6396)) ([797115b](AztecProtocol@797115b)) * **docs:** Adding analytics ([AztecProtocol#6350](AztecProtocol#6350)) ([6417cd9](AztecProtocol@6417cd9)) * **docs:** Restructure improvs ([AztecProtocol#6502](AztecProtocol#6502)) ([c3b573e](AztecProtocol@c3b573e)) * Fix linter issues in AVM ([AztecProtocol#6057](AztecProtocol#6057)) ([c2e72b1](AztecProtocol@c2e72b1)) * Fix logs upload to S3 ([AztecProtocol#6401](AztecProtocol#6401)) ([9df0602](AztecProtocol@9df0602)) * Fix migration notes ([AztecProtocol#6458](AztecProtocol#6458)) ([bee85a9](AztecProtocol@bee85a9)) * Fix migration notes ([AztecProtocol#6551](AztecProtocol#6551)) ([89bc350](AztecProtocol@89bc350)) * Fix notes 0.41.0 ([AztecProtocol#6461](AztecProtocol#6461)) ([04b0ec5](AztecProtocol@04b0ec5)) * Fix poor performance and long compile times in value_note.derement() ([AztecProtocol#6523](AztecProtocol#6523)) ([002b4aa](AztecProtocol@002b4aa)) * Fix tester image copy pattern ([AztecProtocol#6438](AztecProtocol#6438)) ([b892eae](AztecProtocol@b892eae)) * Get_nullifier_keys cleanup ([AztecProtocol#6451](AztecProtocol#6451)) ([8a71fd5](AztecProtocol@8a71fd5)) * Lower max public bytecode to 20k ([AztecProtocol#6477](AztecProtocol#6477)) ([ce192f0](AztecProtocol@ce192f0)) * Move `UPLOAD_LOGS` into root earthfile ([AztecProtocol#6424](AztecProtocol#6424)) ([d723da9](AztecProtocol@d723da9)) * Nuking `KeyStore` and `KeyPair` interfaces ([AztecProtocol#6553](AztecProtocol#6553)) ([23e0518](AztecProtocol@23e0518)) * Parameterise cycle_group by `Builder` rather than `Composer` ([AztecProtocol#6565](AztecProtocol#6565)) ([ea36bf9](AztecProtocol@ea36bf9)) * Prefetch noir deps in earthly for caching ([AztecProtocol#6556](AztecProtocol#6556)) ([8ee9060](AztecProtocol@8ee9060)) * Private call validation ([AztecProtocol#6510](AztecProtocol#6510)) ([07dc072](AztecProtocol@07dc072)) * Purge secret and open keywords ([AztecProtocol#6501](AztecProtocol#6501)) ([f9c74c4](AztecProtocol@f9c74c4)), closes [AztecProtocol#5538](AztecProtocol#5538) * Recommend Noir and rust plugin ([AztecProtocol#6558](AztecProtocol#6558)) ([298561f](AztecProtocol@298561f)) * Refactor key rotate and address comments from 6405 ([AztecProtocol#6450](AztecProtocol#6450)) ([6f3dab8](AztecProtocol@6f3dab8)) * Remove acvmInfo from bb.js CLI ([AztecProtocol#6507](AztecProtocol#6507)) ([e298c76](AztecProtocol@e298c76)) * Remove backend interactions from `nargo` ([AztecProtocol#6320](AztecProtocol#6320)) ([7a31896](AztecProtocol@7a31896)) * Replace relative paths to noir-protocol-circuits ([94ab877](AztecProtocol@94ab877)) * Replace relative paths to noir-protocol-circuits ([9f04bfe](AztecProtocol@9f04bfe)) * Replace relative paths to noir-protocol-circuits ([67f29e5](AztecProtocol@67f29e5)) * Replace relative paths to noir-protocol-circuits ([a7a4b86](AztecProtocol@a7a4b86)) * Replace relative paths to noir-protocol-circuits ([c6f61a4](AztecProtocol@c6f61a4)) * Share decider with ultra_prover ([AztecProtocol#5467](AztecProtocol#5467)) ([b3b7376](AztecProtocol@b3b7376)) * Switch over to constructing gates report in bash ([AztecProtocol#6491](AztecProtocol#6491)) ([1fa5963](AztecProtocol@1fa5963)) * **tests:** Change error messages in preparation for AVM ([AztecProtocol#6422](AztecProtocol#6422)) ([6616dc6](AztecProtocol@6616dc6)) * Sumcheck documentation ([AztecProtocol#5841](AztecProtocol#5841)) ([116eef0](AztecProtocol@116eef0)) * Updating key docs in concepts section ([AztecProtocol#6387](AztecProtocol#6387)) ([921a7f4](AztecProtocol@921a7f4)) </details> <details><summary>barretenberg: 0.41.0</summary> [0.41.0](AztecProtocol/aztec-packages@barretenberg-v0.40.1...barretenberg-v0.41.0) (2024-05-21) * add is_infinite to curve addition opcode ([AztecProtocol#6384](AztecProtocol#6384)) * Add is_infinite to curve addition opcode ([AztecProtocol#6384](AztecProtocol#6384)) ([75d81c5](AztecProtocol@75d81c5)) * **avm-simulator:** Cap gas for external calls ([AztecProtocol#6479](AztecProtocol#6479)) ([c8771ba](AztecProtocol@c8771ba)) * **avm:** Gzip avm bytecode ([AztecProtocol#6475](AztecProtocol#6475)) ([29559bd](AztecProtocol@29559bd)) * **avm:** To_radix gadget ([AztecProtocol#6368](AztecProtocol#6368)) ([89dd25f](AztecProtocol@89dd25f)) * Full encryption and decryption of log in ts ([AztecProtocol#6348](AztecProtocol#6348)) ([0ac83dc](AztecProtocol@0ac83dc)) * Improved ClientIvc ([AztecProtocol#6429](AztecProtocol#6429)) ([f360b3f](AztecProtocol@f360b3f)) * Laying out a new recursion constraint for honk ([AztecProtocol#6489](AztecProtocol#6489)) ([af9fea4](AztecProtocol@af9fea4)) * Remove total logs len from pre tail kernels + add to L1 ([AztecProtocol#6466](AztecProtocol#6466)) ([66a2d43](AztecProtocol@66a2d43)) * Run benchmarks for ACIR proving ([AztecProtocol#6155](AztecProtocol#6155)) ([ebf6fc2](AztecProtocol@ebf6fc2)) * Squash transient note logs ([AztecProtocol#6268](AztecProtocol#6268)) ([4574877](AztecProtocol@4574877)) * Sum transaction fees and pay on l1 ([AztecProtocol#6522](AztecProtocol#6522)) ([bf441da](AztecProtocol@bf441da)) * Translator recursive verifier ([AztecProtocol#6327](AztecProtocol#6327)) ([9321aef](AztecProtocol@9321aef)) * View functions with static context enforcing ([AztecProtocol#6338](AztecProtocol#6338)) ([22ad5a5](AztecProtocol@22ad5a5)) * Vk_as_fields, proof_as_fields flows for honk ([AztecProtocol#6406](AztecProtocol#6406)) ([a6100ad](AztecProtocol@a6100ad)) * Disable buggy ClientIVC tests ([AztecProtocol#6546](AztecProtocol#6546)) ([b61dea3](AztecProtocol@b61dea3)) * Increase N_max in Zeromorph ([AztecProtocol#6415](AztecProtocol#6415)) ([9e643b4](AztecProtocol@9e643b4)) * Add c++ tests for generator derivation ([AztecProtocol#6528](AztecProtocol#6528)) ([72931bd](AztecProtocol@72931bd)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([AztecProtocol#6462](AztecProtocol#6462)) ([26eac62](AztecProtocol@26eac62)) * Bump maximum nullifier read requests (necessary for e2e tests in AVM) ([AztecProtocol#6495](AztecProtocol#6495)) ([90d8092](AztecProtocol@90d8092)) * Copy subset of constants to cpp ([AztecProtocol#6544](AztecProtocol#6544)) ([21dc72a](AztecProtocol@21dc72a)) * Lower max public bytecode to 20k ([AztecProtocol#6477](AztecProtocol#6477)) ([ce192f0](AztecProtocol@ce192f0)) * Parameterise cycle_group by `Builder` rather than `Composer` ([AztecProtocol#6565](AztecProtocol#6565)) ([ea36bf9](AztecProtocol@ea36bf9)) * Private call validation ([AztecProtocol#6510](AztecProtocol#6510)) ([07dc072](AztecProtocol@07dc072)) * Share decider with ultra_prover ([AztecProtocol#5467](AztecProtocol#5467)) ([b3b7376](AztecProtocol@b3b7376)) * Sumcheck documentation ([AztecProtocol#5841](AztecProtocol#5841)) ([116eef0](AztecProtocol@116eef0)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
We used to have to do this because we only knew the context at runtime, but since #6442 we no longer need this. I'm also doing this for some other state vars, but chose do to so in separate PRs as some of those changes are a bit messier.
We used to have to do this because we only knew the context at runtime, but since AztecProtocol/aztec-packages#6442 we no longer need this. I'm also doing this for some other state vars, but chose do to so in separate PRs as some of those changes are a bit messier.
Closes #5886.
This removes the
Context
struct and makes all state variables generic over a newContext
type parameter, with each state variable providing implementations forPrivateContext
,PublicContext
or()
(used to markedunconstarined
- more on this later).The end result is that we get compile-time errors when calling functions that are unavailable in the current context, reduced wrapping and unwrapping, and no obscure
explicit trap hit in brilling 'self._is_some'
runtime errors, such as in #3123.How
The implementation is prety much as described in #5886, except instead of using traits we specialize the type directly for the contexts we know.
This works because there's only a couple of them, and users are not expected to extend them.
The macros were altered so that instead of wrapping the context object in
Context
and then passing that, we simply pass the raw object to theStorage::init
function. This means thatStorage
itself is now also generic, resulting in some unfortunate new boilerplate in the struct declaration.All instances of
self.context.private.unwrap()
and friends were removed: each function is now available under the correspondingimpl
block that is specialized for the corresponding context. We could even rename some sinceread_public
andread_private
is no longer required: both impls can haveread
functions since they are effectively methods for different types, so the shared name is a non-issue.Oddities
This change revelead a number of small bugs in the codebase, in the form of uncallable functions. These were undetected since no test called them. I'll do a pass over the entire PR and leave comments where relevant.
Top-level unconstrained
This PR continues the formalization of what I've been calling 'top-level unconstrained' (i.e. an unconstrained contract function) as a fundamental Aztec.nr concept and third execution environment, alongside private and public execution. So far we've been accessing oracles in these unconstrained functions without much care (sometimes for perfomance reasons - see #5911), but the new stricter compile-time checks force us to be a bit more careful.
In my mind, we are arriving at the following model:
Private execution requires a context object a it needs to collect side effects, but public notably does not - it simply calls oracles and gets them to do things. In this sense, the
PublicContext
type is acting as a marker of the current execution environment in order to prevent developers from accidentally doing things that are invalid in public, which would otherwise result in either transpilation error or inability to create public kernel proofs.This means that we may want a third
UnconstrainedContext
to act as a similar marker for this third type (where we can e.g. callview_notes
, read old public state, etc.). It currently doesn't exist: we simply haveContext::none()
, and it is defined as the absense of one of the other contexts. Because of this, I chose to temporarily use the unit type (()
) to mark this environment.Note that in some cases the different execution environments share code paths:
view_notes
is simplyget_notes
without any constraints, and public storage reads are performed by calling the same oracles in both public and unconstrained. I imagine small differences will arise in the future, specially as work on the AVM continues.