@aztec/pxe 0.0.1-commit.f504929 → 0.0.1-commit.f650c0a5c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +1 -1
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +6 -0
  5. package/dest/config/index.d.ts +2 -2
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +1 -1
  8. package/dest/contract_function_simulator/contract_function_simulator.d.ts +10 -5
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  10. package/dest/contract_function_simulator/contract_function_simulator.js +29 -6
  11. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  12. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  13. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  14. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.js +17 -9
  17. package/dest/contract_function_simulator/index.d.ts +2 -1
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -0
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  23. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  26. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  28. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
  31. package/dest/contract_function_simulator/oracle/interfaces.d.ts +38 -22
  32. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  34. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  35. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  36. package/dest/contract_function_simulator/oracle/oracle.d.ts +51 -20
  37. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  38. package/dest/contract_function_simulator/oracle/oracle.js +188 -46
  39. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  40. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +12 -38
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +21 -44
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +76 -41
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +258 -87
  46. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  47. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/pick_notes.js +9 -2
  49. package/dest/contract_logging.d.ts +9 -4
  50. package/dest/contract_logging.d.ts.map +1 -1
  51. package/dest/contract_logging.js +21 -6
  52. package/dest/contract_sync/contract_sync_service.d.ts +6 -5
  53. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  54. package/dest/contract_sync/contract_sync_service.js +44 -37
  55. package/dest/contract_sync/helpers.d.ts +2 -3
  56. package/dest/contract_sync/helpers.d.ts.map +1 -1
  57. package/dest/contract_sync/helpers.js +7 -2
  58. package/dest/debug/pxe_debug_utils.d.ts +3 -3
  59. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  60. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  61. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  62. package/dest/entrypoints/client/bundle/index.js +0 -1
  63. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  64. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  65. package/dest/entrypoints/client/bundle/utils.js +2 -2
  66. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  67. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  68. package/dest/entrypoints/client/lazy/index.js +0 -1
  69. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  70. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  71. package/dest/entrypoints/client/lazy/utils.js +2 -2
  72. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  73. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  74. package/dest/entrypoints/pxe_creation_options.js +3 -1
  75. package/dest/entrypoints/server/index.d.ts +2 -3
  76. package/dest/entrypoints/server/index.d.ts.map +1 -1
  77. package/dest/entrypoints/server/index.js +1 -2
  78. package/dest/entrypoints/server/utils.d.ts +2 -2
  79. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  80. package/dest/entrypoints/server/utils.js +2 -2
  81. package/dest/events/event_service.d.ts +3 -2
  82. package/dest/events/event_service.d.ts.map +1 -1
  83. package/dest/events/event_service.js +16 -4
  84. package/dest/logs/log_service.d.ts +5 -8
  85. package/dest/logs/log_service.d.ts.map +1 -1
  86. package/dest/logs/log_service.js +24 -37
  87. package/dest/messages/message_context_service.d.ts +17 -0
  88. package/dest/messages/message_context_service.d.ts.map +1 -0
  89. package/dest/messages/message_context_service.js +36 -0
  90. package/dest/notes/note_service.d.ts +4 -5
  91. package/dest/notes/note_service.d.ts.map +1 -1
  92. package/dest/notes/note_service.js +14 -5
  93. package/dest/notes_filter.d.ts +2 -3
  94. package/dest/notes_filter.d.ts.map +1 -1
  95. package/dest/oracle_version.d.ts +4 -3
  96. package/dest/oracle_version.d.ts.map +1 -1
  97. package/dest/oracle_version.js +20 -10
  98. package/dest/pxe.d.ts +9 -7
  99. package/dest/pxe.d.ts.map +1 -1
  100. package/dest/pxe.js +39 -23
  101. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  102. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  103. package/dest/storage/capsule_store/capsule_service.js +50 -0
  104. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  105. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  106. package/dest/storage/capsule_store/capsule_store.js +33 -28
  107. package/dest/storage/capsule_store/index.d.ts +2 -1
  108. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  109. package/dest/storage/capsule_store/index.js +1 -0
  110. package/dest/storage/metadata.d.ts +1 -1
  111. package/dest/storage/metadata.js +1 -1
  112. package/dest/storage/note_store/note_store.d.ts +1 -1
  113. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  114. package/dest/storage/note_store/note_store.js +2 -2
  115. package/dest/storage/tagging_store/sender_tagging_store.d.ts +26 -25
  116. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  117. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  118. package/dest/tagging/index.d.ts +2 -2
  119. package/dest/tagging/index.d.ts.map +1 -1
  120. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +1 -1
  121. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  122. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +10 -1
  123. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  124. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  125. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  126. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +2 -1
  127. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  128. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +24 -11
  129. package/package.json +16 -16
  130. package/src/bin/check_oracle_version.ts +4 -4
  131. package/src/block_synchronizer/block_synchronizer.ts +6 -0
  132. package/src/config/index.ts +1 -1
  133. package/src/contract_function_simulator/contract_function_simulator.ts +42 -10
  134. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  135. package/src/contract_function_simulator/execution_tagging_index_cache.ts +16 -11
  136. package/src/contract_function_simulator/index.ts +1 -0
  137. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  138. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  139. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  140. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  141. package/src/contract_function_simulator/oracle/interfaces.ts +58 -30
  142. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  143. package/src/contract_function_simulator/oracle/oracle.ts +262 -66
  144. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  145. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +26 -65
  146. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +431 -117
  147. package/src/contract_function_simulator/pick_notes.ts +9 -2
  148. package/src/contract_logging.ts +18 -5
  149. package/src/contract_sync/contract_sync_service.ts +77 -59
  150. package/src/contract_sync/helpers.ts +4 -4
  151. package/src/debug/pxe_debug_utils.ts +3 -3
  152. package/src/entrypoints/client/bundle/index.ts +0 -1
  153. package/src/entrypoints/client/bundle/utils.ts +2 -3
  154. package/src/entrypoints/client/lazy/index.ts +0 -1
  155. package/src/entrypoints/client/lazy/utils.ts +2 -3
  156. package/src/entrypoints/pxe_creation_options.ts +7 -0
  157. package/src/entrypoints/server/index.ts +1 -2
  158. package/src/entrypoints/server/utils.ts +2 -3
  159. package/src/events/event_service.ts +17 -4
  160. package/src/logs/log_service.ts +52 -78
  161. package/src/messages/message_context_service.ts +44 -0
  162. package/src/notes/note_service.ts +18 -8
  163. package/src/notes_filter.ts +1 -3
  164. package/src/oracle_version.ts +20 -10
  165. package/src/pxe.ts +62 -28
  166. package/src/storage/capsule_store/capsule_service.ts +90 -0
  167. package/src/storage/capsule_store/capsule_store.ts +34 -26
  168. package/src/storage/capsule_store/index.ts +1 -0
  169. package/src/storage/metadata.ts +1 -1
  170. package/src/storage/note_store/note_store.ts +2 -5
  171. package/src/storage/tagging_store/sender_tagging_store.ts +182 -135
  172. package/src/tagging/index.ts +1 -1
  173. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +19 -1
  174. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  175. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +19 -9
  176. package/dest/access_scopes.d.ts +0 -9
  177. package/dest/access_scopes.d.ts.map +0 -1
  178. package/dest/access_scopes.js +0 -6
  179. package/src/access_scopes.ts +0 -9
