@aztec/simulator 0.81.0 → 0.82.1-alpha-testnet.1

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 (138) hide show
  1. package/dest/common/db_interfaces.d.ts +6 -12
  2. package/dest/common/db_interfaces.d.ts.map +1 -1
  3. package/dest/common/db_interfaces.js +1 -1
  4. package/dest/common/debug_fn_name.js +5 -2
  5. package/dest/common/message_load_oracle_inputs.d.ts +4 -0
  6. package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
  7. package/dest/common/message_load_oracle_inputs.js +9 -0
  8. package/dest/private/acvm/acvm.d.ts +6 -1
  9. package/dest/private/acvm/acvm.d.ts.map +1 -1
  10. package/dest/private/acvm/acvm.js +7 -13
  11. package/dest/private/acvm/deserialize.d.ts +0 -18
  12. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  13. package/dest/private/acvm/deserialize.js +3 -24
  14. package/dest/private/acvm/oracle/oracle.d.ts +34 -34
  15. package/dest/private/acvm/oracle/oracle.d.ts.map +1 -1
  16. package/dest/private/acvm/oracle/oracle.js +116 -82
  17. package/dest/private/acvm/oracle/typed_oracle.d.ts +4 -4
  18. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -1
  19. package/dest/private/acvm/oracle/typed_oracle.js +8 -8
  20. package/dest/private/execution_data_provider.d.ts +3 -9
  21. package/dest/private/execution_data_provider.d.ts.map +1 -1
  22. package/dest/private/hashed_values_cache.d.ts +2 -2
  23. package/dest/private/hashed_values_cache.d.ts.map +1 -1
  24. package/dest/private/hashed_values_cache.js +5 -15
  25. package/dest/private/private_execution.d.ts +2 -2
  26. package/dest/private/private_execution.d.ts.map +1 -1
  27. package/dest/private/private_execution.js +4 -7
  28. package/dest/private/private_execution_oracle.d.ts +9 -37
  29. package/dest/private/private_execution_oracle.d.ts.map +1 -1
  30. package/dest/private/private_execution_oracle.js +32 -92
  31. package/dest/private/providers/acvm_native.d.ts +6 -4
  32. package/dest/private/providers/acvm_native.d.ts.map +1 -1
  33. package/dest/private/providers/acvm_native.js +6 -3
  34. package/dest/private/providers/acvm_wasm.d.ts +6 -7
  35. package/dest/private/providers/acvm_wasm.d.ts.map +1 -1
  36. package/dest/private/providers/acvm_wasm.js +13 -15
  37. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +5 -5
  38. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -1
  39. package/dest/private/providers/acvm_wasm_with_blobs.js +7 -9
  40. package/dest/private/providers/circuit_recording/circuit_recorder.d.ts +90 -0
  41. package/dest/private/providers/circuit_recording/circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/providers/circuit_recording/circuit_recorder.js +246 -0
  43. package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts +18 -0
  44. package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.js +39 -0
  46. package/dest/private/providers/simulation_provider.d.ts +21 -7
  47. package/dest/private/providers/simulation_provider.d.ts.map +1 -1
  48. package/dest/private/simulator.d.ts +3 -2
  49. package/dest/private/simulator.d.ts.map +1 -1
  50. package/dest/private/simulator.js +14 -4
  51. package/dest/private/unconstrained_execution.d.ts +2 -2
  52. package/dest/private/unconstrained_execution.d.ts.map +1 -1
  53. package/dest/private/unconstrained_execution.js +1 -2
  54. package/dest/private/unconstrained_execution_oracle.d.ts +1 -1
  55. package/dest/private/unconstrained_execution_oracle.d.ts.map +1 -1
  56. package/dest/private/unconstrained_execution_oracle.js +3 -3
  57. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  58. package/dest/public/avm/avm_simulator.js +0 -2
  59. package/dest/public/avm/fixtures/avm_simulation_tester.js +2 -2
  60. package/dest/public/avm/fixtures/index.d.ts +2 -1
  61. package/dest/public/avm/fixtures/index.d.ts.map +1 -1
  62. package/dest/public/avm/fixtures/index.js +7 -12
  63. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +2 -2
  64. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -1
  65. package/dest/public/avm/fixtures/simple_contract_data_source.js +1 -1
  66. package/dest/public/avm/journal/journal.d.ts +2 -2
  67. package/dest/public/avm/journal/journal.d.ts.map +1 -1
  68. package/dest/public/avm/journal/journal.js +4 -4
  69. package/dest/public/avm/test_utils.js +1 -1
  70. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +2 -2
  71. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  72. package/dest/public/fixtures/public_tx_simulation_tester.js +27 -47
  73. package/dest/public/fixtures/utils.d.ts +2 -2
  74. package/dest/public/fixtures/utils.d.ts.map +1 -1
  75. package/dest/public/fixtures/utils.js +18 -22
  76. package/dest/public/index.d.ts +1 -2
  77. package/dest/public/index.d.ts.map +1 -1
  78. package/dest/public/index.js +1 -1
  79. package/dest/public/public_db_sources.d.ts +1 -1
  80. package/dest/public/public_db_sources.d.ts.map +1 -1
  81. package/dest/public/public_db_sources.js +4 -4
  82. package/dest/public/public_processor/public_processor.js +1 -1
  83. package/dest/public/public_tx_simulator/public_tx_context.d.ts +3 -10
  84. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  85. package/dest/public/public_tx_simulator/public_tx_context.js +4 -22
  86. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +2 -3
  87. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  88. package/dest/public/public_tx_simulator/public_tx_simulator.js +20 -24
  89. package/dest/public/utils.d.ts +2 -4
  90. package/dest/public/utils.d.ts.map +1 -1
  91. package/dest/public/utils.js +4 -21
  92. package/dest/testing.d.ts +2 -0
  93. package/dest/testing.d.ts.map +1 -0
  94. package/dest/testing.js +1 -0
  95. package/package.json +15 -14
  96. package/src/common/db_interfaces.ts +6 -13
  97. package/src/common/debug_fn_name.ts +5 -5
  98. package/src/common/message_load_oracle_inputs.ts +8 -0
  99. package/src/private/acvm/acvm.ts +8 -24
  100. package/src/private/acvm/deserialize.ts +3 -30
  101. package/src/private/acvm/oracle/oracle.ts +148 -144
  102. package/src/private/acvm/oracle/typed_oracle.ts +12 -14
  103. package/src/private/execution_data_provider.ts +6 -10
  104. package/src/private/hashed_values_cache.ts +6 -14
  105. package/src/private/private_execution.ts +11 -11
  106. package/src/private/private_execution_oracle.ts +39 -138
  107. package/src/private/providers/acvm_native.ts +17 -6
  108. package/src/private/providers/acvm_wasm.ts +27 -20
  109. package/src/private/providers/acvm_wasm_with_blobs.ts +15 -12
  110. package/src/private/providers/circuit_recording/circuit_recorder.ts +283 -0
  111. package/src/private/providers/circuit_recording/simulation_provider_recorder_wrapper.ts +82 -0
  112. package/src/private/providers/simulation_provider.ts +30 -5
  113. package/src/private/simulator.ts +19 -5
  114. package/src/private/unconstrained_execution.ts +8 -4
  115. package/src/private/unconstrained_execution_oracle.ts +3 -6
  116. package/src/public/avm/avm_simulator.ts +0 -2
  117. package/src/public/avm/fixtures/avm_simulation_tester.ts +2 -2
  118. package/src/public/avm/fixtures/index.ts +15 -17
  119. package/src/public/avm/fixtures/simple_contract_data_source.ts +2 -2
  120. package/src/public/avm/journal/journal.ts +7 -7
  121. package/src/public/avm/test_utils.ts +1 -1
  122. package/src/public/fixtures/public_tx_simulation_tester.ts +31 -88
  123. package/src/public/fixtures/utils.ts +28 -26
  124. package/src/public/index.ts +1 -2
  125. package/src/public/public_db_sources.ts +4 -4
  126. package/src/public/public_processor/public_processor.ts +1 -1
  127. package/src/public/public_tx_simulator/public_tx_context.ts +12 -32
  128. package/src/public/public_tx_simulator/public_tx_simulator.ts +24 -30
  129. package/src/public/utils.ts +5 -21
  130. package/src/testing.ts +1 -0
  131. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  132. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  133. package/dest/public/avm/bytecode_utils.js +0 -17
  134. package/dest/public/execution.d.ts +0 -108
  135. package/dest/public/execution.d.ts.map +0 -1
  136. package/dest/public/execution.js +0 -9
  137. package/src/public/avm/bytecode_utils.ts +0 -17
  138. package/src/public/execution.ts +0 -140
