@aztec/pxe 1.2.1 → 2.0.0-nightly.20250813

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 (88) hide show
  1. package/dest/config/package_info.js +1 -1
  2. package/dest/contract_function_simulator/contract_function_simulator.d.ts +5 -2
  3. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  4. package/dest/contract_function_simulator/contract_function_simulator.js +48 -29
  5. package/dest/contract_function_simulator/index.d.ts +1 -0
  6. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  7. package/dest/contract_function_simulator/index.js +1 -0
  8. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  9. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  10. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  11. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  12. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
  13. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  14. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  15. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  16. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +22 -0
  17. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
  18. package/dest/contract_function_simulator/oracle/note_packing_utils.js +49 -0
  19. package/dest/contract_function_simulator/oracle/oracle.d.ts +44 -43
  20. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  21. package/dest/contract_function_simulator/oracle/oracle.js +127 -106
  22. package/dest/contract_function_simulator/oracle/private_execution.d.ts +7 -2
  23. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  24. package/dest/contract_function_simulator/oracle/private_execution.js +16 -11
  25. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +41 -17
  26. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +51 -23
  28. package/dest/contract_function_simulator/oracle/typed_oracle.d.ts +48 -47
  29. package/dest/contract_function_simulator/oracle/typed_oracle.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/oracle/typed_oracle.js +89 -87
  31. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +31 -30
  32. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +33 -30
  34. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/pxe_oracle_interface.js +6 -7
  36. package/dest/entrypoints/server/utils.d.ts +4 -2
  37. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  38. package/dest/entrypoints/server/utils.js +4 -2
  39. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +4 -4
  40. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -1
  41. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.js +58 -59
  42. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +4 -0
  43. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +1 -0
  44. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.js +41 -0
  45. package/dest/private_kernel/hints/index.d.ts +1 -0
  46. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  47. package/dest/private_kernel/hints/index.js +1 -0
  48. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  49. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  50. package/dest/private_kernel/private_kernel_execution_prover.js +13 -4
  51. package/dest/private_kernel/private_kernel_oracle.d.ts +1 -1
  52. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  53. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -1
  54. package/dest/private_kernel/private_kernel_oracle_impl.js +6 -6
  55. package/dest/pxe_service/error_enriching.d.ts.map +1 -1
  56. package/dest/pxe_service/error_enriching.js +1 -0
  57. package/dest/pxe_service/pxe_service.d.ts +3 -2
  58. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  59. package/dest/pxe_service/pxe_service.js +28 -19
  60. package/dest/storage/capsule_data_provider/capsule_data_provider.js +1 -1
  61. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -1
  62. package/dest/storage/note_data_provider/note_data_provider.js +16 -4
  63. package/package.json +16 -16
  64. package/src/config/package_info.ts +1 -1
  65. package/src/contract_function_simulator/contract_function_simulator.ts +67 -37
  66. package/src/contract_function_simulator/index.ts +1 -0
  67. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  68. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  69. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  70. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  71. package/src/contract_function_simulator/oracle/note_packing_utils.ts +52 -0
  72. package/src/contract_function_simulator/oracle/oracle.ts +149 -111
  73. package/src/contract_function_simulator/oracle/private_execution.ts +17 -12
  74. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +60 -24
  75. package/src/contract_function_simulator/oracle/typed_oracle.ts +108 -92
  76. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +34 -30
  77. package/src/contract_function_simulator/pxe_oracle_interface.ts +6 -8
  78. package/src/entrypoints/server/utils.ts +17 -6
  79. package/src/private_kernel/hints/build_private_kernel_reset_private_inputs.ts +106 -104
  80. package/src/private_kernel/hints/compute_tx_include_by_timestamp.ts +58 -0
  81. package/src/private_kernel/hints/index.ts +1 -0
  82. package/src/private_kernel/private_kernel_execution_prover.ts +21 -4
  83. package/src/private_kernel/private_kernel_oracle.ts +1 -1
  84. package/src/private_kernel/private_kernel_oracle_impl.ts +12 -9
  85. package/src/pxe_service/error_enriching.ts +1 -0
  86. package/src/pxe_service/pxe_service.ts +30 -32
  87. package/src/storage/capsule_data_provider/capsule_data_provider.ts +1 -1
  88. package/src/storage/note_data_provider/note_data_provider.ts +27 -16
