-
Notifications
You must be signed in to change notification settings - Fork 301
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(Authwit): lookup the validity of authwits #5316
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. Join @LHerskind and the rest of your teammates on Graphite |
a8344bb
to
d734cfc
Compare
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.
Oh goodness that is nasty, calling own account contract from within ts 😝.
Super cool though and I don't see why this doesn't work for now.
d734cfc
to
6e4ea43
Compare
Benchmark resultsNo metrics with a significant change found. 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 processing duration by data writes.
|
6e4ea43
to
2750ab0
Compare
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.
Approving because the code definitely works, but I agree in that the solution feels somewhat ugly, especially as the verify_signature
call gets repeated in the unconstrained version.
Maybe we should break down the different uses for this, to try and nail down the best way to implement it? In my mind there are four scenarios: querying from within a tx (the one we faced at the offsite and motivated #4822) or from offchain (the one addressed in this PR), both for private and public land.
Within a tx for private authwits, we want to ask the local PXE if there's a valid authwit for an action, in order to consume it immediately afterwards. The interaction would probably be something like:
let action = compute_authwit_hash(...)
if check_has_valid_authwit(sender, action):
assert_valid_authwit(sender, action)
else:
try_something_else()
Here check_has_valid_authwit
could share code with assert_valid_authwit
in that it loads the authwit from the PXE and validates it, but not spends it. The nullifier check for cancellations is probably not needed in the check_has_valid_authwit
, since the PXE can know when an authwit has been consumed and thus delete it from its cache. So we could have something like:
contract Account:
internal private check_signature(authwit):
// This is the only custom code for each account contract
return schnorr_check(authwit, this.pubkey)
private check_has_valid_authwit(action):
// Oracle should return an empty authwit if it has been spent
let authwit = oracle.get_authwit(EXPECTED_AUTHWIT_SIZE_FOR_THIS_ACCOUNT_CONTRACT)
if authwit.is_empty(): return false
return check_signature(authwit)
private assert_valid_authwit(action):
assert(check_has_valid_authwit(action))
emit_nullifier(action)
Within a tx for public authwits should be easier, since authwits are set in storage. Right now I understand that public authwits also emit a nullifier from public with consumed, but if we also removed it from storage, we could just read public state and return that as the check
.
Offchain for private authwits feels like another instance of a recurring problem we have: duplicating getters for onchain and offchain. I think we should tackle that bigger issue rather than start adding more duplicated getters. If we find a way to call a private function from off-chain (ie just simulating it, which is something we sort-of can already do today), we could just use check_valid_authwit
and be done with it.
Offchain for public authwits should also be a matter of simulating a public function to read storage, in line with the one above.
The one thing I'm not sure about here is the naming for check_has_valid_authwit
, since it should be clear that it's unsafe: it depends on the PXE being willing to return the authwit, as well as being honest and not returning it if it's spent. But if we can convey in the name that it should always be followed by an assert_valid_authwit
, then I think this should do the trick. WDYT?
let lower_wit = get_low_nullifier_membership_witness(block_number, siloed_nullifier); | ||
let is_spent = lower_wit.leaf_preimage.nullifier == siloed_nullifier; |
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.
Why do we need a full membership witness if we're blinding trusting the oracle? We could just return a flag "spent". Or is this just to avoid introducing a new oracle 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.
Was to not introduce a new oracle 👍
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 means that the unconstrained cannot really be used nicely as what @spalladino did at the offsite, but mainly is an off-chain thing for the user who is unsure if something was approved and want to check it.
Are you refering to having to e.g. inject the address because we're not in a transaction context? If so I'd say the deeper issue is in this execution mode being so different from the other two, ideally we'd be able to make this as close as possible to an actual tx.
|
||
/** | ||
* @notice Helper function to check the existing and validity of authwitnesses | ||
* @dev TODO: myself and block_number should be removed and passed from a context |
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 would be solved by #2665 right?
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.
Not directly as this one is doing both public and private, likely better addressed by having a unconstrained context as we briefly discussed the other day in the scrum. Should likely have a larger issue as it can also align functions so they are not totally different.
noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr
Show resolved
Hide resolved
parameters: [ | ||
{ | ||
name: 'myself', | ||
type: { | ||
kind: 'struct', | ||
path: 'authwit::aztec::protocol_types::address::aztec_address::AztecAddress', | ||
fields: [{ name: 'inner', type: { kind: 'field' } }], | ||
}, | ||
visibility: 'private' as ABIParameterVisibility, | ||
}, | ||
{ | ||
name: 'block_number', | ||
type: { kind: 'integer', sign: 'unsigned', width: 32 }, | ||
visibility: 'private' as ABIParameterVisibility, | ||
}, | ||
{ name: 'message_hash', type: { kind: 'field' }, visibility: 'private' as ABIParameterVisibility }, |
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.
Why do we need to add this manually? Also this is missing the check_private
param. How is this working with that value missing?
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.
Was just done as such to be similar to the others. Interesting to see that it seems to be somewhat ignored that stuff is missing in the unconstrained 🤣 My guess would almost be that it is going straight for Fields if nothing specified then. But quite odd.
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.
Interestingly, if you are viewing it is not using the encodeArguments
function but just blindly passing the arguments along so it does not use anything beyond the name of the function it seems
public view(options: ViewMethodOptions = {}) {
if (this.functionDao.functionType !== FunctionType.UNCONSTRAINED) {
throw new Error('Can only call `view` on an unconstrained function.');
}
const { from } = options;
return this.wallet.viewTx(this.functionDao.name, this.args, this.contractAddress, from);
}
You can entirely delete the parameters
and returnTypes
from the abi and it will still succeed if unconstrained.
@@ -35,6 +35,9 @@ export interface PXE { | |||
*/ | |||
addAuthWitness(authWitness: AuthWitness): Promise<void>; | |||
|
|||
// @todo @LHerskind |
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's the todo? docs?
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.
Yes 😬
5697f73
to
52383d8
Compare
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.31.0</summary> ## [0.31.0](aztec-package-v0.30.1...aztec-package-v0.31.0) (2024-03-26) ### Features * Add batched signerless contract calls ([#5313](#5313)) ([be60eb3](be60eb3)) * Dynamic proving ([#5346](#5346)) ([6a7ccca](6a7ccca)) * Less earthly runners + e2e GA runners, bb bench ([#5356](#5356)) ([2136a66](2136a66)) </details> <details><summary>barretenberg.js: 0.31.0</summary> ## [0.31.0](barretenberg.js-v0.30.1...barretenberg.js-v0.31.0) (2024-03-26) ### Features * Earthly bb tests + arm + satellites ([#5268](#5268)) ([eca12b3](eca12b3)) * Less earthly runners + e2e GA runners, bb bench ([#5356](#5356)) ([2136a66](2136a66)) * Simplified bb Honk interface ([#5319](#5319)) ([a2d138f](a2d138f)) </details> <details><summary>aztec-cli: 0.31.0</summary> ## [0.31.0](aztec-cli-v0.30.1...aztec-cli-v0.31.0) (2024-03-26) ### Features * Capture broadcasted functions in node ([#5353](#5353)) ([bc05db2](bc05db2)) ### Bug Fixes * **cli:** Support initializers not named constructor in cli ([#5397](#5397)) ([85f14c5](85f14c5)) </details> <details><summary>aztec-packages: 0.31.0</summary> ## [0.31.0](aztec-packages-v0.30.1...aztec-packages-v0.31.0) (2024-03-26) ### ⚠ BREAKING CHANGES * **avm:** per function avm run ([#5421](#5421)) * rename storage inclusion proof to historical storage read ([#5379](#5379)) * plug-in new outbox and update examples to use api to fetch inclusion proofs #4769 ([#5292](#5292)) * Mark transactions as reverted on L1 ([#5226](#5226)) ### Features * Add batched signerless contract calls ([#5313](#5313)) ([be60eb3](be60eb3)) * Add specific error for attempting `string[x] = ".."` (noir-lang/noir#4611) ([13a12d5](13a12d5)) * **AuthWit:** Chain_id and version in hash ([#5331](#5331)) ([5235c95](5235c95)) * **Authwit:** Lookup the validity of authwits ([#5316](#5316)) ([7c24870](7c24870)) * Avm lookup and/or/xor ([#5338](#5338)) ([489bc2c](489bc2c)) * **avm:** Add AvmContextInputs ([#5396](#5396)) ([12e2844](12e2844)) * **avm:** Per function avm run ([#5421](#5421)) ([f024751](f024751)) * **avm:** Track gas usage in AVM simulator ([#5438](#5438)) ([4884d83](4884d83)) * Capture broadcasted functions in node ([#5353](#5353)) ([bc05db2](bc05db2)) * Dynamic proving ([#5346](#5346)) ([6a7ccca](6a7ccca)) * Earthly bb tests + arm + satellites ([#5268](#5268)) ([eca12b3](eca12b3)) * Fix awkward snippet indention in docs ([#5367](#5367)) ([c55d3da](c55d3da)) * Fold proving key polys instead of prover polys ([#5436](#5436)) ([239ebfb](239ebfb)) * Implement serdes for u64 [#4990](#4990) ([#5411](#5411)) ([5a6bcef](5a6bcef)) * Introduce max_block_number ([#5251](#5251)) ([6573173](6573173)) * Less earthly runners + e2e GA runners, bb bench ([#5356](#5356)) ([2136a66](2136a66)) * Mark transactions as reverted on L1 ([#5226](#5226)) ([40ecc02](40ecc02)) * Plug-in new outbox and update examples to use api to fetch inclusion proofs [#4769](#4769) ([#5292](#5292)) ([fec1008](fec1008)) * Read_calldata ([#5409](#5409)) ([034fbf0](034fbf0)) * Remove NUM_FIELDS_PER_SHA256 ([#5392](#5392)) ([86a181b](86a181b)) * Rename storage inclusion proof to historical storage read ([#5379](#5379)) ([b6e7216](b6e7216)) * Returning non-nullified messages only ([#5390](#5390)) ([4c671be](4c671be)) * Simplified bb Honk interface ([#5319](#5319)) ([a2d138f](a2d138f)) * Simplify offsets and sizing using new block structure ([#5404](#5404)) ([efa0842](efa0842)) * Throw by default when awaiting a tx that reverted ([#5431](#5431)) ([c9113ec](c9113ec)) * Truncate SHA hashes inside circuits ([#5160](#5160)) ([9dc0d2a](9dc0d2a)) * Unified CircuitChecker interface ([#5343](#5343)) ([13cef1f](13cef1f)) * ZeroMorph working with IPA and integration with ECCVM ([#5246](#5246)) ([c4dce94](c4dce94)) ### Bug Fixes * Addressing flakiness of `uniswap_trade_on_l1_from_l2.test.ts` ([#5443](#5443)) ([2db9cad](2db9cad)) * **avm-simulator:** Hashing opcodes indirection ([#5376](#5376)) ([a4b1ebc](a4b1ebc)) * Broadcasting unconstrained function with empty sibling ([#5429](#5429)) ([933145e](933145e)) * **ci:** Disable uniswap test in earthly build ([#5344](#5344)) ([0d69162](0d69162)) * **cli:** Support initializers not named constructor in cli ([#5397](#5397)) ([85f14c5](85f14c5)) * Copy and deploy complete contents of l1-contracts ([#5447](#5447)) ([501c5e9](501c5e9)) * Don't cancel protocol-circuits-gate-diff in master ([#5441](#5441)) ([6894a78](6894a78)) * E2e_static_calls.test.ts bad merge ([#5405](#5405)) ([4c56536](4c56536)) * Generate noir interface for constructors ([#5352](#5352)) ([8434d2f](8434d2f)) * Limit earthly to few users ([#5375](#5375)) ([71e8ab4](71e8ab4)) * Login to dockerhub before 'docker compose' ([#5440](#5440)) ([4f7696b](4f7696b)) * Revert cbind breakage ([#5348](#5348)) ([c237193](c237193)) * **ssa:** Use accurate type during SSA AsSlice simplficiation (noir-lang/noir#4610) ([13a12d5](13a12d5)) * Track class registered count in tx stats ([#5417](#5417)) ([ff8eafc](ff8eafc)) * Watch command should not spawn more than one tsc watch ([#5391](#5391)) ([25caf4d](25caf4d)) ### Miscellaneous * Always use serialize function to get hash preimage in noir circuits or when comparing structs etc [#3595](#3595) ([#5439](#5439)) ([22e0f0d](22e0f0d)) * **aztec-nr:** Unify contexts behind interfaces ([#5294](#5294)) ([36e0f59](36e0f59)) * **bb:** Removed powers of eta in lookup and auxiliary relations ([#4695](#4695)) ([f4e62ae](f4e62ae)) * CamelCase in noir-projects -> snake_case ([#5381](#5381)) ([eea711f](eea711f)) * **ci:** Create a dedicated job for the AVM unit tests ([#5369](#5369)) ([59ca2ac](59ca2ac)), closes [#5366](#5366) * Clean out prover instance and remove instance from oink ([#5314](#5314)) ([a83368c](a83368c)) * Cleaning up messaging types ([#5442](#5442)) ([dfffe5d](dfffe5d)), closes [#5420](#5420) * Compute registerer address on the fly ([#5394](#5394)) ([5d669b9](5d669b9)) * Delete slither output from version control ([#5393](#5393)) ([41107e3](41107e3)) * Fix migration notes ([#5452](#5452)) ([8c4e576](8c4e576)) * **github:** Improve PR template "document later" checkbox description (noir-lang/noir#4625) ([13a12d5](13a12d5)) * Make get_notes fail if returning no notes [#4988](#4988) ([#5320](#5320)) ([be86ed3](be86ed3)) * Meld flavor and and circuit builder modules ([#5406](#5406)) ([f0d9d1b](f0d9d1b)) * Messaging naming fixes ([#5383](#5383)) ([0226102](0226102)) * Moving public inputs back to instance ([#5315](#5315)) ([9cbe368](9cbe368)) * Name change: gen perm sort to delta range constraint ([#5378](#5378)) ([841855f](841855f)) * Nuking l1 to l2 messages from block body ([#5272](#5272)) ([ee176d2](ee176d2)), closes [#5072](#5072) * Reduce size of revert code from Field to u8 ([#5309](#5309)) ([1868e25](1868e25)) * Remove mocking function in `EccOpQueue` again ([#5413](#5413)) ([6fb4a75](6fb4a75)) * Remove snapshots from protocol-contracts ([#5342](#5342)) ([31ca344](31ca344)) * Remove unused FunctionLeafPreimage struct ([#5354](#5354)) ([dc51c2b](dc51c2b)) * Rename reverted to revertCode ([#5301](#5301)) ([950a96d](950a96d)) * Replace relative paths to noir-protocol-circuits ([262ae02](262ae02)) * Replace relative paths to noir-protocol-circuits ([91a60db](91a60db)) * Replace relative paths to noir-protocol-circuits ([9fc9fbd](9fc9fbd)) * Replace relative paths to noir-protocol-circuits ([9939e99](9939e99)) * Replace relative paths to noir-protocol-circuits ([0b24aae](0b24aae)) * Replace relative paths to noir-protocol-circuits ([c4d89d5](c4d89d5)) * Reverting accidental changes ([#5371](#5371)) ([c1484ce](c1484ce)) * Skip foundry install if possible ([#5398](#5398)) ([060fa1e](060fa1e)) * Skip slither in docker ([#5384](#5384)) ([8a76068](8a76068)) * Update docs with function names to match version 0.25.0 specifications (noir-lang/noir#4466) ([13a12d5](13a12d5)) * Update integers.md to note support for Fields using `from_integer` (noir-lang/noir#4536) ([13a12d5](13a12d5)) * Update min compiler version of contracts ([#5305](#5305)) ([dcf6bb3](dcf6bb3)) * Use random tmp directory and cleanup afterwards ([#5368](#5368)) ([5c0e15d](5c0e15d)) ### Documentation * Update versions-updating.md ([#5358](#5358)) ([0f09b63](0f09b63)) </details> <details><summary>barretenberg: 0.31.0</summary> ## [0.31.0](barretenberg-v0.30.1...barretenberg-v0.31.0) (2024-03-26) ### Features * Avm lookup and/or/xor ([#5338](#5338)) ([489bc2c](489bc2c)) * Earthly bb tests + arm + satellites ([#5268](#5268)) ([eca12b3](eca12b3)) * Fold proving key polys instead of prover polys ([#5436](#5436)) ([239ebfb](239ebfb)) * Less earthly runners + e2e GA runners, bb bench ([#5356](#5356)) ([2136a66](2136a66)) * Read_calldata ([#5409](#5409)) ([034fbf0](034fbf0)) * Simplified bb Honk interface ([#5319](#5319)) ([a2d138f](a2d138f)) * Simplify offsets and sizing using new block structure ([#5404](#5404)) ([efa0842](efa0842)) * Unified CircuitChecker interface ([#5343](#5343)) ([13cef1f](13cef1f)) * ZeroMorph working with IPA and integration with ECCVM ([#5246](#5246)) ([c4dce94](c4dce94)) ### Bug Fixes * Revert cbind breakage ([#5348](#5348)) ([c237193](c237193)) ### Miscellaneous * **bb:** Removed powers of eta in lookup and auxiliary relations ([#4695](#4695)) ([f4e62ae](f4e62ae)) * **ci:** Create a dedicated job for the AVM unit tests ([#5369](#5369)) ([59ca2ac](59ca2ac)), closes [#5366](#5366) * Clean out prover instance and remove instance from oink ([#5314](#5314)) ([a83368c](a83368c)) * Meld flavor and and circuit builder modules ([#5406](#5406)) ([f0d9d1b](f0d9d1b)) * Moving public inputs back to instance ([#5315](#5315)) ([9cbe368](9cbe368)) * Name change: gen perm sort to delta range constraint ([#5378](#5378)) ([841855f](841855f)) * Remove mocking function in `EccOpQueue` again ([#5413](#5413)) ([6fb4a75](6fb4a75)) </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.31.0</summary> ## [0.31.0](AztecProtocol/aztec-packages@aztec-package-v0.30.1...aztec-package-v0.31.0) (2024-03-26) ### Features * Add batched signerless contract calls ([#5313](AztecProtocol/aztec-packages#5313)) ([be60eb3](AztecProtocol/aztec-packages@be60eb3)) * Dynamic proving ([#5346](AztecProtocol/aztec-packages#5346)) ([6a7ccca](AztecProtocol/aztec-packages@6a7ccca)) * Less earthly runners + e2e GA runners, bb bench ([#5356](AztecProtocol/aztec-packages#5356)) ([2136a66](AztecProtocol/aztec-packages@2136a66)) </details> <details><summary>barretenberg.js: 0.31.0</summary> ## [0.31.0](AztecProtocol/aztec-packages@barretenberg.js-v0.30.1...barretenberg.js-v0.31.0) (2024-03-26) ### Features * Earthly bb tests + arm + satellites ([#5268](AztecProtocol/aztec-packages#5268)) ([eca12b3](AztecProtocol/aztec-packages@eca12b3)) * Less earthly runners + e2e GA runners, bb bench ([#5356](AztecProtocol/aztec-packages#5356)) ([2136a66](AztecProtocol/aztec-packages@2136a66)) * Simplified bb Honk interface ([#5319](AztecProtocol/aztec-packages#5319)) ([a2d138f](AztecProtocol/aztec-packages@a2d138f)) </details> <details><summary>aztec-cli: 0.31.0</summary> ## [0.31.0](AztecProtocol/aztec-packages@aztec-cli-v0.30.1...aztec-cli-v0.31.0) (2024-03-26) ### Features * Capture broadcasted functions in node ([#5353](AztecProtocol/aztec-packages#5353)) ([bc05db2](AztecProtocol/aztec-packages@bc05db2)) ### Bug Fixes * **cli:** Support initializers not named constructor in cli ([#5397](AztecProtocol/aztec-packages#5397)) ([85f14c5](AztecProtocol/aztec-packages@85f14c5)) </details> <details><summary>aztec-packages: 0.31.0</summary> ## [0.31.0](AztecProtocol/aztec-packages@aztec-packages-v0.30.1...aztec-packages-v0.31.0) (2024-03-26) ### ⚠ BREAKING CHANGES * **avm:** per function avm run ([#5421](AztecProtocol/aztec-packages#5421)) * rename storage inclusion proof to historical storage read ([#5379](AztecProtocol/aztec-packages#5379)) * plug-in new outbox and update examples to use api to fetch inclusion proofs #4769 ([#5292](AztecProtocol/aztec-packages#5292)) * Mark transactions as reverted on L1 ([#5226](AztecProtocol/aztec-packages#5226)) ### Features * Add batched signerless contract calls ([#5313](AztecProtocol/aztec-packages#5313)) ([be60eb3](AztecProtocol/aztec-packages@be60eb3)) * Add specific error for attempting `string[x] = ".."` (noir-lang/noir#4611) ([13a12d5](AztecProtocol/aztec-packages@13a12d5)) * **AuthWit:** Chain_id and version in hash ([#5331](AztecProtocol/aztec-packages#5331)) ([5235c95](AztecProtocol/aztec-packages@5235c95)) * **Authwit:** Lookup the validity of authwits ([#5316](AztecProtocol/aztec-packages#5316)) ([7c24870](AztecProtocol/aztec-packages@7c24870)) * Avm lookup and/or/xor ([#5338](AztecProtocol/aztec-packages#5338)) ([489bc2c](AztecProtocol/aztec-packages@489bc2c)) * **avm:** Add AvmContextInputs ([#5396](AztecProtocol/aztec-packages#5396)) ([12e2844](AztecProtocol/aztec-packages@12e2844)) * **avm:** Per function avm run ([#5421](AztecProtocol/aztec-packages#5421)) ([f024751](AztecProtocol/aztec-packages@f024751)) * **avm:** Track gas usage in AVM simulator ([#5438](AztecProtocol/aztec-packages#5438)) ([4884d83](AztecProtocol/aztec-packages@4884d83)) * Capture broadcasted functions in node ([#5353](AztecProtocol/aztec-packages#5353)) ([bc05db2](AztecProtocol/aztec-packages@bc05db2)) * Dynamic proving ([#5346](AztecProtocol/aztec-packages#5346)) ([6a7ccca](AztecProtocol/aztec-packages@6a7ccca)) * Earthly bb tests + arm + satellites ([#5268](AztecProtocol/aztec-packages#5268)) ([eca12b3](AztecProtocol/aztec-packages@eca12b3)) * Fix awkward snippet indention in docs ([#5367](AztecProtocol/aztec-packages#5367)) ([c55d3da](AztecProtocol/aztec-packages@c55d3da)) * Fold proving key polys instead of prover polys ([#5436](AztecProtocol/aztec-packages#5436)) ([239ebfb](AztecProtocol/aztec-packages@239ebfb)) * Implement serdes for u64 [#4990](AztecProtocol/aztec-packages#4990) ([#5411](AztecProtocol/aztec-packages#5411)) ([5a6bcef](AztecProtocol/aztec-packages@5a6bcef)) * Introduce max_block_number ([#5251](AztecProtocol/aztec-packages#5251)) ([6573173](AztecProtocol/aztec-packages@6573173)) * Less earthly runners + e2e GA runners, bb bench ([#5356](AztecProtocol/aztec-packages#5356)) ([2136a66](AztecProtocol/aztec-packages@2136a66)) * Mark transactions as reverted on L1 ([#5226](AztecProtocol/aztec-packages#5226)) ([40ecc02](AztecProtocol/aztec-packages@40ecc02)) * Plug-in new outbox and update examples to use api to fetch inclusion proofs [#4769](AztecProtocol/aztec-packages#4769) ([#5292](AztecProtocol/aztec-packages#5292)) ([fec1008](AztecProtocol/aztec-packages@fec1008)) * Read_calldata ([#5409](AztecProtocol/aztec-packages#5409)) ([034fbf0](AztecProtocol/aztec-packages@034fbf0)) * Remove NUM_FIELDS_PER_SHA256 ([#5392](AztecProtocol/aztec-packages#5392)) ([86a181b](AztecProtocol/aztec-packages@86a181b)) * Rename storage inclusion proof to historical storage read ([#5379](AztecProtocol/aztec-packages#5379)) ([b6e7216](AztecProtocol/aztec-packages@b6e7216)) * Returning non-nullified messages only ([#5390](AztecProtocol/aztec-packages#5390)) ([4c671be](AztecProtocol/aztec-packages@4c671be)) * Simplified bb Honk interface ([#5319](AztecProtocol/aztec-packages#5319)) ([a2d138f](AztecProtocol/aztec-packages@a2d138f)) * Simplify offsets and sizing using new block structure ([#5404](AztecProtocol/aztec-packages#5404)) ([efa0842](AztecProtocol/aztec-packages@efa0842)) * Throw by default when awaiting a tx that reverted ([#5431](AztecProtocol/aztec-packages#5431)) ([c9113ec](AztecProtocol/aztec-packages@c9113ec)) * Truncate SHA hashes inside circuits ([#5160](AztecProtocol/aztec-packages#5160)) ([9dc0d2a](AztecProtocol/aztec-packages@9dc0d2a)) * Unified CircuitChecker interface ([#5343](AztecProtocol/aztec-packages#5343)) ([13cef1f](AztecProtocol/aztec-packages@13cef1f)) * ZeroMorph working with IPA and integration with ECCVM ([#5246](AztecProtocol/aztec-packages#5246)) ([c4dce94](AztecProtocol/aztec-packages@c4dce94)) ### Bug Fixes * Addressing flakiness of `uniswap_trade_on_l1_from_l2.test.ts` ([#5443](AztecProtocol/aztec-packages#5443)) ([2db9cad](AztecProtocol/aztec-packages@2db9cad)) * **avm-simulator:** Hashing opcodes indirection ([#5376](AztecProtocol/aztec-packages#5376)) ([a4b1ebc](AztecProtocol/aztec-packages@a4b1ebc)) * Broadcasting unconstrained function with empty sibling ([#5429](AztecProtocol/aztec-packages#5429)) ([933145e](AztecProtocol/aztec-packages@933145e)) * **ci:** Disable uniswap test in earthly build ([#5344](AztecProtocol/aztec-packages#5344)) ([0d69162](AztecProtocol/aztec-packages@0d69162)) * **cli:** Support initializers not named constructor in cli ([#5397](AztecProtocol/aztec-packages#5397)) ([85f14c5](AztecProtocol/aztec-packages@85f14c5)) * Copy and deploy complete contents of l1-contracts ([#5447](AztecProtocol/aztec-packages#5447)) ([501c5e9](AztecProtocol/aztec-packages@501c5e9)) * Don't cancel protocol-circuits-gate-diff in master ([#5441](AztecProtocol/aztec-packages#5441)) ([6894a78](AztecProtocol/aztec-packages@6894a78)) * E2e_static_calls.test.ts bad merge ([#5405](AztecProtocol/aztec-packages#5405)) ([4c56536](AztecProtocol/aztec-packages@4c56536)) * Generate noir interface for constructors ([#5352](AztecProtocol/aztec-packages#5352)) ([8434d2f](AztecProtocol/aztec-packages@8434d2f)) * Limit earthly to few users ([#5375](AztecProtocol/aztec-packages#5375)) ([71e8ab4](AztecProtocol/aztec-packages@71e8ab4)) * Login to dockerhub before 'docker compose' ([#5440](AztecProtocol/aztec-packages#5440)) ([4f7696b](AztecProtocol/aztec-packages@4f7696b)) * Revert cbind breakage ([#5348](AztecProtocol/aztec-packages#5348)) ([c237193](AztecProtocol/aztec-packages@c237193)) * **ssa:** Use accurate type during SSA AsSlice simplficiation (noir-lang/noir#4610) ([13a12d5](AztecProtocol/aztec-packages@13a12d5)) * Track class registered count in tx stats ([#5417](AztecProtocol/aztec-packages#5417)) ([ff8eafc](AztecProtocol/aztec-packages@ff8eafc)) * Watch command should not spawn more than one tsc watch ([#5391](AztecProtocol/aztec-packages#5391)) ([25caf4d](AztecProtocol/aztec-packages@25caf4d)) ### Miscellaneous * Always use serialize function to get hash preimage in noir circuits or when comparing structs etc [#3595](AztecProtocol/aztec-packages#3595) ([#5439](AztecProtocol/aztec-packages#5439)) ([22e0f0d](AztecProtocol/aztec-packages@22e0f0d)) * **aztec-nr:** Unify contexts behind interfaces ([#5294](AztecProtocol/aztec-packages#5294)) ([36e0f59](AztecProtocol/aztec-packages@36e0f59)) * **bb:** Removed powers of eta in lookup and auxiliary relations ([#4695](AztecProtocol/aztec-packages#4695)) ([f4e62ae](AztecProtocol/aztec-packages@f4e62ae)) * CamelCase in noir-projects -> snake_case ([#5381](AztecProtocol/aztec-packages#5381)) ([eea711f](AztecProtocol/aztec-packages@eea711f)) * **ci:** Create a dedicated job for the AVM unit tests ([#5369](AztecProtocol/aztec-packages#5369)) ([59ca2ac](AztecProtocol/aztec-packages@59ca2ac)), closes [#5366](AztecProtocol/aztec-packages#5366) * Clean out prover instance and remove instance from oink ([#5314](AztecProtocol/aztec-packages#5314)) ([a83368c](AztecProtocol/aztec-packages@a83368c)) * Cleaning up messaging types ([#5442](AztecProtocol/aztec-packages#5442)) ([dfffe5d](AztecProtocol/aztec-packages@dfffe5d)), closes [#5420](AztecProtocol/aztec-packages#5420) * Compute registerer address on the fly ([#5394](AztecProtocol/aztec-packages#5394)) ([5d669b9](AztecProtocol/aztec-packages@5d669b9)) * Delete slither output from version control ([#5393](AztecProtocol/aztec-packages#5393)) ([41107e3](AztecProtocol/aztec-packages@41107e3)) * Fix migration notes ([#5452](AztecProtocol/aztec-packages#5452)) ([8c4e576](AztecProtocol/aztec-packages@8c4e576)) * **github:** Improve PR template "document later" checkbox description (noir-lang/noir#4625) ([13a12d5](AztecProtocol/aztec-packages@13a12d5)) * Make get_notes fail if returning no notes [#4988](AztecProtocol/aztec-packages#4988) ([#5320](AztecProtocol/aztec-packages#5320)) ([be86ed3](AztecProtocol/aztec-packages@be86ed3)) * Meld flavor and and circuit builder modules ([#5406](AztecProtocol/aztec-packages#5406)) ([f0d9d1b](AztecProtocol/aztec-packages@f0d9d1b)) * Messaging naming fixes ([#5383](AztecProtocol/aztec-packages#5383)) ([0226102](AztecProtocol/aztec-packages@0226102)) * Moving public inputs back to instance ([#5315](AztecProtocol/aztec-packages#5315)) ([9cbe368](AztecProtocol/aztec-packages@9cbe368)) * Name change: gen perm sort to delta range constraint ([#5378](AztecProtocol/aztec-packages#5378)) ([841855f](AztecProtocol/aztec-packages@841855f)) * Nuking l1 to l2 messages from block body ([#5272](AztecProtocol/aztec-packages#5272)) ([ee176d2](AztecProtocol/aztec-packages@ee176d2)), closes [#5072](AztecProtocol/aztec-packages#5072) * Reduce size of revert code from Field to u8 ([#5309](AztecProtocol/aztec-packages#5309)) ([1868e25](AztecProtocol/aztec-packages@1868e25)) * Remove mocking function in `EccOpQueue` again ([#5413](AztecProtocol/aztec-packages#5413)) ([6fb4a75](AztecProtocol/aztec-packages@6fb4a75)) * Remove snapshots from protocol-contracts ([#5342](AztecProtocol/aztec-packages#5342)) ([31ca344](AztecProtocol/aztec-packages@31ca344)) * Remove unused FunctionLeafPreimage struct ([#5354](AztecProtocol/aztec-packages#5354)) ([dc51c2b](AztecProtocol/aztec-packages@dc51c2b)) * Rename reverted to revertCode ([#5301](AztecProtocol/aztec-packages#5301)) ([950a96d](AztecProtocol/aztec-packages@950a96d)) * Replace relative paths to noir-protocol-circuits ([262ae02](AztecProtocol/aztec-packages@262ae02)) * Replace relative paths to noir-protocol-circuits ([91a60db](AztecProtocol/aztec-packages@91a60db)) * Replace relative paths to noir-protocol-circuits ([9fc9fbd](AztecProtocol/aztec-packages@9fc9fbd)) * Replace relative paths to noir-protocol-circuits ([9939e99](AztecProtocol/aztec-packages@9939e99)) * Replace relative paths to noir-protocol-circuits ([0b24aae](AztecProtocol/aztec-packages@0b24aae)) * Replace relative paths to noir-protocol-circuits ([c4d89d5](AztecProtocol/aztec-packages@c4d89d5)) * Reverting accidental changes ([#5371](AztecProtocol/aztec-packages#5371)) ([c1484ce](AztecProtocol/aztec-packages@c1484ce)) * Skip foundry install if possible ([#5398](AztecProtocol/aztec-packages#5398)) ([060fa1e](AztecProtocol/aztec-packages@060fa1e)) * Skip slither in docker ([#5384](AztecProtocol/aztec-packages#5384)) ([8a76068](AztecProtocol/aztec-packages@8a76068)) * Update docs with function names to match version 0.25.0 specifications (noir-lang/noir#4466) ([13a12d5](AztecProtocol/aztec-packages@13a12d5)) * Update integers.md to note support for Fields using `from_integer` (noir-lang/noir#4536) ([13a12d5](AztecProtocol/aztec-packages@13a12d5)) * Update min compiler version of contracts ([#5305](AztecProtocol/aztec-packages#5305)) ([dcf6bb3](AztecProtocol/aztec-packages@dcf6bb3)) * Use random tmp directory and cleanup afterwards ([#5368](AztecProtocol/aztec-packages#5368)) ([5c0e15d](AztecProtocol/aztec-packages@5c0e15d)) ### Documentation * Update versions-updating.md ([#5358](AztecProtocol/aztec-packages#5358)) ([0f09b63](AztecProtocol/aztec-packages@0f09b63)) </details> <details><summary>barretenberg: 0.31.0</summary> ## [0.31.0](AztecProtocol/aztec-packages@barretenberg-v0.30.1...barretenberg-v0.31.0) (2024-03-26) ### Features * Avm lookup and/or/xor ([#5338](AztecProtocol/aztec-packages#5338)) ([489bc2c](AztecProtocol/aztec-packages@489bc2c)) * Earthly bb tests + arm + satellites ([#5268](AztecProtocol/aztec-packages#5268)) ([eca12b3](AztecProtocol/aztec-packages@eca12b3)) * Fold proving key polys instead of prover polys ([#5436](AztecProtocol/aztec-packages#5436)) ([239ebfb](AztecProtocol/aztec-packages@239ebfb)) * Less earthly runners + e2e GA runners, bb bench ([#5356](AztecProtocol/aztec-packages#5356)) ([2136a66](AztecProtocol/aztec-packages@2136a66)) * Read_calldata ([#5409](AztecProtocol/aztec-packages#5409)) ([034fbf0](AztecProtocol/aztec-packages@034fbf0)) * Simplified bb Honk interface ([#5319](AztecProtocol/aztec-packages#5319)) ([a2d138f](AztecProtocol/aztec-packages@a2d138f)) * Simplify offsets and sizing using new block structure ([#5404](AztecProtocol/aztec-packages#5404)) ([efa0842](AztecProtocol/aztec-packages@efa0842)) * Unified CircuitChecker interface ([#5343](AztecProtocol/aztec-packages#5343)) ([13cef1f](AztecProtocol/aztec-packages@13cef1f)) * ZeroMorph working with IPA and integration with ECCVM ([#5246](AztecProtocol/aztec-packages#5246)) ([c4dce94](AztecProtocol/aztec-packages@c4dce94)) ### Bug Fixes * Revert cbind breakage ([#5348](AztecProtocol/aztec-packages#5348)) ([c237193](AztecProtocol/aztec-packages@c237193)) ### Miscellaneous * **bb:** Removed powers of eta in lookup and auxiliary relations ([#4695](AztecProtocol/aztec-packages#4695)) ([f4e62ae](AztecProtocol/aztec-packages@f4e62ae)) * **ci:** Create a dedicated job for the AVM unit tests ([#5369](AztecProtocol/aztec-packages#5369)) ([59ca2ac](AztecProtocol/aztec-packages@59ca2ac)), closes [#5366](AztecProtocol/aztec-packages#5366) * Clean out prover instance and remove instance from oink ([#5314](AztecProtocol/aztec-packages#5314)) ([a83368c](AztecProtocol/aztec-packages@a83368c)) * Meld flavor and and circuit builder modules ([#5406](AztecProtocol/aztec-packages#5406)) ([f0d9d1b](AztecProtocol/aztec-packages@f0d9d1b)) * Moving public inputs back to instance ([#5315](AztecProtocol/aztec-packages#5315)) ([9cbe368](AztecProtocol/aztec-packages@9cbe368)) * Name change: gen perm sort to delta range constraint ([#5378](AztecProtocol/aztec-packages#5378)) ([841855f](AztecProtocol/aztec-packages@841855f)) * Remove mocking function in `EccOpQueue` again ([#5413](AztecProtocol/aztec-packages#5413)) ([6fb4a75](AztecProtocol/aztec-packages@6fb4a75)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Fixes #4822.
The current solution is pretty ugly (I think).
The issues encountered is mainly that:
The latter is the main trouble. It can be somewhat mitigated by having a function on the typescript side of things that try doing the lookup in its local storage first to not encounter that case, but then we need to be able to split the check so seems a bit meh to fix it that way.
This means that the unconstrained cannot really be used nicely as what @spalladino did at the offsite, but mainly is an off-chain thing for the user who is unsure if something was approved and want to check it.
I'm not really sure if I like to have the implementation this way where we are doing things in both ts and noir to get it somewhat working, but seems like the thing that is making it the easiest to get a query going fast.