@@ -5,14 +5,7 @@ import { ContractClassLog, LogWithTxData } from '@aztec/stdlib/logs';
5
5
  import { MerkleTreeId } from '@aztec/stdlib/trees';
6
6
 
7
7
  import type { ACVMField } from '../acvm_types.js';
8
- import {
9
- frToBoolean,
10
- frToNumber,
11
- fromACVMField,
12
- fromBoundedVec,
13
- fromUintArray,
14
- fromUintBoundedVec,
15
- } from '../deserialize.js';
8
+ import { fromBoundedVec, fromUintArray, fromUintBoundedVec } from '../deserialize.js';
16
9
  import { bufferToBoundedVec, toACVMField, toACVMFieldSingleOrArray } from '../serialize.js';
17
10
  import type { TypedOracle } from './typed_oracle.js';
18
11
 
@@ -22,46 +15,46 @@ import type { TypedOracle } from './typed_oracle.js';
22
15
  export class Oracle {
23
16
  constructor(private typedOracle: TypedOracle) {}
24
17
 
25
- getRandomField(): ACVMField {
18
+ getRandomField(): Promise<ACVMField[]> {
26
19
  const val = this.typedOracle.getRandomField();
27
- return toACVMField(val);
20
+ return Promise.resolve([toACVMField(val)]);
28
21
  }
29
22
 
30
23
  // Since the argument is a slice, noir automatically adds a length field to oracle call.
31
- async storeInExecutionCache(_length: ACVMField[], values: ACVMField[]): Promise<ACVMField> {
32
- const hash = await this.typedOracle.storeInExecutionCache(values.map(fromACVMField));
33
- return toACVMField(hash);
24
+ storeInExecutionCache(_length: ACVMField[], values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
25
+ this.typedOracle.storeInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
26
+ return Promise.resolve([]);
34
27
  }
35
28
 
36
- async loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[]> {
37
- const values = await this.typedOracle.loadFromExecutionCache(fromACVMField(returnsHash));
38
- return values.map(toACVMField);
29
+ async loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
30
+ const values = await this.typedOracle.loadFromExecutionCache(Fr.fromString(returnsHash));
31
+ return [values.map(toACVMField)];
39
32
  }
40
33
 
41
- async getBlockNumber(): Promise<ACVMField> {
42
- return toACVMField(await this.typedOracle.getBlockNumber());
34
+ async getBlockNumber(): Promise<ACVMField[]> {
35
+ return [toACVMField(await this.typedOracle.getBlockNumber())];
43
36
  }
44
37
 
45
- async getContractAddress(): Promise<ACVMField> {
46
- return toACVMField(await this.typedOracle.getContractAddress());
38
+ async getContractAddress(): Promise<ACVMField[]> {
39
+ return [toACVMField(await this.typedOracle.getContractAddress())];
47
40
  }
48
41
 
49
- async getVersion(): Promise<ACVMField> {
50
- return toACVMField(await this.typedOracle.getVersion());
42
+ async getVersion(): Promise<ACVMField[]> {
43
+ return [toACVMField(await this.typedOracle.getVersion())];
51
44
  }
52
45
 
53
- async getChainId(): Promise<ACVMField> {
54
- return toACVMField(await this.typedOracle.getChainId());
46
+ async getChainId(): Promise<ACVMField[]> {
47
+ return [toACVMField(await this.typedOracle.getChainId())];
55
48
  }
56
49
 
57
50
  async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
58
- const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
51
+ const keyValidationRequest = await this.typedOracle.getKeyValidationRequest(Fr.fromString(pkMHash));
59
52
 
60
- return [toACVMField(pkM.x), toACVMField(pkM.y), toACVMField(pkM.isInfinite), toACVMField(skApp)];
53
+ return keyValidationRequest.toFields().map(toACVMField);
61
54
  }
62
55
 
63
- async getContractInstance([address]: ACVMField[]) {
64
- const instance = await this.typedOracle.getContractInstance(AztecAddress.fromField(fromACVMField(address)));
56
+ async getContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
57
+ const instance = await this.typedOracle.getContractInstance(AztecAddress.fromField(Fr.fromString(address)));
65
58
 
66
59
  return [
67
60
  instance.salt,
@@ -76,10 +69,10 @@ export class Oracle {
76
69
  [blockNumber]: ACVMField[],
77
70
  [treeId]: ACVMField[],
78
71
  [leafValue]: ACVMField[],
79
- ): Promise<ACVMField[]> {
80
- const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
81
- const parsedTreeId = frToNumber(fromACVMField(treeId));
82
- const parsedLeafValue = fromACVMField(leafValue);
72
+ ): Promise<(ACVMField | ACVMField[])[]> {
73
+ const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
74
+ const parsedTreeId = Fr.fromString(treeId).toNumber();
75
+ const parsedLeafValue = Fr.fromString(leafValue);
83
76
 
84
77
  const witness = await this.typedOracle.getMembershipWitness(parsedBlockNumber, parsedTreeId, parsedLeafValue);
85
78
  if (!witness) {
@@ -87,29 +80,29 @@ export class Oracle {
87
80
  `Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`,
88
81
  );
89
82
  }
90
- return witness.map(toACVMField);
83
+ return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
91
84
  }
92
85
 
93
86
  async getNullifierMembershipWitness(
94
87
  [blockNumber]: ACVMField[],
95
88
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
96
- ): Promise<ACVMField[]> {
97
- const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
98
- const parsedNullifier = fromACVMField(nullifier);
89
+ ): Promise<(ACVMField | ACVMField[])[]> {
90
+ const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
91
+ const parsedNullifier = Fr.fromString(nullifier);
99
92
 
100
93
  const witness = await this.typedOracle.getNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
101
94
  if (!witness) {
102
95
  throw new Error(`Nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
103
96
  }
104
- return witness.toFields().map(toACVMField);
97
+ return witness.toNoirRepresentation();
105
98
  }
106
99
 
107
100
  async getLowNullifierMembershipWitness(
108
101
  [blockNumber]: ACVMField[],
109
102
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
110
- ): Promise<ACVMField[]> {
111
- const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
112
- const parsedNullifier = fromACVMField(nullifier);
103
+ ): Promise<(ACVMField | ACVMField[])[]> {
104
+ const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
105
+ const parsedNullifier = Fr.fromString(nullifier);
113
106
 
114
107
  const witness = await this.typedOracle.getLowNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
115
108
  if (!witness) {
@@ -117,22 +110,25 @@ export class Oracle {
117
110
  `Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`,
118
111
  );
119
112
  }
120
- return witness.toFields().map(toACVMField);
113
+ return witness.toNoirRepresentation();
121
114
  }
122
115
 
123
- async getPublicDataTreeWitness([blockNumber]: ACVMField[], [leafSlot]: ACVMField[]): Promise<ACVMField[]> {
124
- const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
125
- const parsedLeafSlot = fromACVMField(leafSlot);
116
+ async getPublicDataWitness(
117
+ [blockNumber]: ACVMField[],
118
+ [leafSlot]: ACVMField[],
119
+ ): Promise<(ACVMField | ACVMField[])[]> {
120
+ const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
121
+ const parsedLeafSlot = Fr.fromString(leafSlot);
126
122
 
127
- const witness = await this.typedOracle.getPublicDataTreeWitness(parsedBlockNumber, parsedLeafSlot);
123
+ const witness = await this.typedOracle.getPublicDataWitness(parsedBlockNumber, parsedLeafSlot);
128
124
  if (!witness) {
129
125
  throw new Error(`Public data witness not found for slot ${parsedLeafSlot} at block ${parsedBlockNumber}.`);
130
126
  }
131
- return witness.toFields().map(toACVMField);
127
+ return witness.toNoirRepresentation();
132
128
  }
133
129
 
134
130
  async getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
135
- const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
131
+ const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
136
132
 
137
133
  const header = await this.typedOracle.getBlockHeader(parsedBlockNumber);
138
134
  if (!header) {
@@ -141,20 +137,20 @@ export class Oracle {
141
137
  return header.toFields().map(toACVMField);
142
138
  }
143
139
 
144
- async getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[]> {
145
- const messageHashField = fromACVMField(messageHash);
140
+ async getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
141
+ const messageHashField = Fr.fromString(messageHash);
146
142
  const witness = await this.typedOracle.getAuthWitness(messageHashField);
147
143
  if (!witness) {
148
144
  throw new Error(`Unknown auth witness for message hash ${messageHashField}`);
149
145
  }
150
- return witness.map(toACVMField);
146
+ return [witness.map(toACVMField)];
151
147
  }
152
148
 
153
- async getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[]> {
154
- const parsedAddress = AztecAddress.fromField(fromACVMField(address));
149
+ async getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
150
+ const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
155
151
  const { publicKeys, partialAddress } = await this.typedOracle.getCompleteAddress(parsedAddress);
156
152
 
157
- return [...publicKeys.toFields(), partialAddress].map(toACVMField);
153
+ return [[...publicKeys.toFields(), partialAddress].map(toACVMField)];
158
154
  }
159
155
 
160
156
  async getNotes(
@@ -173,14 +169,14 @@ export class Oracle {
173
169
  [offset]: ACVMField[],
174
170
  [status]: ACVMField[],
175
171
  [returnSize]: ACVMField[],
176
- ): Promise<ACVMField[]> {
172
+ ): Promise<ACVMField[][]> {
177
173
  const noteDatas = await this.typedOracle.getNotes(
178
- fromACVMField(storageSlot),
174
+ Fr.fromString(storageSlot),
179
175
  +numSelects,
180
176
  selectByIndexes.map(s => +s),
181
177
  selectByOffsets.map(s => +s),
182
178
  selectByLengths.map(s => +s),
183
- selectValues.map(fromACVMField),
179
+ selectValues.map(Fr.fromString),
184
180
  selectComparators.map(s => +s),
185
181
  sortByIndexes.map(s => +s),
186
182
  sortByOffsets.map(s => +s),
@@ -216,7 +212,7 @@ export class Oracle {
216
212
  }
217
213
 
218
214
  const paddedZeros = Array(returnFieldSize - returnData.length).fill(toACVMField(0));
219
- return returnData.concat(paddedZeros);
215
+ return [returnData.concat(paddedZeros)];
220
216
  }
221
217
 
222
218
  notifyCreatedNote(
@@ -225,47 +221,47 @@ export class Oracle {
225
221
  note: ACVMField[],
226
222
  [noteHash]: ACVMField[],
227
223
  [counter]: ACVMField[],
228
- ): ACVMField {
224
+ ): Promise<ACVMField[]> {
229
225
  this.typedOracle.notifyCreatedNote(
230
- fromACVMField(storageSlot),
231
- NoteSelector.fromField(fromACVMField(noteTypeId)),
232
- note.map(fromACVMField),
233
- fromACVMField(noteHash),
226
+ Fr.fromString(storageSlot),
227
+ NoteSelector.fromField(Fr.fromString(noteTypeId)),
228
+ note.map(Fr.fromString),
229
+ Fr.fromString(noteHash),
234
230
  +counter,
235
231
  );
236
- return toACVMField(0);
232
+ return Promise.resolve([]);
237
233
  }
238
234
 
239
235
  async notifyNullifiedNote(
240
236
  [innerNullifier]: ACVMField[],
241
237
  [noteHash]: ACVMField[],
242
238
  [counter]: ACVMField[],
243
- ): Promise<ACVMField> {
244
- await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(noteHash), +counter);
245
- return toACVMField(0);
239
+ ): Promise<ACVMField[]> {
240
+ await this.typedOracle.notifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
241
+ return [];
246
242
  }
247
243
 
248
- async notifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField> {
249
- await this.typedOracle.notifyCreatedNullifier(fromACVMField(innerNullifier));
250
- return toACVMField(0);
244
+ async notifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
245
+ await this.typedOracle.notifyCreatedNullifier(Fr.fromString(innerNullifier));
246
+ return [];
251
247
  }
252
248
 
253
- async checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField> {
254
- const exists = await this.typedOracle.checkNullifierExists(fromACVMField(innerNullifier));
255
- return toACVMField(exists);
249
+ async checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
250
+ const exists = await this.typedOracle.checkNullifierExists(Fr.fromString(innerNullifier));
251
+ return [toACVMField(exists)];
256
252
  }
257
253
 
258
254
  async getL1ToL2MembershipWitness(
259
255
  [contractAddress]: ACVMField[],
260
256
  [messageHash]: ACVMField[],
261
257
  [secret]: ACVMField[],
262
- ): Promise<ACVMField[]> {
258
+ ): Promise<(ACVMField | ACVMField[])[]> {
263
259
  const message = await this.typedOracle.getL1ToL2MembershipWitness(
264
260
  AztecAddress.fromString(contractAddress),
265
- fromACVMField(messageHash),
266
- fromACVMField(secret),
261
+ Fr.fromString(messageHash),
262
+ Fr.fromString(secret),
267
263
  );
268
- return message.toFields().map(toACVMField);
264
+ return message.toNoirRepresentation();
269
265
  }
270
266
 
271
267
  async storageRead(
@@ -273,32 +269,38 @@ export class Oracle {
273
269
  [startStorageSlot]: ACVMField[],
274
270
  [blockNumber]: ACVMField[],
275
271
  [numberOfElements]: ACVMField[],
276
- ): Promise<ACVMField[]> {
272
+ ): Promise<ACVMField[][]> {
277
273
  const values = await this.typedOracle.storageRead(
278
- new AztecAddress(fromACVMField(contractAddress)),
279
- fromACVMField(startStorageSlot),
274
+ new AztecAddress(Fr.fromString(contractAddress)),
275
+ Fr.fromString(startStorageSlot),
280
276
  +blockNumber,
281
277
  +numberOfElements,
282
278
  );
283
- return values.map(toACVMField);
279
+ return [values.map(toACVMField)];
284
280
  }
285
281
 
286
282
  async storageWrite([startStorageSlot]: ACVMField[], values: ACVMField[]): Promise<ACVMField[]> {
287
- const newValues = await this.typedOracle.storageWrite(fromACVMField(startStorageSlot), values.map(fromACVMField));
283
+ const newValues = await this.typedOracle.storageWrite(Fr.fromString(startStorageSlot), values.map(Fr.fromString));
288
284
  return newValues.map(toACVMField);
289
285
  }
290
286
 
291
- notifyCreatedContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): void {
292
- const logPayload = message.map(fromACVMField);
293
- const log = new ContractClassLog(new AztecAddress(fromACVMField(contractAddress)), logPayload);
287
+ notifyCreatedContractClassLog(
288
+ [contractAddress]: ACVMField[],
289
+ message: ACVMField[],
290
+ [counter]: ACVMField[],
291
+ ): Promise<ACVMField[]> {
292
+ const logPayload = message.map(Fr.fromString);
293
+ const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logPayload);
294
294
 
295
295
  this.typedOracle.notifyCreatedContractClassLog(log, +counter);
296
+ return Promise.resolve([]);
296
297
  }
297
298
 
298
- debugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): void {
299
- const messageStr = message.map(acvmField => String.fromCharCode(fromACVMField(acvmField).toNumber())).join('');
300
- const fieldsFr = fields.map(fromACVMField);
299
+ debugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): Promise<ACVMField[]> {
300
+ const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
301
+ const fieldsFr = fields.map(Fr.fromString);
301
302
  this.typedOracle.debugLog(messageStr, fieldsFr);
303
+ return Promise.resolve([]);
302
304
  }
303
305
 
304
306
  async callPrivateFunction(
@@ -307,72 +309,71 @@ export class Oracle {
307
309
  [argsHash]: ACVMField[],
308
310
  [sideEffectCounter]: ACVMField[],
309
311
  [isStaticCall]: ACVMField[],
310
- ): Promise<ACVMField[]> {
312
+ ): Promise<ACVMField[][]> {
311
313
  const { endSideEffectCounter, returnsHash } = await this.typedOracle.callPrivateFunction(
312
- AztecAddress.fromField(fromACVMField(contractAddress)),
313
- FunctionSelector.fromField(fromACVMField(functionSelector)),
314
- fromACVMField(argsHash),
315
- frToNumber(fromACVMField(sideEffectCounter)),
316
- frToBoolean(fromACVMField(isStaticCall)),
314
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
315
+ FunctionSelector.fromField(Fr.fromString(functionSelector)),
316
+ Fr.fromString(argsHash),
317
+ Fr.fromString(sideEffectCounter).toNumber(),
318
+ Fr.fromString(isStaticCall).toBool(),
317
319
  );
318
- return [endSideEffectCounter, returnsHash].map(toACVMField);
320
+ return [[endSideEffectCounter, returnsHash].map(toACVMField)];
319
321
  }
320
322
 
321
- async enqueuePublicFunctionCall(
323
+ async notifyEnqueuedPublicFunctionCall(
322
324
  [contractAddress]: ACVMField[],
323
- [functionSelector]: ACVMField[],
324
- [argsHash]: ACVMField[],
325
+ [calldataHash]: ACVMField[],
325
326
  [sideEffectCounter]: ACVMField[],
326
327
  [isStaticCall]: ACVMField[],
327
- ): Promise<ACVMField> {
328
- const newArgsHash = await this.typedOracle.enqueuePublicFunctionCall(
328
+ ): Promise<ACVMField[]> {
329
+ await this.typedOracle.notifyEnqueuedPublicFunctionCall(
329
330
  AztecAddress.fromString(contractAddress),
330
- FunctionSelector.fromField(fromACVMField(functionSelector)),
331
- fromACVMField(argsHash),
332
- frToNumber(fromACVMField(sideEffectCounter)),
333
- frToBoolean(fromACVMField(isStaticCall)),
331
+ Fr.fromString(calldataHash),
332
+ Fr.fromString(sideEffectCounter).toNumber(),
333
+ Fr.fromString(isStaticCall).toBool(),
334
334
  );
335
- return toACVMField(newArgsHash);
335
+ return [];
336
336
  }
337
337
 
338
- async setPublicTeardownFunctionCall(
338
+ async notifySetPublicTeardownFunctionCall(
339
339
  [contractAddress]: ACVMField[],
340
- [functionSelector]: ACVMField[],
341
- [argsHash]: ACVMField[],
340
+ [calldataHash]: ACVMField[],
342
341
  [sideEffectCounter]: ACVMField[],
343
342
  [isStaticCall]: ACVMField[],
344
- ): Promise<ACVMField> {
345
- const newArgsHash = await this.typedOracle.setPublicTeardownFunctionCall(
343
+ ): Promise<ACVMField[]> {
344
+ await this.typedOracle.notifySetPublicTeardownFunctionCall(
346
345
  AztecAddress.fromString(contractAddress),
347
- FunctionSelector.fromField(fromACVMField(functionSelector)),
348
- fromACVMField(argsHash),
349
- frToNumber(fromACVMField(sideEffectCounter)),
350
- frToBoolean(fromACVMField(isStaticCall)),
346
+ Fr.fromString(calldataHash),
347
+ Fr.fromString(sideEffectCounter).toNumber(),
348
+ Fr.fromString(isStaticCall).toBool(),
351
349
  );
352
- return toACVMField(newArgsHash);
350
+ return [];
353
351
  }
354
352
 
355
- notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]) {
356
- this.typedOracle.notifySetMinRevertibleSideEffectCounter(frToNumber(fromACVMField(minRevertibleSideEffectCounter)));
353
+ notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
354
+ this.typedOracle.notifySetMinRevertibleSideEffectCounter(Fr.fromString(minRevertibleSideEffectCounter).toNumber());
355
+ return Promise.resolve([]);
357
356
  }
358
357
 
359
- async getIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
358
+ async getIndexedTaggingSecretAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[][]> {
360
359
  const taggingSecret = await this.typedOracle.getIndexedTaggingSecretAsSender(
361
360
  AztecAddress.fromString(sender),
362
361
  AztecAddress.fromString(recipient),
363
362
  );
364
- return taggingSecret.toFields().map(toACVMField);
363
+ return [taggingSecret.toFields().map(toACVMField)];
365
364
  }
366
365
 
367
- async incrementAppTaggingSecretIndexAsSender([sender]: ACVMField[], [recipient]: ACVMField[]) {
366
+ async incrementAppTaggingSecretIndexAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
368
367
  await this.typedOracle.incrementAppTaggingSecretIndexAsSender(
369
368
  AztecAddress.fromString(sender),
370
369
  AztecAddress.fromString(recipient),
371
370
  );
371
+ return [];
372
372
  }
373
373
 
374
- async syncNotes() {
374
+ async syncNotes(): Promise<ACVMField[]> {
375
375
  await this.typedOracle.syncNotes();
376
+ return [];
376
377
  }
377
378
 
378
379
  async deliverNote(
@@ -385,26 +386,26 @@ export class Oracle {
385
386
  [nullifier]: ACVMField[],
386
387
  [txHash]: ACVMField[],
387
388
  [recipient]: ACVMField[],
388
- ): Promise<ACVMField> {
389
+ ): Promise<ACVMField[]> {
389
390
  // TODO(#10728): try-catch this block and return false if we get an exception so that the contract can decide what
390
391
  // to do if a note fails delivery (e.g. not increment the tagging index, or add it to some pending work list).
391
392
  // Delivery might fail due to temporary issues, such as poor node connectivity.
392
393
  await this.typedOracle.deliverNote(
393
394
  AztecAddress.fromString(contractAddress),
394
- fromACVMField(storageSlot),
395
- fromACVMField(nonce),
395
+ Fr.fromString(storageSlot),
396
+ Fr.fromString(nonce),
396
397
  fromBoundedVec(content, contentLength),
397
- fromACVMField(noteHash),
398
- fromACVMField(nullifier),
399
- fromACVMField(txHash),
398
+ Fr.fromString(noteHash),
399
+ Fr.fromString(nullifier),
400
+ Fr.fromString(txHash),
400
401
  AztecAddress.fromString(recipient),
401
402
  );
402
403
 
403
- return toACVMField(true);
404
+ return [toACVMField(true)];
404
405
  }
405
406
 
406
407
  async getLogByTag([tag]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
407
- const log = await this.typedOracle.getLogByTag(fromACVMField(tag));
408
+ const log = await this.typedOracle.getLogByTag(Fr.fromString(tag));
408
409
 
409
410
  if (log == null) {
410
411
  return [toACVMField(0), ...LogWithTxData.noirSerializationOfEmpty().map(toACVMFieldSingleOrArray)];
@@ -413,12 +414,13 @@ export class Oracle {
413
414
  }
414
415
  }
415
416
 
416
- async storeCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[], capsule: ACVMField[]) {
417
+ async storeCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[], capsule: ACVMField[]): Promise<ACVMField[]> {
417
418
  await this.typedOracle.storeCapsule(
418
- AztecAddress.fromField(fromACVMField(contractAddress)),
419
- fromACVMField(slot),
420
- capsule.map(fromACVMField),
419
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
420
+ Fr.fromString(slot),
421
+ capsule.map(Fr.fromString),
421
422
  );
423
+ return [];
422
424
  }
423
425
 
424
426
  async loadCapsule(
@@ -427,23 +429,24 @@ export class Oracle {
427
429
  [tSize]: ACVMField[],
428
430
  ): Promise<(ACVMField | ACVMField[])[]> {
429
431
  const values = await this.typedOracle.loadCapsule(
430
- AztecAddress.fromField(fromACVMField(contractAddress)),
431
- fromACVMField(slot),
432
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
433
+ Fr.fromString(slot),
432
434
  );
433
435
 
434
436
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
435
437
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
436
438
  if (values === null) {
437
439
  // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
438
- return [toACVMField(0), Array(frToNumber(fromACVMField(tSize))).fill(toACVMField(0))];
440
+ return [toACVMField(0), Array(Fr.fromString(tSize).toNumber()).fill(toACVMField(0))];
439
441
  } else {
440
442
  // Data was found so we set `some` to 1 and return it along with `value`.
441
443
  return [toACVMField(1), values.map(toACVMField)];
442
444
  }
443
445
  }
444
446
 
445
- async deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]) {
446
- await this.typedOracle.deleteCapsule(AztecAddress.fromField(fromACVMField(contractAddress)), fromACVMField(slot));
447
+ async deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
448
+ await this.typedOracle.deleteCapsule(AztecAddress.fromField(Fr.fromString(contractAddress)), Fr.fromString(slot));
449
+ return [];
447
450
  }
448
451
 
449
452
  async copyCapsule(
@@ -451,13 +454,14 @@ export class Oracle {
451
454
  [srcSlot]: ACVMField[],
452
455
  [dstSlot]: ACVMField[],
453
456
  [numEntries]: ACVMField[],
454
- ) {
457
+ ): Promise<ACVMField[]> {
455
458
  await this.typedOracle.copyCapsule(
456
- AztecAddress.fromField(fromACVMField(contractAddress)),
457
- fromACVMField(srcSlot),
458
- fromACVMField(dstSlot),
459
- frToNumber(fromACVMField(numEntries)),
459
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
460
+ Fr.fromString(srcSlot),
461
+ Fr.fromString(dstSlot),
462
+ Fr.fromString(numEntries).toNumber(),
460
463
  );
464
+ return [];
461
465
  }
462
466
 
463
467
  async aes128Decrypt(
@@ -481,8 +485,8 @@ export class Oracle {
481
485
  [ephPKField2]: ACVMField[],
482
486
  ): Promise<ACVMField[]> {
483
487
  const secret = await this.typedOracle.getSharedSecret(
484
- AztecAddress.fromField(fromACVMField(address)),
485
- Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(fromACVMField)),
488
+ AztecAddress.fromField(Fr.fromString(address)),
489
+ Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
486
490
  );
487
491
  return secret.toFields().map(toACVMField);
488
492
  }
@@ -47,8 +47,8 @@ export abstract class TypedOracle {
47
47
  return Fr.random();
48
48
  }
49
49
 
50
- storeInExecutionCache(_values: Fr[]): Promise<Fr> {
51
- return Promise.reject(new OracleMethodNotAvailableError('storeInExecutionCache'));
50
+ storeInExecutionCache(_values: Fr[], _hash: Fr): void {
51
+ throw new OracleMethodNotAvailableError('storeInExecutionCache');
52
52
  }
53
53
 
54
54
  loadFromExecutionCache(_hash: Fr): Promise<Fr[]> {
@@ -87,8 +87,8 @@ export abstract class TypedOracle {
87
87
  return Promise.reject(new OracleMethodNotAvailableError('getNullifierMembershipWitness'));
88
88
  }
89
89
 
90
- getPublicDataTreeWitness(_blockNumber: number, _leafSlot: Fr): Promise<PublicDataWitness | undefined> {
91
- return Promise.reject(new OracleMethodNotAvailableError('getPublicDataTreeWitness'));
90
+ getPublicDataWitness(_blockNumber: number, _leafSlot: Fr): Promise<PublicDataWitness | undefined> {
91
+ return Promise.reject(new OracleMethodNotAvailableError('getPublicDataWitness'));
92
92
  }
93
93
 
94
94
  getLowNullifierMembershipWitness(
@@ -180,24 +180,22 @@ export abstract class TypedOracle {
180
180
  return Promise.reject(new OracleMethodNotAvailableError('callPrivateFunction'));
181
181
  }
182
182
 
183
- enqueuePublicFunctionCall(
183
+ notifyEnqueuedPublicFunctionCall(
184
184
  _targetContractAddress: AztecAddress,
185
- _functionSelector: FunctionSelector,
186
- _argsHash: Fr,
185
+ _calldataHash: Fr,
187
186
  _sideEffectCounter: number,
188
187
  _isStaticCall: boolean,
189
- ): Promise<Fr> {
190
- return Promise.reject(new OracleMethodNotAvailableError('enqueuePublicFunctionCall'));
188
+ ): Promise<void> {
189
+ return Promise.reject(new OracleMethodNotAvailableError('notifyEnqueuedPublicFunctionCall'));
191
190
  }
192
191
 
193
- setPublicTeardownFunctionCall(
192
+ notifySetPublicTeardownFunctionCall(
194
193
  _targetContractAddress: AztecAddress,
195
- _functionSelector: FunctionSelector,
196
- _argsHash: Fr,
194
+ _calldataHash: Fr,
197
195
  _sideEffectCounter: number,
198
196
  _isStaticCall: boolean,
199
- ): Promise<Fr> {
200
- return Promise.reject(new OracleMethodNotAvailableError('setPublicTeardownFunctionCall'));
197
+ ): Promise<void> {
198
+ return Promise.reject(new OracleMethodNotAvailableError('notifySetPublicTeardownFunctionCall'));
201
199
  }
202
200
 
203
201
  notifySetMinRevertibleSideEffectCounter(_minRevertibleSideEffectCounter: number): void {
@@ -1,5 +1,5 @@
1
1
  import type { Fr, Point } from '@aztec/foundation/fields';
2
- import type { FunctionArtifact, FunctionSelector } from '@aztec/stdlib/abi';
2
+ import type { FunctionArtifact, FunctionArtifactWithContractName, FunctionSelector } from '@aztec/stdlib/abi';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { L2Block } from '@aztec/stdlib/block';
5
5
  import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
@@ -49,13 +49,6 @@ export interface ExecutionDataProvider extends CommitmentsDBInterface {
49
49
  */
50
50
  getCompleteAddress(account: AztecAddress): Promise<CompleteAddress>;
51
51
 
52
- /**
53
- * Retrieve the auth witness for a given message hash.
54
- * @param messageHash - The message hash.
55
- * @returns A Promise that resolves to an array of field elements representing the auth witness.
56
- */
57
- getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
58
-
59
52
  /**
60
53
  * Retrieve keys associated with a specific master public key and app address.
61
54
  * @param pkMHash - The master public key hash.
@@ -90,7 +83,10 @@ export interface ExecutionDataProvider extends CommitmentsDBInterface {
90
83
  * @param selector - The corresponding function selector.
91
84
  * @returns A Promise that resolves to a FunctionArtifact object.
92
85
  */
93
- getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<FunctionArtifact>;
86
+ getFunctionArtifact(
87
+ contractAddress: AztecAddress,
88
+ selector: FunctionSelector,
89
+ ): Promise<FunctionArtifactWithContractName>;
94
90
 
95
91
  /**
96
92
  * Generates a stable function name for debug purposes.
@@ -157,7 +153,7 @@ export interface ExecutionDataProvider extends CommitmentsDBInterface {
157
153
  * @param blockNumber - The block number at which to get the witness.
158
154
  * @param leafSlot - The slot of the public data in the public data tree.
159
155
  */
160
- getPublicDataTreeWitness(blockNumber: number, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
156
+ getPublicDataWitness(blockNumber: number, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
161
157
 
162
158
  /**
163
159
  * Gets the storage value at the given contract storage slot.