@@ -13,6 +13,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
13
13
  import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
14
14
  import { MerkleTreeId } from '@aztec/stdlib/trees';
15
15
 
16
+ import { packAsRetrievedNote } from './note_packing_utils.js';
16
17
  import type { TypedOracle } from './typed_oracle.js';
17
18
 
18
19
  /**
@@ -26,60 +27,80 @@ export class Oracle {
26
27
  }
27
28
 
28
29
  toACIRCallback(): ACIRCallback {
29
- return Object.getOwnPropertyNames(Oracle.prototype)
30
- .filter(
31
- name => name !== 'constructor' && name != 'toACIRCallback' && typeof this[name as keyof Oracle] === 'function',
32
- )
33
- .reduce((acc, name) => {
34
- acc[name] = this[name as keyof Omit<Oracle, 'toACIRCallback' | 'typedOracle' | 'constructor'>].bind(this);
35
- return acc;
36
- }, {} as ACIRCallback);
37
- }
38
-
39
- getRandomField(): Promise<ACVMField[]> {
40
- const val = this.typedOracle.getRandomField();
30
+ const excludedProps = ['typedOracle', 'constructor', 'toACIRCallback'] as const;
31
+
32
+ // Get all the oracle function names
33
+ const oracleNames = Object.getOwnPropertyNames(Oracle.prototype).filter(
34
+ name => !excludedProps.includes(name as (typeof excludedProps)[number]),
35
+ );
36
+
37
+ // Validate oracle names - these must be prefixed with either "private" or "utility" to indicate their scope
38
+ // and must correspond to a function on the Oracle class.
39
+ oracleNames.forEach(name => {
40
+ if (!name.startsWith('private') && !name.startsWith('utility')) {
41
+ throw new Error(
42
+ `Oracle function "${name}" must be prefixed with either "private" or "utility" to indicate its scope`,
43
+ );
44
+ }
45
+
46
+ const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
47
+ if (typeof method !== 'function') {
48
+ throw new Error(`Oracle property "${name}" must be a function`);
49
+ }
50
+ });
51
+
52
+ // Build callback object and return it
53
+ return oracleNames.reduce((acc, name) => {
54
+ const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
55
+ acc[name] = method.bind(this);
56
+ return acc;
57
+ }, {} as ACIRCallback);
58
+ }
59
+
60
+ utilityGetRandomField(): Promise<ACVMField[]> {
61
+ const val = this.typedOracle.utilityGetRandomField();
41
62
  return Promise.resolve([toACVMField(val)]);
42
63
  }
43
64
 
44
65
  // Since the argument is a slice, noir automatically adds a length field to oracle call.
45
- storeInExecutionCache(_length: ACVMField[], values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
46
- this.typedOracle.storeInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
66
+ privateStoreInExecutionCache(_length: ACVMField[], values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
67
+ this.typedOracle.privateStoreInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
47
68
  return Promise.resolve([]);
48
69
  }
49
70
 
50
- async loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
51
- const values = await this.typedOracle.loadFromExecutionCache(Fr.fromString(returnsHash));
71
+ async privateLoadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
72
+ const values = await this.typedOracle.privateLoadFromExecutionCache(Fr.fromString(returnsHash));
52
73
  return [values.map(toACVMField)];
53
74
  }
54
75
 
55
- async getBlockNumber(): Promise<ACVMField[]> {
56
- return [toACVMField(await this.typedOracle.getBlockNumber())];
76
+ async utilityGetBlockNumber(): Promise<ACVMField[]> {
77
+ return [toACVMField(await this.typedOracle.utilityGetBlockNumber())];
57
78
  }
58
79
 
59
- async getTimestamp(): Promise<ACVMField[]> {
60
- return [toACVMField(await this.typedOracle.getTimestamp())];
80
+ async utilityGetTimestamp(): Promise<ACVMField[]> {
81
+ return [toACVMField(await this.typedOracle.utilityGetTimestamp())];
61
82
  }
62
83
 
63
- async getContractAddress(): Promise<ACVMField[]> {
64
- return [toACVMField(await this.typedOracle.getContractAddress())];
84
+ async utilityGetContractAddress(): Promise<ACVMField[]> {
85
+ return [toACVMField(await this.typedOracle.utilityGetContractAddress())];
65
86
  }
66
87
 
67
- async getVersion(): Promise<ACVMField[]> {
68
- return [toACVMField(await this.typedOracle.getVersion())];
88
+ async utilityGetVersion(): Promise<ACVMField[]> {
89
+ return [toACVMField(await this.typedOracle.utilityGetVersion())];
69
90
  }
70
91
 
71
- async getChainId(): Promise<ACVMField[]> {
72
- return [toACVMField(await this.typedOracle.getChainId())];
92
+ async utilityGetChainId(): Promise<ACVMField[]> {
93
+ return [toACVMField(await this.typedOracle.utilityGetChainId())];
73
94
  }
74
95
 
75
- async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
76
- const keyValidationRequest = await this.typedOracle.getKeyValidationRequest(Fr.fromString(pkMHash));
96
+ async utilityGetKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
97
+ const keyValidationRequest = await this.typedOracle.utilityGetKeyValidationRequest(Fr.fromString(pkMHash));
77
98
 
78
99
  return keyValidationRequest.toFields().map(toACVMField);
79
100
  }
80
101
 
81
- async getContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
82
- const instance = await this.typedOracle.getContractInstance(AztecAddress.fromField(Fr.fromString(address)));
102
+ async utilityGetContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
103
+ const instance = await this.typedOracle.utilityGetContractInstance(AztecAddress.fromField(Fr.fromString(address)));
83
104
 
84
105
  return [
85
106
  instance.salt,
@@ -90,7 +111,7 @@ export class Oracle {
90
111
  ].map(toACVMField);
91
112
  }
92
113
 
93
- async getMembershipWitness(
114
+ async utilityGetMembershipWitness(
94
115
  [blockNumber]: ACVMField[],
95
116
  [treeId]: ACVMField[],
96
117
  [leafValue]: ACVMField[],
@@ -99,7 +120,11 @@ export class Oracle {
99
120
  const parsedTreeId = Fr.fromString(treeId).toNumber();
100
121
  const parsedLeafValue = Fr.fromString(leafValue);
101
122
 
102
- const witness = await this.typedOracle.getMembershipWitness(parsedBlockNumber, parsedTreeId, parsedLeafValue);
123
+ const witness = await this.typedOracle.utilityGetMembershipWitness(
124
+ parsedBlockNumber,
125
+ parsedTreeId,
126
+ parsedLeafValue,
127
+ );
103
128
  if (!witness) {
104
129
  throw new Error(
105
130
  `Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`,
@@ -108,28 +133,28 @@ export class Oracle {
108
133
  return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
109
134
  }
110
135
 
111
- async getNullifierMembershipWitness(
136
+ async utilityGetNullifierMembershipWitness(
112
137
  [blockNumber]: ACVMField[],
113
138
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
114
139
  ): Promise<(ACVMField | ACVMField[])[]> {
115
140
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
116
141
  const parsedNullifier = Fr.fromString(nullifier);
117
142
 
118
- const witness = await this.typedOracle.getNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
143
+ const witness = await this.typedOracle.utilityGetNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
119
144
  if (!witness) {
120
145
  throw new Error(`Nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
121
146
  }
122
147
  return witness.toNoirRepresentation();
123
148
  }
124
149
 
125
- async getLowNullifierMembershipWitness(
150
+ async utilityGetLowNullifierMembershipWitness(
126
151
  [blockNumber]: ACVMField[],
127
152
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
128
153
  ): Promise<(ACVMField | ACVMField[])[]> {
129
154
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
130
155
  const parsedNullifier = Fr.fromString(nullifier);
131
156
 
132
- const witness = await this.typedOracle.getLowNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
157
+ const witness = await this.typedOracle.utilityGetLowNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
133
158
  if (!witness) {
134
159
  throw new Error(
135
160
  `Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`,
@@ -138,47 +163,48 @@ export class Oracle {
138
163
  return witness.toNoirRepresentation();
139
164
  }
140
165
 
141
- async getPublicDataWitness(
166
+ async utilityGetPublicDataWitness(
142
167
  [blockNumber]: ACVMField[],
143
168
  [leafSlot]: ACVMField[],
144
169
  ): Promise<(ACVMField | ACVMField[])[]> {
145
170
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
146
171
  const parsedLeafSlot = Fr.fromString(leafSlot);
147
172
 
148
- const witness = await this.typedOracle.getPublicDataWitness(parsedBlockNumber, parsedLeafSlot);
173
+ const witness = await this.typedOracle.utilityGetPublicDataWitness(parsedBlockNumber, parsedLeafSlot);
149
174
  if (!witness) {
150
175
  throw new Error(`Public data witness not found for slot ${parsedLeafSlot} at block ${parsedBlockNumber}.`);
151
176
  }
152
177
  return witness.toNoirRepresentation();
153
178
  }
154
179
 
155
- async getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
180
+ async utilityGetBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
156
181
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
157
182
 
158
- const header = await this.typedOracle.getBlockHeader(parsedBlockNumber);
183
+ const header = await this.typedOracle.utilityGetBlockHeader(parsedBlockNumber);
159
184
  if (!header) {
160
185
  throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
161
186
  }
162
187
  return header.toFields().map(toACVMField);
163
188
  }
164
189
 
165
- async getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
190
+ async utilityGetAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
166
191
  const messageHashField = Fr.fromString(messageHash);
167
- const witness = await this.typedOracle.getAuthWitness(messageHashField);
192
+ const witness = await this.typedOracle.utilityGetAuthWitness(messageHashField);
168
193
  if (!witness) {
169
194
  throw new Error(`Unknown auth witness for message hash ${messageHashField}`);
170
195
  }
171
196
  return [witness.map(toACVMField)];
172
197
  }
173
198
 
174
- async getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
199
+ // TODO(benesjan): This doesn't map to the underlying oracle name which is just ugly.
200
+ async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
175
201
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
176
- const { publicKeys, partialAddress } = await this.typedOracle.getCompleteAddress(parsedAddress);
202
+ const { publicKeys, partialAddress } = await this.typedOracle.utilityGetCompleteAddress(parsedAddress);
177
203
 
178
204
  return [[...publicKeys.toFields(), partialAddress].map(toACVMField)];
179
205
  }
180
206
 
181
- async getNotes(
207
+ async utilityGetNotes(
182
208
  [storageSlot]: ACVMField[],
183
209
  [numSelects]: ACVMField[],
184
210
  selectByIndexes: ACVMField[],
@@ -196,7 +222,7 @@ export class Oracle {
196
222
  [maxNotes]: ACVMField[],
197
223
  [packedRetrievedNoteLength]: ACVMField[],
198
224
  ): Promise<(ACVMField | ACVMField[])[]> {
199
- const noteDatas = await this.typedOracle.getNotes(
225
+ const noteDatas = await this.typedOracle.utilityGetNotes(
200
226
  Fr.fromString(storageSlot),
201
227
  +numSelects,
202
228
  selectByIndexes.map(s => +s),
@@ -220,33 +246,25 @@ export class Oracle {
220
246
  }
221
247
  }
222
248
 
223
- // The expected return type is a BoundedVec<[Field; packedRetrievedNoteLength], maxNotes> where each
224
- // array is structured as [contract_address, note_nonce, nonzero_note_hash_counter, ...packed_note].
225
-
226
- const returnDataAsArrayOfArrays = noteDatas.map(({ contractAddress, noteNonce, index, note }) => {
227
- // If index is undefined, the note is transient which implies that the nonzero_note_hash_counter has to be true
228
- const noteIsTransient = index === undefined;
229
- const nonzeroNoteHashCounter = noteIsTransient ? true : false;
230
- // If you change the array on the next line you have to change the `unpack_retrieved_note` function in
231
- // `aztec/src/note/retrieved_note.nr`
232
- return [contractAddress, noteNonce, nonzeroNoteHashCounter, ...note.items];
233
- });
249
+ const returnDataAsArrayOfPackedRetrievedNotes = noteDatas.map(packAsRetrievedNote);
234
250
 
235
251
  // Now we convert each sub-array to an array of ACVMField
236
- const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfArrays.map(subArray => subArray.map(toACVMField));
252
+ const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedRetrievedNotes.map(subArray =>
253
+ subArray.map(toACVMField),
254
+ );
237
255
 
238
256
  // At last we convert the array of arrays to a bounded vec of arrays
239
257
  return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedRetrievedNoteLength);
240
258
  }
241
259
 
242
- notifyCreatedNote(
260
+ privateNotifyCreatedNote(
243
261
  [storageSlot]: ACVMField[],
244
262
  [noteTypeId]: ACVMField[],
245
263
  note: ACVMField[],
246
264
  [noteHash]: ACVMField[],
247
265
  [counter]: ACVMField[],
248
266
  ): Promise<ACVMField[]> {
249
- this.typedOracle.notifyCreatedNote(
267
+ this.typedOracle.privateNotifyCreatedNote(
250
268
  Fr.fromString(storageSlot),
251
269
  NoteSelector.fromField(Fr.fromString(noteTypeId)),
252
270
  note.map(Fr.fromString),
@@ -256,31 +274,31 @@ export class Oracle {
256
274
  return Promise.resolve([]);
257
275
  }
258
276
 
259
- async notifyNullifiedNote(
277
+ async privateNotifyNullifiedNote(
260
278
  [innerNullifier]: ACVMField[],
261
279
  [noteHash]: ACVMField[],
262
280
  [counter]: ACVMField[],
263
281
  ): Promise<ACVMField[]> {
264
- await this.typedOracle.notifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
282
+ await this.typedOracle.privateNotifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
265
283
  return [];
266
284
  }
267
285
 
268
- async notifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
269
- await this.typedOracle.notifyCreatedNullifier(Fr.fromString(innerNullifier));
286
+ async privateNotifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
287
+ await this.typedOracle.privateNotifyCreatedNullifier(Fr.fromString(innerNullifier));
270
288
  return [];
271
289
  }
272
290
 
273
- async checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
274
- const exists = await this.typedOracle.checkNullifierExists(Fr.fromString(innerNullifier));
291
+ async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
292
+ const exists = await this.typedOracle.utilityCheckNullifierExists(Fr.fromString(innerNullifier));
275
293
  return [toACVMField(exists)];
276
294
  }
277
295
 
278
- async getL1ToL2MembershipWitness(
296
+ async utilityGetL1ToL2MembershipWitness(
279
297
  [contractAddress]: ACVMField[],
280
298
  [messageHash]: ACVMField[],
281
299
  [secret]: ACVMField[],
282
300
  ): Promise<(ACVMField | ACVMField[])[]> {
283
- const message = await this.typedOracle.getL1ToL2MembershipWitness(
301
+ const message = await this.typedOracle.utilityGetL1ToL2MembershipWitness(
284
302
  AztecAddress.fromString(contractAddress),
285
303
  Fr.fromString(messageHash),
286
304
  Fr.fromString(secret),
@@ -288,13 +306,13 @@ export class Oracle {
288
306
  return message.toNoirRepresentation();
289
307
  }
290
308
 
291
- async storageRead(
309
+ async utilityStorageRead(
292
310
  [contractAddress]: ACVMField[],
293
311
  [startStorageSlot]: ACVMField[],
294
312
  [blockNumber]: ACVMField[],
295
313
  [numberOfElements]: ACVMField[],
296
314
  ): Promise<ACVMField[][]> {
297
- const values = await this.typedOracle.storageRead(
315
+ const values = await this.typedOracle.utilityStorageRead(
298
316
  new AztecAddress(Fr.fromString(contractAddress)),
299
317
  Fr.fromString(startStorageSlot),
300
318
  +blockNumber,
@@ -303,12 +321,7 @@ export class Oracle {
303
321
  return [values.map(toACVMField)];
304
322
  }
305
323
 
306
- async storageWrite([startStorageSlot]: ACVMField[], values: ACVMField[]): Promise<ACVMField[]> {
307
- const newValues = await this.typedOracle.storageWrite(Fr.fromString(startStorageSlot), values.map(Fr.fromString));
308
- return newValues.map(toACVMField);
309
- }
310
-
311
- notifyCreatedContractClassLog(
324
+ privateNotifyCreatedContractClassLog(
312
325
  [contractAddress]: ACVMField[],
313
326
  message: ACVMField[],
314
327
  [length]: ACVMField[],
@@ -317,25 +330,27 @@ export class Oracle {
317
330
  const logFields = new ContractClassLogFields(message.map(Fr.fromString));
318
331
  const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logFields, +length);
319
332
 
320
- this.typedOracle.notifyCreatedContractClassLog(log, +counter);
333
+ this.typedOracle.privateNotifyCreatedContractClassLog(log, +counter);
321
334
  return Promise.resolve([]);
322
335
  }
323
336
 
324
- debugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): Promise<ACVMField[]> {
337
+ utilityDebugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): Promise<ACVMField[]> {
325
338
  const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
326
339
  const fieldsFr = fields.map(Fr.fromString);
327
- this.typedOracle.debugLog(messageStr, fieldsFr);
340
+ this.typedOracle.utilityDebugLog(messageStr, fieldsFr);
328
341
  return Promise.resolve([]);
329
342
  }
330
343
 
331
- async callPrivateFunction(
344
+ // This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
345
+ // change the name here.
346
+ async privateCallPrivateFunction(
332
347
  [contractAddress]: ACVMField[],
333
348
  [functionSelector]: ACVMField[],
334
349
  [argsHash]: ACVMField[],
335
350
  [sideEffectCounter]: ACVMField[],
336
351
  [isStaticCall]: ACVMField[],
337
352
  ): Promise<ACVMField[][]> {
338
- const { endSideEffectCounter, returnsHash } = await this.typedOracle.callPrivateFunction(
353
+ const { endSideEffectCounter, returnsHash } = await this.typedOracle.privateCallPrivateFunction(
339
354
  AztecAddress.fromField(Fr.fromString(contractAddress)),
340
355
  FunctionSelector.fromField(Fr.fromString(functionSelector)),
341
356
  Fr.fromString(argsHash),
@@ -345,13 +360,13 @@ export class Oracle {
345
360
  return [[endSideEffectCounter, returnsHash].map(toACVMField)];
346
361
  }
347
362
 
348
- async notifyEnqueuedPublicFunctionCall(
363
+ async privateNotifyEnqueuedPublicFunctionCall(
349
364
  [contractAddress]: ACVMField[],
350
365
  [calldataHash]: ACVMField[],
351
366
  [sideEffectCounter]: ACVMField[],
352
367
  [isStaticCall]: ACVMField[],
353
368
  ): Promise<ACVMField[]> {
354
- await this.typedOracle.notifyEnqueuedPublicFunctionCall(
369
+ await this.typedOracle.privateNotifyEnqueuedPublicFunctionCall(
355
370
  AztecAddress.fromString(contractAddress),
356
371
  Fr.fromString(calldataHash),
357
372
  Fr.fromString(sideEffectCounter).toNumber(),
@@ -360,13 +375,13 @@ export class Oracle {
360
375
  return [];
361
376
  }
362
377
 
363
- async notifySetPublicTeardownFunctionCall(
378
+ async privateNotifySetPublicTeardownFunctionCall(
364
379
  [contractAddress]: ACVMField[],
365
380
  [calldataHash]: ACVMField[],
366
381
  [sideEffectCounter]: ACVMField[],
367
382
  [isStaticCall]: ACVMField[],
368
383
  ): Promise<ACVMField[]> {
369
- await this.typedOracle.notifySetPublicTeardownFunctionCall(
384
+ await this.typedOracle.privateNotifySetPublicTeardownFunctionCall(
370
385
  AztecAddress.fromString(contractAddress),
371
386
  Fr.fromString(calldataHash),
372
387
  Fr.fromString(sideEffectCounter).toNumber(),
@@ -375,40 +390,45 @@ export class Oracle {
375
390
  return [];
376
391
  }
377
392
 
378
- async notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
379
- await this.typedOracle.notifySetMinRevertibleSideEffectCounter(
393
+ async privateNotifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
394
+ ACVMField[]
395
+ > {
396
+ await this.typedOracle.privateNotifySetMinRevertibleSideEffectCounter(
380
397
  Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
381
398
  );
382
399
  return Promise.resolve([]);
383
400
  }
384
401
 
385
- async getIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
386
- const taggingSecret = await this.typedOracle.getIndexedTaggingSecretAsSender(
402
+ async utilityGetIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
403
+ const taggingSecret = await this.typedOracle.utilityGetIndexedTaggingSecretAsSender(
387
404
  AztecAddress.fromString(sender),
388
405
  AztecAddress.fromString(recipient),
389
406
  );
390
407
  return taggingSecret.toFields().map(toACVMField);
391
408
  }
392
409
 
393
- async incrementAppTaggingSecretIndexAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
394
- await this.typedOracle.incrementAppTaggingSecretIndexAsSender(
410
+ async privateIncrementAppTaggingSecretIndexAsSender(
411
+ [sender]: ACVMField[],
412
+ [recipient]: ACVMField[],
413
+ ): Promise<ACVMField[]> {
414
+ await this.typedOracle.privateIncrementAppTaggingSecretIndexAsSender(
395
415
  AztecAddress.fromString(sender),
396
416
  AztecAddress.fromString(recipient),
397
417
  );
398
418
  return [];
399
419
  }
400
420
 
401
- async fetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
402
- await this.typedOracle.fetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
421
+ async utilityFetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
422
+ await this.typedOracle.utilityFetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
403
423
  return [];
404
424
  }
405
425
 
406
- async validateEnqueuedNotesAndEvents(
426
+ async utilityValidateEnqueuedNotesAndEvents(
407
427
  [contractAddress]: ACVMField[],
408
428
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
409
429
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
410
430
  ): Promise<ACVMField[]> {
411
- await this.typedOracle.validateEnqueuedNotesAndEvents(
431
+ await this.typedOracle.utilityValidateEnqueuedNotesAndEvents(
412
432
  AztecAddress.fromString(contractAddress),
413
433
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
414
434
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
@@ -417,12 +437,12 @@ export class Oracle {
417
437
  return [];
418
438
  }
419
439
 
420
- async bulkRetrieveLogs(
440
+ async utilityBulkRetrieveLogs(
421
441
  [contractAddress]: ACVMField[],
422
442
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
423
443
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
424
444
  ): Promise<ACVMField[]> {
425
- await this.typedOracle.bulkRetrieveLogs(
445
+ await this.typedOracle.utilityBulkRetrieveLogs(
426
446
  AztecAddress.fromString(contractAddress),
427
447
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
428
448
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
@@ -430,8 +450,12 @@ export class Oracle {
430
450
  return [];
431
451
  }
432
452
 
433
- async storeCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[], capsule: ACVMField[]): Promise<ACVMField[]> {
434
- await this.typedOracle.storeCapsule(
453
+ async utilityStoreCapsule(
454
+ [contractAddress]: ACVMField[],
455
+ [slot]: ACVMField[],
456
+ capsule: ACVMField[],
457
+ ): Promise<ACVMField[]> {
458
+ await this.typedOracle.utilityStoreCapsule(
435
459
  AztecAddress.fromField(Fr.fromString(contractAddress)),
436
460
  Fr.fromString(slot),
437
461
  capsule.map(Fr.fromString),
@@ -439,12 +463,12 @@ export class Oracle {
439
463
  return [];
440
464
  }
441
465
 
442
- async loadCapsule(
466
+ async utilityLoadCapsule(
443
467
  [contractAddress]: ACVMField[],
444
468
  [slot]: ACVMField[],
445
469
  [tSize]: ACVMField[],
446
470
  ): Promise<(ACVMField | ACVMField[])[]> {
447
- const values = await this.typedOracle.loadCapsule(
471
+ const values = await this.typedOracle.utilityLoadCapsule(
448
472
  AztecAddress.fromField(Fr.fromString(contractAddress)),
449
473
  Fr.fromString(slot),
450
474
  );
@@ -460,18 +484,21 @@ export class Oracle {
460
484
  }
461
485
  }
462
486
 
463
- async deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
464
- await this.typedOracle.deleteCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(slot));
487
+ async utilityDeleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
488
+ await this.typedOracle.utilityDeleteCapsule(
489
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
490
+ Fr.fromString(slot),
491
+ );
465
492
  return [];
466
493
  }
467
494
 
468
- async copyCapsule(
495
+ async utilityCopyCapsule(
469
496
  [contractAddress]: ACVMField[],
470
497
  [srcSlot]: ACVMField[],
471
498
  [dstSlot]: ACVMField[],
472
499
  [numEntries]: ACVMField[],
473
500
  ): Promise<ACVMField[]> {
474
- await this.typedOracle.copyCapsule(
501
+ await this.typedOracle.utilityCopyCapsule(
475
502
  AztecAddress.fromField(Fr.fromString(contractAddress)),
476
503
  Fr.fromString(srcSlot),
477
504
  Fr.fromString(dstSlot),
@@ -480,7 +507,7 @@ export class Oracle {
480
507
  return [];
481
508
  }
482
509
 
483
- async aes128Decrypt(
510
+ async utilityAes128Decrypt(
484
511
  ciphertextBVecStorage: ACVMField[],
485
512
  [ciphertextLength]: ACVMField[],
486
513
  iv: ACVMField[],
@@ -490,25 +517,36 @@ export class Oracle {
490
517
  const ivBuffer = fromUintArray(iv, 8);
491
518
  const symKeyBuffer = fromUintArray(symKey, 8);
492
519
 
493
- const plaintext = await this.typedOracle.aes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
520
+ const plaintext = await this.typedOracle.utilityAes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
494
521
  return bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
495
522
  }
496
523
 
497
- async getSharedSecret(
524
+ async utilityGetSharedSecret(
498
525
  [address]: ACVMField[],
499
526
  [ephPKField0]: ACVMField[],
500
527
  [ephPKField1]: ACVMField[],
501
528
  [ephPKField2]: ACVMField[],
502
529
  ): Promise<ACVMField[]> {
503
- const secret = await this.typedOracle.getSharedSecret(
530
+ const secret = await this.typedOracle.utilityGetSharedSecret(
504
531
  AztecAddress.fromField(Fr.fromString(address)),
505
532
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
506
533
  );
507
534
  return secret.toFields().map(toACVMField);
508
535
  }
509
536
 
510
- async emitOffchainEffect(data: ACVMField[]) {
511
- await this.typedOracle.emitOffchainEffect(data.map(Fr.fromString));
537
+ async utilityEmitOffchainEffect(data: ACVMField[]) {
538
+ await this.typedOracle.utilityEmitOffchainEffect(data.map(Fr.fromString));
539
+ return [];
540
+ }
541
+
542
+ async privateGetSenderForTags(): Promise<ACVMField[]> {
543
+ const sender = await this.typedOracle.privateGetSenderForTags();
544
+ // Return [1, address] for Some(address), [0, 0] for None
545
+ return sender ? [toACVMField(1n), toACVMField(sender)] : [toACVMField(0n), toACVMField(0n)];
546
+ }
547
+
548
+ async privateSetSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
549
+ await this.typedOracle.privateSetSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
512
550
  return [];
513
551
  }
514
552
  }