-
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
feat(avm): Set gas allowance in public calls #5567
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. Join @spalladino and the rest of your teammates on Graphite |
bcddd64
to
255ca72
Compare
1ca1cf1
to
0e28cdc
Compare
66d8b23
to
ec5e2c9
Compare
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.
|
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.
LGTM, when passing LMK and I'll approve!
let gas = [/*l1_gas*/10000, /*l2_gas*/10000, /*da_gas*/10000]; | ||
let gas = [ | ||
gas_opts.l1_gas.unwrap_or_else(|| l1_gas_left()), | ||
gas_opts.l2_gas.unwrap_or_else(|| l2_gas_left() - NESTED_CALL_L2_GAS_BUFFER), |
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.
What happens if l2_gas_left() - NESTED_CALL_L2_GAS_BUFFER < 0
? I guess it would rever with a wrapping check? (I think brillig has checked arithmetic)
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.
I think so, but it's probably nicer (and safer) to have an explicit check with an explicit assertion. I'll add it!
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.
I remember a joke from Condorito in which Condorito's boss (both are accountants or something like that) instructs him to use blue ink to write down the positive balance for the quarter. Condorito tells him there isn't any, so his boss angrily tells him to go buy some. To which Condorito says "then there won't be any positive balance!".
Turns out adding this check means an extra 1M gas for some reason, so I'm sticking with the current implementation.
assert(NESTED_CALL_L2_GAS_BUFFER.lt(l2_gas), "Not enough L2 gas left for nested call");
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.
Hahah, man this is bad. We should start a list of "things that cause blowups and are not meant to".
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.
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.
Given the constructors this looks more like a
struct Gas {
l1_gas: Field,
l2_gas: Field,
da_gas: Field,
}
and then Option<Gas>
?
I don't mind either way, because I can imagine a user wanting to specify just one of the three (but then maybe have GasOpts::l2Gas(xxx)
constructors etc?.
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.
because I can imagine a user wanting to specify just one of the three
Yeah, that was the intention. A GasOpts::l2Gas(xxx)
constructor using Field
s instead of Option<Field>
s would have required giving GasOpts
knowledge to populate its own defaults, and I wanted to keep it as dumb as possible.
noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr
Outdated
Show resolved
Hide resolved
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.
Are these changes related to this PR?
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.
Yep. This interface wraps call_function
methods for a given contract, and since we've updated that API, we need to update this as well. There are more changes than strictly that because this wrapper hadn't been regenerated in a while unfortunately.
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.
The next logical comment to this is "then why are we committing it at all" or "not checking in the CI that it's up to date". We could do that in a job that depends on yarn-project-build, since it requires ts code for the generation. But the plan is to remove this feature relatively soon, in favor of aztec macros.
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.
Thanks for making the changes then!
@@ -477,6 +477,24 @@ describe('AVM simulator: transpiled Noir contracts', () => { | |||
expect(results.output).toEqual([new Fr(3)]); | |||
}); | |||
|
|||
it(`Nested call with not enough gas`, async () => { | |||
const gas = [/*l1=*/ 10000, /*l2=*/ 20, /*da=*/ 10000].map(g => new Fr(g)); |
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.
gas not set?
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.
WDYM?
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.
Sorry, I meant that AFAICT
const gas = [/*l1=*/ 10000, /*l2=*/ 20, /*da=*/ 10000].map(g => new Fr(g));
is not used?
static type: string = 'L2GASLEFT'; | ||
static readonly opcode: Opcode = Opcode.L2GASLEFT; | ||
|
||
// TODO(@spalladino) Yellow paper specifies that the value should be an Uint32, not a Field. |
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.
I'd say Just send David a message on slack to confirm what the type should be.
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.
Thanks!
ec5e2c9
to
8fa9373
Compare
@fcarreiro you were spot on in that the error in nested calls was just not allocating enough buffer. PR is now ready for its (hopefully) last review. Thanks! |
let gas = [/*l1_gas*/10000, /*l2_gas*/10000, /*da_gas*/10000]; | ||
let gas = [ | ||
gas_opts.l1_gas.unwrap_or_else(|| l1_gas_left()), | ||
gas_opts.l2_gas.unwrap_or_else(|| l2_gas_left() - NESTED_CALL_L2_GAS_BUFFER), |
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.
Hahah, man this is bad. We should start a list of "things that cause blowups and are not meant to".
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.
Thanks for making the changes then!
@@ -477,6 +477,24 @@ describe('AVM simulator: transpiled Noir contracts', () => { | |||
expect(results.output).toEqual([new Fr(3)]); | |||
}); | |||
|
|||
it(`Nested call with not enough gas`, async () => { | |||
const gas = [/*l1=*/ 10000, /*l2=*/ 20, /*da=*/ 10000].map(g => new Fr(g)); |
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.
Sorry, I meant that AFAICT
const gas = [/*l1=*/ 10000, /*l2=*/ 20, /*da=*/ 10000].map(g => new Fr(g));
is not used?
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.33.0</summary> ## [0.33.0](aztec-package-v0.32.1...aztec-package-v0.33.0) (2024-04-09) ### Features * Jest fast transpile. no more ts-jest. ([#5530](#5530)) ([1912802](1912802)) * **SimulateTx:** Simulate constrained transaction execution with return values ([#5432](#5432)) ([0249737](0249737)) </details> <details><summary>barretenberg.js: 0.33.0</summary> ## [0.33.0](barretenberg.js-v0.32.1...barretenberg.js-v0.33.0) (2024-04-09) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-cli: 0.33.0</summary> ## [0.33.0](aztec-cli-v0.32.1...aztec-cli-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * contract_abi-exports ([#5386](#5386)) ### Features * **avm:** Integrate AVM with initializers ([#5469](#5469)) ([59799f2](59799f2)) * Contract_abi-exports ([#5386](#5386)) ([745d522](745d522)) * Jest fast transpile. no more ts-jest. ([#5530](#5530)) ([1912802](1912802)) ### Bug Fixes * Update CLI & terraforms with new contract addresses ([#5553](#5553)) ([eb73d20](eb73d20)) </details> <details><summary>aztec-packages: 0.33.0</summary> ## [0.33.0](aztec-packages-v0.32.1...aztec-packages-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * **acir:** Add predicate to call opcode ([#5616](#5616)) * contract_abi-exports ([#5386](#5386)) * **avm:** rollback FunctionAbi isTranspiled changes ([#5561](#5561)) ### Features * /foundry is canoncial build of foundry. e2e tests can start own anvil. ([#5522](#5522)) ([510daa0](510daa0)) * `add` and `sub` methods of `EasyPrivateUint` throw when called in public ([#5581](#5581)) ([29f337d](29f337d)) * **acir:** Add predicate to call opcode ([#5616](#5616)) ([e8cec0a](e8cec0a)) * **acvm_js:** Execute program (noir-lang/noir#4694) ([8b30b95](8b30b95)) * Add return values to aztec fns ([#5389](#5389)) ([7b88bac](7b88bac)) * Allow slices to brillig entry points (noir-lang/noir#4713) ([8b30b95](8b30b95)) * Avm logup ([#5577](#5577)) ([7e4e9b9](7e4e9b9)) * **avm:** Add index to pedersen opcode ([#5486](#5486)) ([e1d7d11](e1d7d11)) * **avm:** Contract instance opcode ([#5487](#5487)) ([ceacba6](ceacba6)) * **avm:** Gas usage for nested calls ([#5495](#5495)) ([11699c8](11699c8)) * **avm:** Indirect memory for set opcode ([#5546](#5546)) ([e0e7200](e0e7200)), closes [#5542](#5542) * **avm:** Integrate AVM with initializers ([#5469](#5469)) ([59799f2](59799f2)) * **avm:** Set gas allowance in public calls ([#5567](#5567)) ([ee23415](ee23415)) * **avm:** Track gas from memory accesses explicitly ([#5563](#5563)) ([18c9128](18c9128)), closes [#5514](#5514) * Contract_abi-exports ([#5386](#5386)) ([745d522](745d522)) * DataBus notion with calldata/return data ([#5504](#5504)) ([95a1d8a](95a1d8a)) * DebugLog(...) in noir-protocol-circuits ([#5568](#5568)) ([a07bb92](a07bb92)) * **docs:** Documenting noir codegen (noir-lang/noir#4454) ([8b30b95](8b30b95)) * Improve nargo check cli with --override flag and feedback for existing files (noir-lang/noir#4575) ([8b30b95](8b30b95)) * Improve optimisations on range constraints (noir-lang/noir#4690) ([8b30b95](8b30b95)) * Improve SSA type-awareness in EQ and MUL instructions (noir-lang/noir#4691) ([8b30b95](8b30b95)) * Improve the proving orchestration lifecycle ([#5535](#5535)) ([4e4f843](4e4f843)) * Jest fast transpile. no more ts-jest. ([#5530](#5530)) ([1912802](1912802)) * Logging deployed contract address to help debug e2e account test ([#5571](#5571)) ([1907473](1907473)) * Only export values from accumulated data ([#5604](#5604)) ([a974ec8](a974ec8)) * Optimise relations ([#5552](#5552)) ([a581e80](a581e80)) * Optimize auxiliary relations slightly ([#5517](#5517)) ([30be431](30be431)) * Public inputs refactor ([#5500](#5500)) ([6b9a538](6b9a538)) * Restore hashing args via slice for performance ([#5539](#5539)) ([eb3acdf](eb3acdf)) * **SimulateTx:** Simulate constrained transaction execution with return values ([#5432](#5432)) ([0249737](0249737)) ### Bug Fixes * **acvm:** Mark outputs of Opcode::Call solvable (noir-lang/noir#4708) ([8b30b95](8b30b95)) * **avm:** Nullifier handling ([#5488](#5488)) ([bc8211d](bc8211d)) * **ci:** Cache submodules in GA ([#5531](#5531)) ([75f2cc6](75f2cc6)) * **ci:** Install fixed foundry version in CI ([#5582](#5582)) ([46fdb37](46fdb37)) * Dependabot update ([#5547](#5547)) ([f7e6cc8](f7e6cc8)) * E2e earthly status ([#5564](#5564)) ([a5076ca](a5076ca)) * Field comparisons (noir-lang/noir#4704) ([8b30b95](8b30b95)) * Invalid fork terraform ([#5585](#5585)) ([826353b](826353b)) * Last use analysis & make it an SSA pass (noir-lang/noir#4686) ([8b30b95](8b30b95)) * Mainnet fork redeploys ([#5573](#5573)) ([88e8b6d](88e8b6d)) * Remove EFS lifecycle rule ([#5587](#5587)) ([eb66fc6](eb66fc6)) * **ssa:** Do not use get_value_max_num_bits when we want pure type information (noir-lang/noir#4700) ([8b30b95](8b30b95)) * Taint fork file storage ([#5560](#5560)) ([f144f3b](f144f3b)) * Unknown slice lengths coming from as_slice (noir-lang/noir#4725) ([8b30b95](8b30b95)) * Update CLI & terraforms with new contract addresses ([#5553](#5553)) ([eb73d20](eb73d20)) ### Miscellaneous * **avm:** Rollback FunctionAbi isTranspiled changes ([#5561](#5561)) ([150932a](150932a)) * Check for references to private functions during path resolution (noir-lang/noir#4622) ([8b30b95](8b30b95)) * **docs:** Add file to prove ownership for google search console ([#5554](#5554)) ([dfa3998](dfa3998)) * **docs:** Fix indexed-merkle-tree docs images ([#4674](#4674)) ([8fc29d5](8fc29d5)) * **docs:** Random updates ([#5281](#5281)) ([b8c9273](b8c9273)) * ECCVM flavor depends on builder ([#5323](#5323)) ([a594683](a594683)) * Fix clippy errors (noir-lang/noir#4684) ([8b30b95](8b30b95)) * Get rid of ECCVM composer ([#5562](#5562)) ([43ed901](43ed901)) * Move e2e-avm-initializer test to e2e-avm-simulator ([#5570](#5570)) ([d827705](d827705)) * Nuking accounts from e2e setup ([#5574](#5574)) ([be6f843](be6f843)), closes [#5307](#5307) * Nuking L2BlockContext ([#5569](#5569)) ([1299190](1299190)) * Pad when needed and not sooner ([#5482](#5482)) ([e928c33](e928c33)), closes [#5357](#5357) * Remove conditional compilation around `acvm_js` package (noir-lang/noir#4702) ([8b30b95](8b30b95)) * Remove debug log from watch.sh ([a9a349d](a9a349d)) * Remove last traces of nix (noir-lang/noir#4679) ([8b30b95](8b30b95)) * Remove unused boolean return values from stores ([#5470](#5470)) ([07794ee](07794ee)) * Remove unused env vars from `Cross.toml` (noir-lang/noir#4717) ([8b30b95](8b30b95)) * Replace relative paths to noir-protocol-circuits ([51a1983](51a1983)) * Replace relative paths to noir-protocol-circuits ([a716270](a716270)) * Replace relative paths to noir-protocol-circuits ([6827014](6827014)) * Replace relative paths to noir-protocol-circuits ([356caf7](356caf7)) * Simplify how `acvm_backend.wasm` is embedded (noir-lang/noir#4703) ([8b30b95](8b30b95)) * Simplify how blns is loaded into tests (noir-lang/noir#4705) ([8b30b95](8b30b95)) * Update snapshot ([#5626](#5626)) ([fb66426](fb66426)) * Use is_entry_point helper on RuntimeType (noir-lang/noir#4678) ([8b30b95](8b30b95)) ### Documentation * Minor fixes in keys ([#5550](#5550)) ([ea48ad3](ea48ad3)) * **spec:** Hashing and keys ([#5478](#5478)) ([820ac8c](820ac8c)) * Update quickstart.md to use Docker daemon ([#5576](#5576)) ([42b9827](42b9827)) </details> <details><summary>barretenberg: 0.33.0</summary> ## [0.33.0](barretenberg-v0.32.1...barretenberg-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * **acir:** Add predicate to call opcode ([#5616](#5616)) ### Features * **acir:** Add predicate to call opcode ([#5616](#5616)) ([e8cec0a](e8cec0a)) * Avm logup ([#5577](#5577)) ([7e4e9b9](7e4e9b9)) * **avm:** Contract instance opcode ([#5487](#5487)) ([ceacba6](ceacba6)) * **avm:** Indirect memory for set opcode ([#5546](#5546)) ([e0e7200](e0e7200)), closes [#5542](#5542) * DataBus notion with calldata/return data ([#5504](#5504)) ([95a1d8a](95a1d8a)) * Optimise relations ([#5552](#5552)) ([a581e80](a581e80)) * Optimize auxiliary relations slightly ([#5517](#5517)) ([30be431](30be431)) ### Miscellaneous * ECCVM flavor depends on builder ([#5323](#5323)) ([a594683](a594683)) * Get rid of ECCVM composer ([#5562](#5562)) ([43ed901](43ed901)) </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.33.0</summary> ## [0.33.0](AztecProtocol/aztec-packages@aztec-package-v0.32.1...aztec-package-v0.33.0) (2024-04-09) ### Features * Jest fast transpile. no more ts-jest. ([#5530](AztecProtocol/aztec-packages#5530)) ([1912802](AztecProtocol/aztec-packages@1912802)) * **SimulateTx:** Simulate constrained transaction execution with return values ([#5432](AztecProtocol/aztec-packages#5432)) ([0249737](AztecProtocol/aztec-packages@0249737)) </details> <details><summary>barretenberg.js: 0.33.0</summary> ## [0.33.0](AztecProtocol/aztec-packages@barretenberg.js-v0.32.1...barretenberg.js-v0.33.0) (2024-04-09) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-cli: 0.33.0</summary> ## [0.33.0](AztecProtocol/aztec-packages@aztec-cli-v0.32.1...aztec-cli-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * contract_abi-exports ([#5386](AztecProtocol/aztec-packages#5386)) ### Features * **avm:** Integrate AVM with initializers ([#5469](AztecProtocol/aztec-packages#5469)) ([59799f2](AztecProtocol/aztec-packages@59799f2)) * Contract_abi-exports ([#5386](AztecProtocol/aztec-packages#5386)) ([745d522](AztecProtocol/aztec-packages@745d522)) * Jest fast transpile. no more ts-jest. ([#5530](AztecProtocol/aztec-packages#5530)) ([1912802](AztecProtocol/aztec-packages@1912802)) ### Bug Fixes * Update CLI & terraforms with new contract addresses ([#5553](AztecProtocol/aztec-packages#5553)) ([eb73d20](AztecProtocol/aztec-packages@eb73d20)) </details> <details><summary>aztec-packages: 0.33.0</summary> ## [0.33.0](AztecProtocol/aztec-packages@aztec-packages-v0.32.1...aztec-packages-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * **acir:** Add predicate to call opcode ([#5616](AztecProtocol/aztec-packages#5616)) * contract_abi-exports ([#5386](AztecProtocol/aztec-packages#5386)) * **avm:** rollback FunctionAbi isTranspiled changes ([#5561](AztecProtocol/aztec-packages#5561)) ### Features * /foundry is canoncial build of foundry. e2e tests can start own anvil. ([#5522](AztecProtocol/aztec-packages#5522)) ([510daa0](AztecProtocol/aztec-packages@510daa0)) * `add` and `sub` methods of `EasyPrivateUint` throw when called in public ([#5581](AztecProtocol/aztec-packages#5581)) ([29f337d](AztecProtocol/aztec-packages@29f337d)) * **acir:** Add predicate to call opcode ([#5616](AztecProtocol/aztec-packages#5616)) ([e8cec0a](AztecProtocol/aztec-packages@e8cec0a)) * **acvm_js:** Execute program (noir-lang/noir#4694) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Add return values to aztec fns ([#5389](AztecProtocol/aztec-packages#5389)) ([7b88bac](AztecProtocol/aztec-packages@7b88bac)) * Allow slices to brillig entry points (noir-lang/noir#4713) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Avm logup ([#5577](AztecProtocol/aztec-packages#5577)) ([7e4e9b9](AztecProtocol/aztec-packages@7e4e9b9)) * **avm:** Add index to pedersen opcode ([#5486](AztecProtocol/aztec-packages#5486)) ([e1d7d11](AztecProtocol/aztec-packages@e1d7d11)) * **avm:** Contract instance opcode ([#5487](AztecProtocol/aztec-packages#5487)) ([ceacba6](AztecProtocol/aztec-packages@ceacba6)) * **avm:** Gas usage for nested calls ([#5495](AztecProtocol/aztec-packages#5495)) ([11699c8](AztecProtocol/aztec-packages@11699c8)) * **avm:** Indirect memory for set opcode ([#5546](AztecProtocol/aztec-packages#5546)) ([e0e7200](AztecProtocol/aztec-packages@e0e7200)), closes [#5542](AztecProtocol/aztec-packages#5542) * **avm:** Integrate AVM with initializers ([#5469](AztecProtocol/aztec-packages#5469)) ([59799f2](AztecProtocol/aztec-packages@59799f2)) * **avm:** Set gas allowance in public calls ([#5567](AztecProtocol/aztec-packages#5567)) ([ee23415](AztecProtocol/aztec-packages@ee23415)) * **avm:** Track gas from memory accesses explicitly ([#5563](AztecProtocol/aztec-packages#5563)) ([18c9128](AztecProtocol/aztec-packages@18c9128)), closes [#5514](AztecProtocol/aztec-packages#5514) * Contract_abi-exports ([#5386](AztecProtocol/aztec-packages#5386)) ([745d522](AztecProtocol/aztec-packages@745d522)) * DataBus notion with calldata/return data ([#5504](AztecProtocol/aztec-packages#5504)) ([95a1d8a](AztecProtocol/aztec-packages@95a1d8a)) * DebugLog(...) in noir-protocol-circuits ([#5568](AztecProtocol/aztec-packages#5568)) ([a07bb92](AztecProtocol/aztec-packages@a07bb92)) * **docs:** Documenting noir codegen (noir-lang/noir#4454) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Improve nargo check cli with --override flag and feedback for existing files (noir-lang/noir#4575) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Improve optimisations on range constraints (noir-lang/noir#4690) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Improve SSA type-awareness in EQ and MUL instructions (noir-lang/noir#4691) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Improve the proving orchestration lifecycle ([#5535](AztecProtocol/aztec-packages#5535)) ([4e4f843](AztecProtocol/aztec-packages@4e4f843)) * Jest fast transpile. no more ts-jest. ([#5530](AztecProtocol/aztec-packages#5530)) ([1912802](AztecProtocol/aztec-packages@1912802)) * Logging deployed contract address to help debug e2e account test ([#5571](AztecProtocol/aztec-packages#5571)) ([1907473](AztecProtocol/aztec-packages@1907473)) * Only export values from accumulated data ([#5604](AztecProtocol/aztec-packages#5604)) ([a974ec8](AztecProtocol/aztec-packages@a974ec8)) * Optimise relations ([#5552](AztecProtocol/aztec-packages#5552)) ([a581e80](AztecProtocol/aztec-packages@a581e80)) * Optimize auxiliary relations slightly ([#5517](AztecProtocol/aztec-packages#5517)) ([30be431](AztecProtocol/aztec-packages@30be431)) * Public inputs refactor ([#5500](AztecProtocol/aztec-packages#5500)) ([6b9a538](AztecProtocol/aztec-packages@6b9a538)) * Restore hashing args via slice for performance ([#5539](AztecProtocol/aztec-packages#5539)) ([eb3acdf](AztecProtocol/aztec-packages@eb3acdf)) * **SimulateTx:** Simulate constrained transaction execution with return values ([#5432](AztecProtocol/aztec-packages#5432)) ([0249737](AztecProtocol/aztec-packages@0249737)) ### Bug Fixes * **acvm:** Mark outputs of Opcode::Call solvable (noir-lang/noir#4708) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * **avm:** Nullifier handling ([#5488](AztecProtocol/aztec-packages#5488)) ([bc8211d](AztecProtocol/aztec-packages@bc8211d)) * **ci:** Cache submodules in GA ([#5531](AztecProtocol/aztec-packages#5531)) ([75f2cc6](AztecProtocol/aztec-packages@75f2cc6)) * **ci:** Install fixed foundry version in CI ([#5582](AztecProtocol/aztec-packages#5582)) ([46fdb37](AztecProtocol/aztec-packages@46fdb37)) * Dependabot update ([#5547](AztecProtocol/aztec-packages#5547)) ([f7e6cc8](AztecProtocol/aztec-packages@f7e6cc8)) * E2e earthly status ([#5564](AztecProtocol/aztec-packages#5564)) ([a5076ca](AztecProtocol/aztec-packages@a5076ca)) * Field comparisons (noir-lang/noir#4704) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Invalid fork terraform ([#5585](AztecProtocol/aztec-packages#5585)) ([826353b](AztecProtocol/aztec-packages@826353b)) * Last use analysis & make it an SSA pass (noir-lang/noir#4686) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Mainnet fork redeploys ([#5573](AztecProtocol/aztec-packages#5573)) ([88e8b6d](AztecProtocol/aztec-packages@88e8b6d)) * Remove EFS lifecycle rule ([#5587](AztecProtocol/aztec-packages#5587)) ([eb66fc6](AztecProtocol/aztec-packages@eb66fc6)) * **ssa:** Do not use get_value_max_num_bits when we want pure type information (noir-lang/noir#4700) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Taint fork file storage ([#5560](AztecProtocol/aztec-packages#5560)) ([f144f3b](AztecProtocol/aztec-packages@f144f3b)) * Unknown slice lengths coming from as_slice (noir-lang/noir#4725) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Update CLI & terraforms with new contract addresses ([#5553](AztecProtocol/aztec-packages#5553)) ([eb73d20](AztecProtocol/aztec-packages@eb73d20)) ### Miscellaneous * **avm:** Rollback FunctionAbi isTranspiled changes ([#5561](AztecProtocol/aztec-packages#5561)) ([150932a](AztecProtocol/aztec-packages@150932a)) * Check for references to private functions during path resolution (noir-lang/noir#4622) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * **docs:** Add file to prove ownership for google search console ([#5554](AztecProtocol/aztec-packages#5554)) ([dfa3998](AztecProtocol/aztec-packages@dfa3998)) * **docs:** Fix indexed-merkle-tree docs images ([#4674](AztecProtocol/aztec-packages#4674)) ([8fc29d5](AztecProtocol/aztec-packages@8fc29d5)) * **docs:** Random updates ([#5281](AztecProtocol/aztec-packages#5281)) ([b8c9273](AztecProtocol/aztec-packages@b8c9273)) * ECCVM flavor depends on builder ([#5323](AztecProtocol/aztec-packages#5323)) ([a594683](AztecProtocol/aztec-packages@a594683)) * Fix clippy errors (noir-lang/noir#4684) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Get rid of ECCVM composer ([#5562](AztecProtocol/aztec-packages#5562)) ([43ed901](AztecProtocol/aztec-packages@43ed901)) * Move e2e-avm-initializer test to e2e-avm-simulator ([#5570](AztecProtocol/aztec-packages#5570)) ([d827705](AztecProtocol/aztec-packages@d827705)) * Nuking accounts from e2e setup ([#5574](AztecProtocol/aztec-packages#5574)) ([be6f843](AztecProtocol/aztec-packages@be6f843)), closes [#5307](AztecProtocol/aztec-packages#5307) * Nuking L2BlockContext ([#5569](AztecProtocol/aztec-packages#5569)) ([1299190](AztecProtocol/aztec-packages@1299190)) * Pad when needed and not sooner ([#5482](AztecProtocol/aztec-packages#5482)) ([e928c33](AztecProtocol/aztec-packages@e928c33)), closes [#5357](AztecProtocol/aztec-packages#5357) * Remove conditional compilation around `acvm_js` package (noir-lang/noir#4702) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Remove debug log from watch.sh ([a9a349d](AztecProtocol/aztec-packages@a9a349d)) * Remove last traces of nix (noir-lang/noir#4679) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Remove unused boolean return values from stores ([#5470](AztecProtocol/aztec-packages#5470)) ([07794ee](AztecProtocol/aztec-packages@07794ee)) * Remove unused env vars from `Cross.toml` (noir-lang/noir#4717) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Replace relative paths to noir-protocol-circuits ([51a1983](AztecProtocol/aztec-packages@51a1983)) * Replace relative paths to noir-protocol-circuits ([a716270](AztecProtocol/aztec-packages@a716270)) * Replace relative paths to noir-protocol-circuits ([6827014](AztecProtocol/aztec-packages@6827014)) * Replace relative paths to noir-protocol-circuits ([356caf7](AztecProtocol/aztec-packages@356caf7)) * Simplify how `acvm_backend.wasm` is embedded (noir-lang/noir#4703) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Simplify how blns is loaded into tests (noir-lang/noir#4705) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) * Update snapshot ([#5626](AztecProtocol/aztec-packages#5626)) ([fb66426](AztecProtocol/aztec-packages@fb66426)) * Use is_entry_point helper on RuntimeType (noir-lang/noir#4678) ([8b30b95](AztecProtocol/aztec-packages@8b30b95)) ### Documentation * Minor fixes in keys ([#5550](AztecProtocol/aztec-packages#5550)) ([ea48ad3](AztecProtocol/aztec-packages@ea48ad3)) * **spec:** Hashing and keys ([#5478](AztecProtocol/aztec-packages#5478)) ([820ac8c](AztecProtocol/aztec-packages@820ac8c)) * Update quickstart.md to use Docker daemon ([#5576](AztecProtocol/aztec-packages#5576)) ([42b9827](AztecProtocol/aztec-packages@42b9827)) </details> <details><summary>barretenberg: 0.33.0</summary> ## [0.33.0](AztecProtocol/aztec-packages@barretenberg-v0.32.1...barretenberg-v0.33.0) (2024-04-09) ### ⚠ BREAKING CHANGES * **acir:** Add predicate to call opcode ([#5616](AztecProtocol/aztec-packages#5616)) ### Features * **acir:** Add predicate to call opcode ([#5616](AztecProtocol/aztec-packages#5616)) ([e8cec0a](AztecProtocol/aztec-packages@e8cec0a)) * Avm logup ([#5577](AztecProtocol/aztec-packages#5577)) ([7e4e9b9](AztecProtocol/aztec-packages@7e4e9b9)) * **avm:** Contract instance opcode ([#5487](AztecProtocol/aztec-packages#5487)) ([ceacba6](AztecProtocol/aztec-packages@ceacba6)) * **avm:** Indirect memory for set opcode ([#5546](AztecProtocol/aztec-packages#5546)) ([e0e7200](AztecProtocol/aztec-packages@e0e7200)), closes [#5542](AztecProtocol/aztec-packages#5542) * DataBus notion with calldata/return data ([#5504](AztecProtocol/aztec-packages#5504)) ([95a1d8a](AztecProtocol/aztec-packages@95a1d8a)) * Optimise relations ([#5552](AztecProtocol/aztec-packages#5552)) ([a581e80](AztecProtocol/aztec-packages@a581e80)) * Optimize auxiliary relations slightly ([#5517](AztecProtocol/aztec-packages#5517)) ([30be431](AztecProtocol/aztec-packages@30be431)) ### Miscellaneous * ECCVM flavor depends on builder ([#5323](AztecProtocol/aztec-packages#5323)) ([a594683](AztecProtocol/aztec-packages@a594683)) * Get rid of ECCVM composer ([#5562](AztecProtocol/aztec-packages#5562)) ([43ed901](AztecProtocol/aztec-packages@43ed901)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Allows user to set gas allowance in public calls, defaulting to the gas left in the current frame.
(L1|L2|DA)GASLEFT
instructions.GasOpts
option to the(Public|Avm)Context.call_public_function
so the user can specify the gas allocation for a nested public call (ignored in public context, only used in avm context). Defaults gas to the result of gasleft, minus a buffer for L2 compute.