@@ -15,7 +15,9 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
15
  import { BlockHash } from '@aztec/stdlib/block';
16
16
  import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
17
17
 
18
+ import { ORACLE_VERSION_MAJOR, ORACLE_VERSION_MINOR } from '../../oracle_version.js';
18
19
  import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
20
+ import { buildLegacyOracleCallbacks } from './legacy_oracle_mappings.js';
19
21
  import { packAsHintedNote } from './note_packing_utils.js';
20
22
 
21
23
  export class UnavailableOracleError extends Error {
@@ -26,6 +28,25 @@ export class UnavailableOracleError extends Error {
26
28
 
27
29
  /**
28
30
  * A data source that has all the apis required by Aztec.nr.
31
+ *
32
+ * ## Oracle naming conventions
33
+ *
34
+ * We try to keep oracle naming consistent, please see below the conventions we adhere to.
35
+ *
36
+ * Each oracle method name has the form `aztec_{scope}_{verb}{Object}`, where:
37
+ *
38
+ * - **Scope prefix** indicates the execution context required:
39
+ * - `aztec_prv_` — available only during private function execution.
40
+ * - `aztec_utl_` — available during both utility and private execution.
41
+ *
42
+ * - **Verb** signals the operation's semantics (verb-first, then object):
43
+ * - `get` — read / lookup / get data from oracle into contract.
44
+ * - `does`/`is`/`has` — predicate (returns boolean).
45
+ * - `emit`/`notify` — propagate data from contract to oracle.
46
+ * - `set` — contract driven oracle state mutation (capsules, execution cache, tagging, etc).
47
+ * - `call` — trigger nested execution (control flow).
48
+ * - `assert` — validate a condition, throw on failure.
49
+ * - Standalone verbs (`delete`, `copy`, `decrypt`, `log`, etc) are used when no generic verb fits.
29
50
  */
30
51
  export class Oracle {
31
52
  constructor(private handler: IMiscOracle | IUtilityExecutionOracle | IPrivateExecutionOracle) {}
@@ -85,16 +106,73 @@ export class Oracle {
85
106
  });
86
107
 
87
108
  // Build callback object and return it
88
- return oracleNames.reduce((acc, name) => {
109
+ const callback = oracleNames.reduce((acc, name) => {
89
110
  const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
90
111
  acc[name] = method.bind(this);
91
112
  return acc;
92
113
  }, {} as ACIRCallback);
114
+
115
+ const allCallbacks = { ...callback, ...buildLegacyOracleCallbacks(this) };
116
+
117
+ // Wrap in a Proxy to intercept access to missing oracle names and provide enhanced error messages when the
118
+ // contract's minor version is higher than the PXE's (i.e. the contract expects oracles that were added in a newer
119
+ // minor version).
120
+ const handler = this.handler;
121
+ return new Proxy(allCallbacks, {
122
+ get(target, prop: string) {
123
+ if (prop in target) {
124
+ return target[prop];
125
+ }
126
+ // Return a function that throws with an enhanced error message if applicable
127
+ return () => {
128
+ type NonOracleFunctionGetContractOracleVersion = {
129
+ nonOracleFunctionGetContractOracleVersion(): { major: number; minor: number } | undefined;
130
+ };
131
+
132
+ let contractVersion = undefined;
133
+ if ('nonOracleFunctionGetContractOracleVersion' in handler) {
134
+ contractVersion = (
135
+ handler as unknown as NonOracleFunctionGetContractOracleVersion
136
+ ).nonOracleFunctionGetContractOracleVersion();
137
+ }
138
+ if (!contractVersion) {
139
+ throw new Error(
140
+ `Oracle '${prop}' not found and the contract's oracle version is unknown (the version check oracle ` +
141
+ `was not called before '${prop}'). This usually means the contract was not compiled with the ` +
142
+ `#[aztec] macro, which injects the version check as the first oracle call in every private/utility ` +
143
+ `external function. If you're using a custom entry point, ensure assert_compatible_oracle_version() ` +
144
+ `is called before any other oracle calls. See https://docs.aztec.network/errors/8`,
145
+ );
146
+ } else if (contractVersion.minor > ORACLE_VERSION_MINOR) {
147
+ throw new Error(
148
+ `Oracle '${prop}' not found.` +
149
+ ` This usually means the contract requires a newer private execution environment than you have.` +
150
+ ` Upgrade your private execution environment to a compatible version. The contract was compiled with` +
151
+ ` Aztec.nr oracle version ${contractVersion.major}.${contractVersion.minor}, but this private` +
152
+ ` execution environment only supports up to ${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}.` +
153
+ ` See https://docs.aztec.network/errors/8`,
154
+ );
155
+ } else {
156
+ throw new Error(
157
+ `Oracle '${prop}' not found.` +
158
+ ` The contract's oracle version (${contractVersion.major}.${contractVersion.minor}) is compatible` +
159
+ ` with this private execution environment (${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}), so all` +
160
+ ` standard oracles should be available. This could mean the contract was compiled against a modified` +
161
+ ` version of Aztec.nr, or that it references an oracle that does not exist.` +
162
+ ` See https://docs.aztec.network/errors/8`,
163
+ );
164
+ }
165
+ };
166
+ },
167
+ });
93
168
  }
94
169
 
95
170
  // eslint-disable-next-line camelcase
96
- aztec_utl_assertCompatibleOracleVersion([version]: ACVMField[]) {
97
- this.handlerAsMisc().assertCompatibleOracleVersion(Fr.fromString(version).toNumber());
171
+ aztec_utl_assertCompatibleOracleVersionV2([major]: ACVMField[], [minor]: ACVMField[]) {
172
+ this.handlerAsMisc().assertCompatibleOracleVersion(
173
+ Fr.fromString(major).toNumber(),
174
+ Fr.fromString(minor).toNumber(),
175
+ );
98
176
  return Promise.resolve([]);
99
177
  }
100
178
 
@@ -105,14 +183,14 @@ export class Oracle {
105
183
  }
106
184
 
107
185
  // eslint-disable-next-line camelcase
108
- aztec_prv_storeInExecutionCache(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
109
- this.handlerAsPrivate().storeInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
186
+ aztec_prv_setHashPreimage(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
187
+ this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
110
188
  return Promise.resolve([]);
111
189
  }
112
190
 
113
191
  // eslint-disable-next-line camelcase
114
- async aztec_prv_loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
115
- const values = await this.handlerAsPrivate().loadFromExecutionCache(Fr.fromString(returnsHash));
192
+ async aztec_prv_getHashPreimage([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
193
+ const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
116
194
  return [values.map(toACVMField)];
117
195
  }
118
196
 
@@ -249,9 +327,9 @@ export class Oracle {
249
327
  }
250
328
 
251
329
  // eslint-disable-next-line camelcase
252
- async aztec_utl_tryGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
330
+ async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
253
331
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
254
- const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(parsedAddress);
332
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
255
333
 
256
334
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
257
335
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
@@ -377,8 +455,8 @@ export class Oracle {
377
455
  }
378
456
 
379
457
  // eslint-disable-next-line camelcase
380
- async aztec_utl_checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
381
- const exists = await this.handlerAsUtility().checkNullifierExists(Fr.fromString(innerNullifier));
458
+ async aztec_utl_doesNullifierExist([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
459
+ const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
382
460
  return [toACVMField(exists)];
383
461
  }
384
462
 
@@ -397,13 +475,13 @@ export class Oracle {
397
475
  }
398
476
 
399
477
  // eslint-disable-next-line camelcase
400
- async aztec_utl_storageRead(
478
+ async aztec_utl_getFromPublicStorage(
401
479
  [blockHash]: ACVMField[],
402
480
  [contractAddress]: ACVMField[],
403
481
  [startStorageSlot]: ACVMField[],
404
482
  [numberOfElements]: ACVMField[],
405
483
  ): Promise<ACVMField[][]> {
406
- const values = await this.handlerAsUtility().storageRead(
484
+ const values = await this.handlerAsUtility().getFromPublicStorage(
407
485
  BlockHash.fromString(blockHash),
408
486
  new AztecAddress(Fr.fromString(contractAddress)),
409
487
  Fr.fromString(startStorageSlot),
@@ -461,50 +539,20 @@ export class Oracle {
461
539
  }
462
540
 
463
541
  // eslint-disable-next-line camelcase
464
- async aztec_prv_notifyEnqueuedPublicFunctionCall(
465
- [contractAddress]: ACVMField[],
466
- [calldataHash]: ACVMField[],
467
- [sideEffectCounter]: ACVMField[],
468
- [isStaticCall]: ACVMField[],
469
- ): Promise<ACVMField[]> {
470
- await this.handlerAsPrivate().notifyEnqueuedPublicFunctionCall(
471
- AztecAddress.fromString(contractAddress),
472
- Fr.fromString(calldataHash),
473
- Fr.fromString(sideEffectCounter).toNumber(),
474
- Fr.fromString(isStaticCall).toBool(),
475
- );
542
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
543
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
476
544
  return [];
477
545
  }
478
546
 
479
547
  // eslint-disable-next-line camelcase
480
- async aztec_prv_notifySetPublicTeardownFunctionCall(
481
- [contractAddress]: ACVMField[],
482
- [calldataHash]: ACVMField[],
483
- [sideEffectCounter]: ACVMField[],
484
- [isStaticCall]: ACVMField[],
485
- ): Promise<ACVMField[]> {
486
- await this.handlerAsPrivate().notifySetPublicTeardownFunctionCall(
487
- AztecAddress.fromString(contractAddress),
488
- Fr.fromString(calldataHash),
489
- Fr.fromString(sideEffectCounter).toNumber(),
490
- Fr.fromString(isStaticCall).toBool(),
491
- );
492
- return [];
493
- }
494
-
495
- // eslint-disable-next-line camelcase
496
- async aztec_prv_notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
497
- ACVMField[]
498
- > {
499
- await this.handlerAsPrivate().notifySetMinRevertibleSideEffectCounter(
500
- Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
501
- );
548
+ async aztec_prv_notifyRevertiblePhaseStart([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
549
+ await this.handlerAsPrivate().notifyRevertiblePhaseStart(Fr.fromString(minRevertibleSideEffectCounter).toNumber());
502
550
  return Promise.resolve([]);
503
551
  }
504
552
 
505
553
  // eslint-disable-next-line camelcase
506
- async aztec_prv_isSideEffectCounterRevertible([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
507
- const isRevertible = await this.handlerAsPrivate().isSideEffectCounterRevertible(
554
+ async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
555
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
508
556
  Fr.fromString(sideEffectCounter).toNumber(),
509
557
  );
510
558
  return Promise.resolve([toACVMField(isRevertible)]);
@@ -520,63 +568,135 @@ export class Oracle {
520
568
  }
521
569
 
522
570
  // eslint-disable-next-line camelcase
523
- async aztec_utl_fetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
524
- await this.handlerAsUtility().fetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
571
+ async aztec_utl_getPendingTaggedLogs(
572
+ [pendingTaggedLogArrayBaseSlot]: ACVMField[],
573
+ [scope]: ACVMField[],
574
+ ): Promise<ACVMField[]> {
575
+ await this.handlerAsUtility().getPendingTaggedLogs(
576
+ Fr.fromString(pendingTaggedLogArrayBaseSlot),
577
+ AztecAddress.fromString(scope),
578
+ );
525
579
  return [];
526
580
  }
527
581
 
582
+ // eslint-disable-next-line camelcase
583
+ async aztec_utl_getPendingTaggedLogs_v2([scope]: ACVMField[]): Promise<ACVMField[]> {
584
+ const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(AztecAddress.fromString(scope));
585
+ return [toACVMField(slot)];
586
+ }
587
+
528
588
  // eslint-disable-next-line camelcase
529
589
  async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
530
590
  [contractAddress]: ACVMField[],
531
591
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
532
592
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
593
+ [maxNotePackedLen]: ACVMField[],
594
+ [maxEventSerializedLen]: ACVMField[],
595
+ [scope]: ACVMField[],
533
596
  ): Promise<ACVMField[]> {
534
597
  await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
535
598
  AztecAddress.fromString(contractAddress),
536
599
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
537
600
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
601
+ Fr.fromString(maxNotePackedLen).toNumber(),
602
+ Fr.fromString(maxEventSerializedLen).toNumber(),
603
+ AztecAddress.fromString(scope),
538
604
  );
539
605
 
540
606
  return [];
541
607
  }
542
608
 
543
609
  // eslint-disable-next-line camelcase
544
- async aztec_utl_bulkRetrieveLogs(
610
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(
611
+ [noteValidationRequestsArrayBaseSlot]: ACVMField[],
612
+ [eventValidationRequestsArrayBaseSlot]: ACVMField[],
613
+ [maxNotePackedLen]: ACVMField[],
614
+ [maxEventSerializedLen]: ACVMField[],
615
+ [scope]: ACVMField[],
616
+ ): Promise<ACVMField[]> {
617
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(
618
+ Fr.fromString(noteValidationRequestsArrayBaseSlot),
619
+ Fr.fromString(eventValidationRequestsArrayBaseSlot),
620
+ Fr.fromString(maxNotePackedLen).toNumber(),
621
+ Fr.fromString(maxEventSerializedLen).toNumber(),
622
+ AztecAddress.fromString(scope),
623
+ );
624
+ return [];
625
+ }
626
+
627
+ // eslint-disable-next-line camelcase
628
+ async aztec_utl_getLogsByTag(
545
629
  [contractAddress]: ACVMField[],
546
630
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
547
631
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
632
+ [scope]: ACVMField[],
548
633
  ): Promise<ACVMField[]> {
549
- await this.handlerAsUtility().bulkRetrieveLogs(
634
+ await this.handlerAsUtility().getLogsByTag(
550
635
  AztecAddress.fromString(contractAddress),
551
636
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
552
637
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
638
+ AztecAddress.fromString(scope),
639
+ );
640
+ return [];
641
+ }
642
+
643
+ // eslint-disable-next-line camelcase
644
+ async aztec_utl_getMessageContextsByTxHash(
645
+ [contractAddress]: ACVMField[],
646
+ [messageContextRequestsArrayBaseSlot]: ACVMField[],
647
+ [messageContextResponsesArrayBaseSlot]: ACVMField[],
648
+ [scope]: ACVMField[],
649
+ ): Promise<ACVMField[]> {
650
+ await this.handlerAsUtility().getMessageContextsByTxHash(
651
+ AztecAddress.fromString(contractAddress),
652
+ Fr.fromString(messageContextRequestsArrayBaseSlot),
653
+ Fr.fromString(messageContextResponsesArrayBaseSlot),
654
+ AztecAddress.fromString(scope),
553
655
  );
554
656
  return [];
555
657
  }
556
658
 
557
659
  // eslint-disable-next-line camelcase
558
- async aztec_utl_storeCapsule(
660
+ async aztec_utl_getLogsByTag_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
661
+ const responseSlot = await this.handlerAsUtility().getLogsByTagV2(Fr.fromString(requestArrayBaseSlot));
662
+ return [toACVMField(responseSlot)];
663
+ }
664
+
665
+ // eslint-disable-next-line camelcase
666
+ async aztec_utl_getMessageContextsByTxHash_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
667
+ const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(
668
+ Fr.fromString(requestArrayBaseSlot),
669
+ );
670
+ return [toACVMField(responseSlot)];
671
+ }
672
+
673
+ // eslint-disable-next-line camelcase
674
+ aztec_utl_setCapsule(
559
675
  [contractAddress]: ACVMField[],
560
676
  [slot]: ACVMField[],
561
677
  capsule: ACVMField[],
678
+ [scope]: ACVMField[],
562
679
  ): Promise<ACVMField[]> {
563
- await this.handlerAsUtility().storeCapsule(
680
+ this.handlerAsUtility().setCapsule(
564
681
  AztecAddress.fromField(Fr.fromString(contractAddress)),
565
682
  Fr.fromString(slot),
566
683
  capsule.map(Fr.fromString),
684
+ AztecAddress.fromField(Fr.fromString(scope)),
567
685
  );
568
- return [];
686
+ return Promise.resolve([]);
569
687
  }
570
688
 
571
689
  // eslint-disable-next-line camelcase
572
- async aztec_utl_loadCapsule(
690
+ async aztec_utl_getCapsule(
573
691
  [contractAddress]: ACVMField[],
574
692
  [slot]: ACVMField[],
575
693
  [tSize]: ACVMField[],
694
+ [scope]: ACVMField[],
576
695
  ): Promise<(ACVMField | ACVMField[])[]> {
577
- const values = await this.handlerAsUtility().loadCapsule(
696
+ const values = await this.handlerAsUtility().getCapsule(
578
697
  AztecAddress.fromField(Fr.fromString(contractAddress)),
579
698
  Fr.fromString(slot),
699
+ AztecAddress.fromField(Fr.fromString(scope)),
580
700
  );
581
701
 
582
702
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
@@ -591,12 +711,17 @@ export class Oracle {
591
711
  }
592
712
 
593
713
  // eslint-disable-next-line camelcase
594
- async aztec_utl_deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
595
- await this.handlerAsUtility().deleteCapsule(
714
+ aztec_utl_deleteCapsule(
715
+ [contractAddress]: ACVMField[],
716
+ [slot]: ACVMField[],
717
+ [scope]: ACVMField[],
718
+ ): Promise<ACVMField[]> {
719
+ this.handlerAsUtility().deleteCapsule(
596
720
  AztecAddress.fromField(Fr.fromString(contractAddress)),
597
721
  Fr.fromString(slot),
722
+ AztecAddress.fromField(Fr.fromString(scope)),
598
723
  );
599
- return [];
724
+ return Promise.resolve([]);
600
725
  }
601
726
 
602
727
  // eslint-disable-next-line camelcase
@@ -605,18 +730,66 @@ export class Oracle {
605
730
  [srcSlot]: ACVMField[],
606
731
  [dstSlot]: ACVMField[],
607
732
  [numEntries]: ACVMField[],
733
+ [scope]: ACVMField[],
608
734
  ): Promise<ACVMField[]> {
609
735
  await this.handlerAsUtility().copyCapsule(
610
736
  AztecAddress.fromField(Fr.fromString(contractAddress)),
611
737
  Fr.fromString(srcSlot),
612
738
  Fr.fromString(dstSlot),
613
739
  Fr.fromString(numEntries).toNumber(),
740
+ AztecAddress.fromField(Fr.fromString(scope)),
614
741
  );
615
742
  return [];
616
743
  }
617
744
 
618
745
  // eslint-disable-next-line camelcase
619
- async aztec_utl_aes128Decrypt(
746
+ aztec_utl_pushEphemeral([slot]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
747
+ const newLen = this.handlerAsUtility().pushEphemeral(Fr.fromString(slot), elements.map(Fr.fromString));
748
+ return Promise.resolve([toACVMField(newLen)]);
749
+ }
750
+
751
+ // eslint-disable-next-line camelcase
752
+ aztec_utl_popEphemeral([slot]: ACVMField[]): Promise<ACVMField[][]> {
753
+ const element = this.handlerAsUtility().popEphemeral(Fr.fromString(slot));
754
+ return Promise.resolve([element.map(toACVMField)]);
755
+ }
756
+
757
+ // eslint-disable-next-line camelcase
758
+ aztec_utl_getEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[][]> {
759
+ const element = this.handlerAsUtility().getEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
760
+ return Promise.resolve([element.map(toACVMField)]);
761
+ }
762
+
763
+ // eslint-disable-next-line camelcase
764
+ aztec_utl_setEphemeral([slot]: ACVMField[], [index]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
765
+ this.handlerAsUtility().setEphemeral(
766
+ Fr.fromString(slot),
767
+ Fr.fromString(index).toNumber(),
768
+ elements.map(Fr.fromString),
769
+ );
770
+ return Promise.resolve([]);
771
+ }
772
+
773
+ // eslint-disable-next-line camelcase
774
+ aztec_utl_getEphemeralLen([slot]: ACVMField[]): Promise<ACVMField[]> {
775
+ const len = this.handlerAsUtility().getEphemeralLen(Fr.fromString(slot));
776
+ return Promise.resolve([toACVMField(len)]);
777
+ }
778
+
779
+ // eslint-disable-next-line camelcase
780
+ aztec_utl_removeEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[]> {
781
+ this.handlerAsUtility().removeEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
782
+ return Promise.resolve([]);
783
+ }
784
+
785
+ // eslint-disable-next-line camelcase
786
+ aztec_utl_clearEphemeral([slot]: ACVMField[]): Promise<ACVMField[]> {
787
+ this.handlerAsUtility().clearEphemeral(Fr.fromString(slot));
788
+ return Promise.resolve([]);
789
+ }
790
+
791
+ // eslint-disable-next-line camelcase
792
+ async aztec_utl_decryptAes128(
620
793
  ciphertextBVecStorage: ACVMField[],
621
794
  [ciphertextLength]: ACVMField[],
622
795
  iv: ACVMField[],
@@ -626,8 +799,15 @@ export class Oracle {
626
799
  const ivBuffer = fromUintArray(iv, 8);
627
800
  const symKeyBuffer = fromUintArray(symKey, 8);
628
801
 
629
- const plaintext = await this.handlerAsUtility().aes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
630
- return bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
802
+ // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
803
+ try {
804
+ const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
805
+ const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
806
+ return [toACVMField(1), storage, length];
807
+ } catch {
808
+ const zeroStorage = Array(ciphertextBVecStorage.length).fill(toACVMField(0));
809
+ return [toACVMField(0), zeroStorage, toACVMField(0)];
810
+ }
631
811
  }
632
812
 
633
813
  // eslint-disable-next-line camelcase
@@ -636,17 +816,33 @@ export class Oracle {
636
816
  [ephPKField0]: ACVMField[],
637
817
  [ephPKField1]: ACVMField[],
638
818
  [ephPKField2]: ACVMField[],
819
+ [contractAddress]: ACVMField[],
639
820
  ): Promise<ACVMField[]> {
640
821
  const secret = await this.handlerAsUtility().getSharedSecret(
641
822
  AztecAddress.fromField(Fr.fromString(address)),
642
823
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
824
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
825
+ );
826
+ return [toACVMField(secret)];
827
+ }
828
+
829
+ // eslint-disable-next-line camelcase
830
+ aztec_utl_setContractSyncCacheInvalid(
831
+ [contractAddress]: ACVMField[],
832
+ scopes: ACVMField[],
833
+ [scopeCount]: ACVMField[],
834
+ ): Promise<ACVMField[]> {
835
+ const scopeAddresses = scopes.slice(0, +scopeCount).map(s => AztecAddress.fromField(Fr.fromString(s)));
836
+ this.handlerAsUtility().setContractSyncCacheInvalid(
837
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
838
+ scopeAddresses,
643
839
  );
644
- return secret.toFields().map(toACVMField);
840
+ return Promise.resolve([]);
645
841
  }
646
842
 
647
843
  // eslint-disable-next-line camelcase
648
844
  async aztec_utl_emitOffchainEffect(data: ACVMField[]) {
649
- await this.handlerAsPrivate().emitOffchainEffect(data.map(Fr.fromString));
845
+ await this.handlerAsUtility().emitOffchainEffect(data.map(Fr.fromString));
650
846
  return [];
651
847
  }
652
848
 
@@ -76,12 +76,12 @@ export async function executePrivateFunction(
76
76
 
77
77
  const contractClassLogs = privateExecutionOracle.getContractClassLogs();
78
78
 
79
- const rawReturnValues = await privateExecutionOracle.loadFromExecutionCache(publicInputs.returnsHash);
79
+ const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
80
80
 
81
81
  const newNotes = privateExecutionOracle.getNewNotes();
82
82
  const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
83
83
  const offchainEffects = privateExecutionOracle.getOffchainEffects();
84
- const preTags = privateExecutionOracle.getUsedPreTags();
84
+ const taggingIndexRanges = privateExecutionOracle.getUsedTaggingIndexRanges();
85
85
  const nestedExecutionResults = privateExecutionOracle.getNestedExecutionResults();
86
86
 
87
87
  let timerSubtractionList = nestedExecutionResults;
@@ -103,8 +103,8 @@ export async function executePrivateFunction(
103
103
  newNotes,
104
104
  noteHashNullifierCounterMap,
105
105
  rawReturnValues,
106
- offchainEffects,
107
- preTags,
106
+ offchainEffects.map(e => ({ data: e.data })),
107
+ taggingIndexRanges,
108
108
  nestedExecutionResults,
109
109
  contractClassLogs,
110
110
  {