@aztec/txe 0.0.1-commit.a89ec08 → 0.0.1-commit.aa0c64f

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 (168) hide show
  1. package/dest/AuthRegistry-QVGDDH5X.js +3 -0
  2. package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
  3. package/dest/ContractClassRegistry-VWR3F42P.js +3 -0
  4. package/dest/ContractClassRegistry-VWR3F42P.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-FHIWE33X.js +3 -0
  6. package/dest/ContractInstanceRegistry-FHIWE33X.js.map +7 -0
  7. package/dest/FeeJuice-SAOWVGG7.js +3 -0
  8. package/dest/FeeJuice-SAOWVGG7.js.map +7 -0
  9. package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
  10. package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
  12. package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
  13. package/dest/SchnorrAccount-NME3E45O.js +3 -0
  14. package/dest/SchnorrAccount-NME3E45O.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js.map +7 -0
  17. package/dest/bin/check_txe_oracle_version.d.ts +2 -0
  18. package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
  19. package/dest/bin/check_txe_oracle_version.js +53 -0
  20. package/dest/bin/index.js +3 -30
  21. package/dest/bin/index.js.map +7 -0
  22. package/dest/bin/oracle_test_server.d.ts +3 -0
  23. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  24. package/dest/bin/oracle_test_server.js +41 -0
  25. package/dest/chunk-2XE2OXLY.js +260 -0
  26. package/dest/chunk-2XE2OXLY.js.map +7 -0
  27. package/dest/chunk-32UHX7YY.js +3 -0
  28. package/dest/chunk-32UHX7YY.js.map +7 -0
  29. package/dest/chunk-543AD4I4.js +304 -0
  30. package/dest/chunk-543AD4I4.js.map +7 -0
  31. package/dest/constants.d.ts +5 -1
  32. package/dest/constants.d.ts.map +1 -1
  33. package/dest/constants.js +9 -1
  34. package/dest/dispatcher_pool.d.ts +67 -0
  35. package/dest/dispatcher_pool.d.ts.map +1 -0
  36. package/dest/dispatcher_pool.js +286 -0
  37. package/dest/index.d.ts +51 -7
  38. package/dest/index.d.ts.map +1 -1
  39. package/dest/index.js +72 -190
  40. package/dest/metafile.json +38759 -0
  41. package/dest/msgpackr_fr_extension.d.ts +2 -0
  42. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  43. package/dest/msgpackr_fr_extension.js +21 -0
  44. package/dest/oracle/interfaces.d.ts +47 -9
  45. package/dest/oracle/interfaces.d.ts.map +1 -1
  46. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  47. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  48. package/dest/oracle/tagging_secret_strategy.js +12 -0
  49. package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +200 -0
  52. package/dest/oracle/test-resolver/index.d.ts +9 -0
  53. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  54. package/dest/oracle/test-resolver/index.js +32 -0
  55. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  56. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  57. package/dest/oracle/test-resolver/resolver.js +181 -0
  58. package/dest/oracle/txe_oracle_public_context.d.ts +26 -2
  59. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  60. package/dest/oracle/txe_oracle_public_context.js +49 -1
  61. package/dest/oracle/txe_oracle_registry.d.ts +172 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +767 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +52 -17
  65. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  66. package/dest/oracle/txe_oracle_top_level_context.js +542 -299
  67. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  68. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_version.js +14 -0
  70. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  71. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  72. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  73. package/dest/rpc_server.d.ts +14 -0
  74. package/dest/rpc_server.d.ts.map +1 -0
  75. package/dest/rpc_server.js +78 -0
  76. package/dest/rpc_translator.d.ts +115 -266
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +785 -731
  79. package/dest/server.bundle.js +3 -0
  80. package/dest/server.bundle.js.map +7 -0
  81. package/dest/state_machine/archiver.d.ts +4 -3
  82. package/dest/state_machine/archiver.d.ts.map +1 -1
  83. package/dest/state_machine/archiver.js +24 -14
  84. package/dest/state_machine/dummy_p2p_client.d.ts +16 -7
  85. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  86. package/dest/state_machine/dummy_p2p_client.js +25 -4
  87. package/dest/state_machine/global_variable_builder.d.ts +10 -6
  88. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  89. package/dest/state_machine/global_variable_builder.js +8 -5
  90. package/dest/state_machine/index.d.ts +11 -7
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +50 -14
  93. package/dest/state_machine/mock_epoch_cache.d.ts +16 -3
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +29 -2
  96. package/dest/state_machine/synchronizer.d.ts +10 -2
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +19 -6
  99. package/dest/txe_session.d.ts +90 -20
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +316 -66
  102. package/dest/utils/block_creation.d.ts +2 -2
  103. package/dest/utils/block_creation.d.ts.map +1 -1
  104. package/dest/utils/block_creation.js +2 -2
  105. package/dest/utils/encoding.d.ts +192 -0
  106. package/dest/utils/encoding.d.ts.map +1 -0
  107. package/dest/{util → utils}/encoding.js +7 -2
  108. package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
  109. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  110. package/dest/utils/tx_effect_creation.d.ts +1 -1
  111. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  112. package/dest/utils/tx_effect_creation.js +0 -1
  113. package/dest/{util → utils}/txe_account_store.d.ts +1 -1
  114. package/dest/utils/txe_account_store.d.ts.map +1 -0
  115. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  116. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  117. package/dest/utils/txe_artifact_resolver.js +161 -0
  118. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  119. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  120. package/dest/{util → utils}/txe_public_contract_data_source.js +8 -7
  121. package/dest/worker.bundle.js +3 -0
  122. package/dest/worker.bundle.js.map +7 -0
  123. package/dest/worker.d.ts +2 -0
  124. package/dest/worker.d.ts.map +1 -0
  125. package/dest/worker.js +92 -0
  126. package/package.json +38 -21
  127. package/src/bin/check_txe_oracle_version.ts +67 -0
  128. package/src/bin/index.ts +11 -2
  129. package/src/bin/oracle_test_server.ts +51 -0
  130. package/src/constants.ts +11 -1
  131. package/src/dispatcher_pool.ts +317 -0
  132. package/src/index.ts +99 -227
  133. package/src/msgpackr_fr_extension.ts +23 -0
  134. package/src/oracle/interfaces.ts +47 -8
  135. package/src/oracle/tagging_secret_strategy.ts +25 -0
  136. package/src/oracle/test-resolver/default_fixtures.ts +271 -0
  137. package/src/oracle/test-resolver/index.ts +44 -0
  138. package/src/oracle/test-resolver/resolver.ts +245 -0
  139. package/src/oracle/txe_oracle_public_context.ts +62 -0
  140. package/src/oracle/txe_oracle_registry.ts +556 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +344 -114
  142. package/src/oracle/txe_oracle_version.ts +17 -0
  143. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  144. package/src/rpc_server.ts +87 -0
  145. package/src/rpc_translator.ts +867 -1020
  146. package/src/state_machine/archiver.ts +37 -16
  147. package/src/state_machine/dummy_p2p_client.ts +44 -11
  148. package/src/state_machine/global_variable_builder.ts +12 -11
  149. package/src/state_machine/index.ts +62 -31
  150. package/src/state_machine/mock_epoch_cache.ts +38 -3
  151. package/src/state_machine/synchronizer.ts +27 -6
  152. package/src/txe_session.ts +548 -79
  153. package/src/utils/block_creation.ts +2 -1
  154. package/src/{util → utils}/encoding.ts +8 -2
  155. package/src/utils/tx_effect_creation.ts +0 -2
  156. package/src/utils/txe_artifact_resolver.ts +217 -0
  157. package/src/{util → utils}/txe_public_contract_data_source.ts +6 -6
  158. package/src/worker.ts +98 -0
  159. package/dest/util/encoding.d.ts +0 -719
  160. package/dest/util/encoding.d.ts.map +0 -1
  161. package/dest/util/expected_failure_error.d.ts.map +0 -1
  162. package/dest/util/txe_account_store.d.ts.map +0 -1
  163. package/dest/util/txe_public_contract_data_source.d.ts +0 -20
  164. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  165. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  166. /package/dest/{util → utils}/txe_account_store.js +0 -0
  167. /package/src/{util → utils}/expected_failure_error.ts +0 -0
  168. /package/src/{util → utils}/txe_account_store.ts +0 -0
@@ -1,37 +1,9 @@
1
- import type { ContractInstanceWithAddress } from '@aztec/aztec.js/contracts';
2
- import { Fr, Point } from '@aztec/aztec.js/fields';
3
- import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX } from '@aztec/constants';
4
- import { BlockNumber } from '@aztec/foundation/branded-types';
5
- import {
6
- type IMiscOracle,
7
- type IPrivateExecutionOracle,
8
- type IUtilityExecutionOracle,
9
- packAsHintedNote,
10
- } from '@aztec/pxe/simulator';
11
- import { type ContractArtifact, EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
12
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
13
- import { BlockHash } from '@aztec/stdlib/block';
1
+ import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from '@aztec/pxe/simulator';
14
2
 
15
3
  import type { IAvmExecutionOracle, ITxeExecutionOracle } from './oracle/interfaces.js';
4
+ import { callTxeHandler } from './oracle/txe_oracle_registry.js';
16
5
  import type { TXESessionStateHandler } from './txe_session.js';
17
- import {
18
- type ForeignCallArray,
19
- type ForeignCallSingle,
20
- addressFromSingle,
21
- arrayOfArraysToBoundedVecOfArrays,
22
- arrayToBoundedVec,
23
- bufferToU8Array,
24
- fromArray,
25
- fromSingle,
26
- fromUintArray,
27
- fromUintBoundedVec,
28
- toArray,
29
- toForeignCallResult,
30
- toSingle,
31
- } from './util/encoding.js';
32
-
33
- const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
34
- const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
6
+ import type { ForeignCallArgs } from './utils/encoding.js';
35
7
 
36
8
  export class UnavailableOracleError extends Error {
37
9
  constructor(oracleName: string) {
@@ -102,61 +74,54 @@ export class RPCTranslator {
102
74
  return this.oracleHandler;
103
75
  }
104
76
 
77
+ // eslint-disable-next-line camelcase
78
+ aztec_txe_assertCompatibleOracleVersion(...inputs: ForeignCallArgs) {
79
+ return callTxeHandler({
80
+ oracle: 'aztec_txe_assertCompatibleOracleVersion',
81
+ inputs,
82
+ handler: ([major, minor]) => {
83
+ this.stateHandler.setTxeOracleVersion(major, minor);
84
+ },
85
+ });
86
+ }
87
+
105
88
  // TXE session state transition functions - these get handled by the state handler
106
89
 
107
90
  // eslint-disable-next-line camelcase
108
- async aztec_txe_setTopLevelTXEContext() {
109
- await this.stateHandler.enterTopLevelState();
110
-
111
- return toForeignCallResult([]);
91
+ aztec_txe_setTopLevelTXEContext() {
92
+ return callTxeHandler({
93
+ oracle: 'aztec_txe_setTopLevelTXEContext',
94
+ inputs: [],
95
+ handler: () => this.stateHandler.enterTopLevelState(),
96
+ });
112
97
  }
113
98
 
114
99
  // eslint-disable-next-line camelcase
115
- async aztec_txe_setPrivateTXEContext(
116
- foreignContractAddressIsSome: ForeignCallSingle,
117
- foreignContractAddressValue: ForeignCallSingle,
118
- foreignAnchorBlockNumberIsSome: ForeignCallSingle,
119
- foreignAnchorBlockNumberValue: ForeignCallSingle,
120
- ) {
121
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool()
122
- ? AztecAddress.fromField(fromSingle(foreignContractAddressValue))
123
- : undefined;
124
-
125
- const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool()
126
- ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber())
127
- : undefined;
128
-
129
- const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
130
-
131
- return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
100
+ aztec_txe_setPrivateTXEContext(...inputs: ForeignCallArgs) {
101
+ return callTxeHandler({
102
+ oracle: 'aztec_txe_setPrivateTXEContext',
103
+ inputs,
104
+ handler: ([contractAddress, anchorBlockNumber, gasSettings]) =>
105
+ this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber, gasSettings),
106
+ });
132
107
  }
133
108
 
134
109
  // eslint-disable-next-line camelcase
135
- async aztec_txe_setPublicTXEContext(
136
- foreignContractAddressIsSome: ForeignCallSingle,
137
- foreignContractAddressValue: ForeignCallSingle,
138
- ) {
139
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool()
140
- ? AztecAddress.fromField(fromSingle(foreignContractAddressValue))
141
- : undefined;
142
-
143
- await this.stateHandler.enterPublicState(contractAddress);
144
-
145
- return toForeignCallResult([]);
110
+ aztec_txe_setPublicTXEContext(...inputs: ForeignCallArgs) {
111
+ return callTxeHandler({
112
+ oracle: 'aztec_txe_setPublicTXEContext',
113
+ inputs,
114
+ handler: ([contractAddress]) => this.stateHandler.enterPublicState(contractAddress),
115
+ });
146
116
  }
147
117
 
148
118
  // eslint-disable-next-line camelcase
149
- async aztec_txe_setUtilityTXEContext(
150
- foreignContractAddressIsSome: ForeignCallSingle,
151
- foreignContractAddressValue: ForeignCallSingle,
152
- ) {
153
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool()
154
- ? AztecAddress.fromField(fromSingle(foreignContractAddressValue))
155
- : undefined;
156
-
157
- await this.stateHandler.enterUtilityState(contractAddress);
158
-
159
- return toForeignCallResult([]);
119
+ aztec_txe_setUtilityTXEContext(...inputs: ForeignCallArgs) {
120
+ return callTxeHandler({
121
+ oracle: 'aztec_txe_setUtilityTXEContext',
122
+ inputs,
123
+ handler: ([contractAddress]) => this.stateHandler.enterUtilityState(contractAddress),
124
+ });
160
125
  }
161
126
 
162
127
  // Other oracles - these get handled by the oracle handler
@@ -165,842 +130,690 @@ export class RPCTranslator {
165
130
 
166
131
  // eslint-disable-next-line camelcase
167
132
  aztec_txe_getDefaultAddress() {
168
- const defaultAddress = this.handlerAsTxe().getDefaultAddress();
169
-
170
- return toForeignCallResult([toSingle(defaultAddress)]);
133
+ return callTxeHandler({
134
+ oracle: 'aztec_txe_getDefaultAddress',
135
+ inputs: [],
136
+ handler: () => this.handlerAsTxe().getDefaultAddress(),
137
+ });
171
138
  }
172
139
 
173
140
  // eslint-disable-next-line camelcase
174
- async aztec_txe_getNextBlockNumber() {
175
- const nextBlockNumber = await this.handlerAsTxe().getNextBlockNumber();
176
-
177
- return toForeignCallResult([toSingle(nextBlockNumber)]);
141
+ aztec_txe_getNextBlockNumber() {
142
+ return callTxeHandler({
143
+ oracle: 'aztec_txe_getNextBlockNumber',
144
+ inputs: [],
145
+ handler: () => this.handlerAsTxe().getNextBlockNumber(),
146
+ });
178
147
  }
179
148
 
180
149
  // eslint-disable-next-line camelcase
181
- async aztec_txe_getNextBlockTimestamp() {
182
- const nextBlockTimestamp = await this.handlerAsTxe().getNextBlockTimestamp();
183
-
184
- return toForeignCallResult([toSingle(nextBlockTimestamp)]);
150
+ aztec_txe_getNextBlockTimestamp() {
151
+ return callTxeHandler({
152
+ oracle: 'aztec_txe_getNextBlockTimestamp',
153
+ inputs: [],
154
+ handler: () => this.handlerAsTxe().getNextBlockTimestamp(),
155
+ });
185
156
  }
186
157
 
187
158
  // eslint-disable-next-line camelcase
188
- async aztec_txe_advanceBlocksBy(foreignBlocks: ForeignCallSingle) {
189
- const blocks = fromSingle(foreignBlocks).toNumber();
190
-
191
- await this.handlerAsTxe().advanceBlocksBy(blocks);
192
-
193
- return toForeignCallResult([]);
159
+ aztec_txe_advanceBlocksBy(...inputs: ForeignCallArgs) {
160
+ return callTxeHandler({
161
+ oracle: 'aztec_txe_advanceBlocksBy',
162
+ inputs,
163
+ handler: ([blocks]) => this.handlerAsTxe().advanceBlocksBy(blocks),
164
+ });
194
165
  }
195
166
 
196
167
  // eslint-disable-next-line camelcase
197
- aztec_txe_advanceTimestampBy(foreignDuration: ForeignCallSingle) {
198
- const duration = fromSingle(foreignDuration).toBigInt();
199
-
200
- this.handlerAsTxe().advanceTimestampBy(duration);
201
-
202
- return toForeignCallResult([]);
168
+ aztec_txe_advanceTimestampBy(...inputs: ForeignCallArgs) {
169
+ return callTxeHandler({
170
+ oracle: 'aztec_txe_advanceTimestampBy',
171
+ inputs,
172
+ handler: ([duration]) => this.handlerAsTxe().advanceTimestampBy(duration),
173
+ });
203
174
  }
204
175
 
205
176
  // eslint-disable-next-line camelcase
206
- async aztec_txe_deploy(
207
- artifact: ContractArtifact,
208
- instance: ContractInstanceWithAddress,
209
- foreignSecret: ForeignCallSingle,
210
- ) {
211
- const secret = fromSingle(foreignSecret);
212
-
213
- await this.handlerAsTxe().deploy(artifact, instance, secret);
214
-
215
- return toForeignCallResult([
216
- toArray([
217
- instance.salt,
218
- instance.deployer.toField(),
219
- instance.currentContractClassId,
220
- instance.initializationHash,
221
- ...instance.publicKeys.toFields(),
222
- ]),
223
- ]);
177
+ aztec_txe_deploy(...inputs: ForeignCallArgs) {
178
+ return callTxeHandler({
179
+ oracle: 'aztec_txe_deploy',
180
+ inputs,
181
+ handler: ([contractPath, initializer, _, args, secret, salt, deployer]) =>
182
+ this.handlerAsTxe().deploy(contractPath, initializer, args, secret, salt, deployer),
183
+ });
224
184
  }
225
185
 
226
186
  // eslint-disable-next-line camelcase
227
- async aztec_txe_createAccount(foreignSecret: ForeignCallSingle) {
228
- const secret = fromSingle(foreignSecret);
229
-
230
- const completeAddress = await this.handlerAsTxe().createAccount(secret);
231
-
232
- return toForeignCallResult([
233
- toSingle(completeAddress.address),
234
- ...completeAddress.publicKeys.toFields().map(toSingle),
235
- ]);
187
+ aztec_txe_createAccount(...inputs: ForeignCallArgs) {
188
+ return callTxeHandler({
189
+ oracle: 'aztec_txe_createAccount',
190
+ inputs,
191
+ handler: ([secret, partialAddress]) => this.handlerAsTxe().createAccount(secret, partialAddress),
192
+ });
236
193
  }
237
194
 
238
195
  // eslint-disable-next-line camelcase
239
- async aztec_txe_addAccount(
240
- artifact: ContractArtifact,
241
- instance: ContractInstanceWithAddress,
242
- foreignSecret: ForeignCallSingle,
243
- ) {
244
- const secret = fromSingle(foreignSecret);
245
-
246
- const completeAddress = await this.handlerAsTxe().addAccount(artifact, instance, secret);
196
+ aztec_txe_addAccount(...inputs: ForeignCallArgs) {
197
+ return callTxeHandler({
198
+ oracle: 'aztec_txe_addAccount',
199
+ inputs,
200
+ handler: ([secret]) => this.handlerAsTxe().addAccount(secret),
201
+ });
202
+ }
247
203
 
248
- return toForeignCallResult([
249
- toSingle(completeAddress.address),
250
- ...completeAddress.publicKeys.toFields().map(toSingle),
251
- ]);
204
+ // eslint-disable-next-line camelcase
205
+ aztec_txe_addAuthWitness(...inputs: ForeignCallArgs) {
206
+ return callTxeHandler({
207
+ oracle: 'aztec_txe_addAuthWitness',
208
+ inputs,
209
+ handler: ([address, messageHash]) => this.handlerAsTxe().addAuthWitness(address, messageHash),
210
+ });
252
211
  }
253
212
 
254
213
  // eslint-disable-next-line camelcase
255
- async aztec_txe_addAuthWitness(foreignAddress: ForeignCallSingle, foreignMessageHash: ForeignCallSingle) {
256
- const address = addressFromSingle(foreignAddress);
257
- const messageHash = fromSingle(foreignMessageHash);
214
+ aztec_txe_sendL1ToL2Message(...inputs: ForeignCallArgs) {
215
+ return callTxeHandler({
216
+ oracle: 'aztec_txe_sendL1ToL2Message',
217
+ inputs,
218
+ handler: ([content, secretHash, sender, recipient]) =>
219
+ this.handlerAsTxe().sendL1ToL2Message(content, secretHash, sender, recipient),
220
+ });
221
+ }
258
222
 
259
- await this.handlerAsTxe().addAuthWitness(address, messageHash);
223
+ // eslint-disable-next-line camelcase
224
+ aztec_txe_setTaggingSecretStrategies(...inputs: ForeignCallArgs) {
225
+ return callTxeHandler({
226
+ oracle: 'aztec_txe_setTaggingSecretStrategies',
227
+ inputs,
228
+ handler: ([unconstrainedStrategy, constrainedStrategy]) =>
229
+ this.handlerAsTxe().setTaggingSecretStrategies(unconstrainedStrategy, constrainedStrategy),
230
+ });
231
+ }
260
232
 
261
- return toForeignCallResult([]);
233
+ // eslint-disable-next-line camelcase
234
+ aztec_txe_setAuthorizeAllUtilityCallTargets(...inputs: ForeignCallArgs) {
235
+ return callTxeHandler({
236
+ oracle: 'aztec_txe_setAuthorizeAllUtilityCallTargets',
237
+ inputs,
238
+ handler: ([authorizeAll]) => this.handlerAsTxe().setAuthorizeAllUtilityCallTargets(authorizeAll),
239
+ });
262
240
  }
263
241
 
264
242
  // PXE oracles
265
243
 
266
244
  // eslint-disable-next-line camelcase
267
- aztec_utl_assertCompatibleOracleVersionV2(foreignMajor: ForeignCallSingle, foreignMinor: ForeignCallSingle) {
268
- const major = fromSingle(foreignMajor).toNumber();
269
- const minor = fromSingle(foreignMinor).toNumber();
270
-
271
- this.handlerAsMisc().assertCompatibleOracleVersion(major, minor);
272
-
273
- return toForeignCallResult([]);
245
+ aztec_misc_assertCompatibleOracleVersion(...inputs: ForeignCallArgs) {
246
+ return callTxeHandler({
247
+ oracle: 'aztec_misc_assertCompatibleOracleVersion',
248
+ inputs,
249
+ handler: ([major, minor]) => this.handlerAsMisc().assertCompatibleOracleVersion(major, minor),
250
+ });
274
251
  }
275
252
 
276
253
  // eslint-disable-next-line camelcase
277
- aztec_utl_getRandomField() {
278
- const randomField = this.handlerAsMisc().getRandomField();
279
-
280
- return toForeignCallResult([toSingle(randomField)]);
254
+ aztec_misc_getRandomField() {
255
+ return callTxeHandler({
256
+ oracle: 'aztec_misc_getRandomField',
257
+ inputs: [],
258
+ handler: () => this.handlerAsMisc().getRandomField(),
259
+ });
281
260
  }
282
261
 
283
262
  // eslint-disable-next-line camelcase
284
- async aztec_txe_getLastBlockTimestamp() {
285
- const timestamp = await this.handlerAsTxe().getLastBlockTimestamp();
286
-
287
- return toForeignCallResult([toSingle(new Fr(timestamp))]);
263
+ aztec_txe_getLastBlockTimestamp() {
264
+ return callTxeHandler({
265
+ oracle: 'aztec_txe_getLastBlockTimestamp',
266
+ inputs: [],
267
+ handler: () => this.handlerAsTxe().getLastBlockTimestamp(),
268
+ });
288
269
  }
289
270
 
290
271
  // eslint-disable-next-line camelcase
291
- async aztec_txe_getLastTxEffects() {
292
- const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().getLastTxEffects();
293
-
294
- return toForeignCallResult([
295
- toSingle(txHash.hash),
296
- ...arrayToBoundedVec(toArray(noteHashes), MAX_NOTE_HASHES_PER_TX),
297
- ...arrayToBoundedVec(toArray(nullifiers), MAX_NULLIFIERS_PER_TX),
298
- ]);
272
+ aztec_txe_getLastTxEffects() {
273
+ return callTxeHandler({
274
+ oracle: 'aztec_txe_getLastTxEffects',
275
+ inputs: [],
276
+ handler: () => this.handlerAsTxe().getLastTxEffects(),
277
+ });
299
278
  }
300
279
 
301
280
  // eslint-disable-next-line camelcase
302
- async aztec_txe_getPrivateEvents(
303
- foreignSelector: ForeignCallSingle,
304
- foreignContractAddress: ForeignCallSingle,
305
- foreignScope: ForeignCallSingle,
306
- ) {
307
- const selector = EventSelector.fromField(fromSingle(foreignSelector));
308
- const contractAddress = addressFromSingle(foreignContractAddress);
309
- const scope = addressFromSingle(foreignScope);
310
-
311
- // TODO(F-335): Avoid doing the following 2 calls here.
312
- {
313
- await this.handlerAsTxe().syncContractNonOracleMethod(contractAddress, scope, this.stateHandler.getCurrentJob());
314
- // We cycle job to commit the stores after the contract sync.
315
- await this.stateHandler.cycleJob();
316
- }
317
-
318
- const events = await this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
319
-
320
- if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
321
- throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
322
- }
323
-
324
- if (events.some(e => e.length > MAX_EVENT_LEN)) {
325
- throw new Error(`Some private event has length larger than maxLen ${MAX_EVENT_LEN}`);
326
- }
327
-
328
- // This is a workaround as Noir does not currently let us return nested structs with arrays. We instead return a raw
329
- // multidimensional array in get_private_events_oracle and create the BoundedVecs here.
330
- const rawArrayStorage = events
331
- .map(e => e.concat(Array(MAX_EVENT_LEN - e.length).fill(new Fr(0))))
332
- .concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(Array(MAX_EVENT_LEN).fill(new Fr(0))))
333
- .flat();
334
- const eventLengths = events
335
- .map(e => new Fr(e.length))
336
- .concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(new Fr(0)));
337
- const queryLength = new Fr(events.length);
338
-
339
- return toForeignCallResult([toArray(rawArrayStorage), toArray(eventLengths), toSingle(queryLength)]);
281
+ aztec_txe_getLastCallOffchainEffects() {
282
+ return callTxeHandler({
283
+ oracle: 'aztec_txe_getLastCallOffchainEffects',
284
+ inputs: [],
285
+ handler: () => this.stateHandler.getLastCallOffchainEffects(),
286
+ });
340
287
  }
341
288
 
342
289
  // eslint-disable-next-line camelcase
343
- aztec_prv_setHashPreimage(foreignValues: ForeignCallArray, foreignHash: ForeignCallSingle) {
344
- const values = fromArray(foreignValues);
345
- const hash = fromSingle(foreignHash);
346
-
347
- this.handlerAsPrivate().setHashPreimage(values, hash);
348
-
349
- return toForeignCallResult([]);
290
+ aztec_txe_getLastCallContext() {
291
+ return callTxeHandler({
292
+ oracle: 'aztec_txe_getLastCallContext',
293
+ inputs: [],
294
+ handler: () => this.stateHandler.getLastCallContext(),
295
+ });
350
296
  }
351
297
 
352
298
  // eslint-disable-next-line camelcase
353
- async aztec_prv_getHashPreimage(foreignHash: ForeignCallSingle) {
354
- const hash = fromSingle(foreignHash);
355
-
356
- const returns = await this.handlerAsPrivate().getHashPreimage(hash);
357
-
358
- return toForeignCallResult([toArray(returns)]);
299
+ aztec_txe_getPrivateEvents(...inputs: ForeignCallArgs) {
300
+ return callTxeHandler({
301
+ oracle: 'aztec_txe_getPrivateEvents',
302
+ inputs,
303
+ handler: ([selector, contractAddress, scope]) =>
304
+ this.stateHandler.getPrivateEvents(selector, contractAddress, scope),
305
+ });
359
306
  }
360
307
 
361
- // When the argument is a slice, noir automatically adds a length field to oracle call.
362
- // When the argument is an array, we add the field length manually to the signature.
363
308
  // eslint-disable-next-line camelcase
364
- async aztec_utl_log(
365
- foreignLevel: ForeignCallSingle,
366
- foreignMessage: ForeignCallArray,
367
- _foreignLength: ForeignCallSingle,
368
- foreignFields: ForeignCallArray,
369
- ) {
370
- const level = fromSingle(foreignLevel).toNumber();
371
- const message = fromArray(foreignMessage)
372
- .map(field => String.fromCharCode(field.toNumber()))
373
- .join('');
374
- const fields = fromArray(foreignFields);
375
-
376
- await this.handlerAsMisc().log(level, message, fields);
377
-
378
- return toForeignCallResult([]);
309
+ aztec_prv_setHashPreimage(...inputs: ForeignCallArgs) {
310
+ return callTxeHandler({
311
+ oracle: 'aztec_prv_setHashPreimage',
312
+ inputs,
313
+ handler: ([values, hash]) => this.handlerAsPrivate().setHashPreimage(values, hash),
314
+ });
379
315
  }
380
316
 
381
317
  // eslint-disable-next-line camelcase
382
- async aztec_utl_getFromPublicStorage(
383
- foreignBlockHash: ForeignCallSingle,
384
- foreignContractAddress: ForeignCallSingle,
385
- foreignStartStorageSlot: ForeignCallSingle,
386
- foreignNumberOfElements: ForeignCallSingle,
387
- ) {
388
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
389
- const contractAddress = addressFromSingle(foreignContractAddress);
390
- const startStorageSlot = fromSingle(foreignStartStorageSlot);
391
- const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
392
-
393
- const values = await this.handlerAsUtility().getFromPublicStorage(
394
- blockHash,
395
- contractAddress,
396
- startStorageSlot,
397
- numberOfElements,
398
- );
399
-
400
- return toForeignCallResult([toArray(values)]);
318
+ aztec_prv_getHashPreimage(...inputs: ForeignCallArgs) {
319
+ return callTxeHandler({
320
+ oracle: 'aztec_prv_getHashPreimage',
321
+ inputs,
322
+ handler: ([hash]) => this.handlerAsPrivate().getHashPreimage(hash),
323
+ });
401
324
  }
402
325
 
403
326
  // eslint-disable-next-line camelcase
404
- async aztec_utl_getPublicDataWitness(foreignBlockHash: ForeignCallSingle, foreignLeafSlot: ForeignCallSingle) {
405
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
406
- const leafSlot = fromSingle(foreignLeafSlot);
407
-
408
- const witness = await this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot);
409
-
410
- if (!witness) {
411
- throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
412
- }
413
- return toForeignCallResult(witness.toNoirRepresentation());
414
- }
415
-
416
- // eslint-disable-next-line camelcase
417
- async aztec_utl_getNotes(
418
- foreignOwnerIsSome: ForeignCallSingle,
419
- foreignOwnerValue: ForeignCallSingle,
420
- foreignStorageSlot: ForeignCallSingle,
421
- foreignNumSelects: ForeignCallSingle,
422
- foreignSelectByIndexes: ForeignCallArray,
423
- foreignSelectByOffsets: ForeignCallArray,
424
- foreignSelectByLengths: ForeignCallArray,
425
- foreignSelectValues: ForeignCallArray,
426
- foreignSelectComparators: ForeignCallArray,
427
- foreignSortByIndexes: ForeignCallArray,
428
- foreignSortByOffsets: ForeignCallArray,
429
- foreignSortByLengths: ForeignCallArray,
430
- foreignSortOrder: ForeignCallArray,
431
- foreignLimit: ForeignCallSingle,
432
- foreignOffset: ForeignCallSingle,
433
- foreignStatus: ForeignCallSingle,
434
- foreignMaxNotes: ForeignCallSingle,
435
- foreignPackedHintedNoteLength: ForeignCallSingle,
436
- ) {
437
- // Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
438
- const owner = fromSingle(foreignOwnerIsSome).toBool()
439
- ? AztecAddress.fromField(fromSingle(foreignOwnerValue))
440
- : undefined;
441
- const storageSlot = fromSingle(foreignStorageSlot);
442
- const numSelects = fromSingle(foreignNumSelects).toNumber();
443
- const selectByIndexes = fromArray(foreignSelectByIndexes).map(fr => fr.toNumber());
444
- const selectByOffsets = fromArray(foreignSelectByOffsets).map(fr => fr.toNumber());
445
- const selectByLengths = fromArray(foreignSelectByLengths).map(fr => fr.toNumber());
446
- const selectValues = fromArray(foreignSelectValues);
447
- const selectComparators = fromArray(foreignSelectComparators).map(fr => fr.toNumber());
448
- const sortByIndexes = fromArray(foreignSortByIndexes).map(fr => fr.toNumber());
449
- const sortByOffsets = fromArray(foreignSortByOffsets).map(fr => fr.toNumber());
450
- const sortByLengths = fromArray(foreignSortByLengths).map(fr => fr.toNumber());
451
- const sortOrder = fromArray(foreignSortOrder).map(fr => fr.toNumber());
452
- const limit = fromSingle(foreignLimit).toNumber();
453
- const offset = fromSingle(foreignOffset).toNumber();
454
- const status = fromSingle(foreignStatus).toNumber();
455
- const maxNotes = fromSingle(foreignMaxNotes).toNumber();
456
- const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
457
-
458
- const noteDatas = await this.handlerAsUtility().getNotes(
459
- owner,
460
- storageSlot,
461
- numSelects,
462
- selectByIndexes,
463
- selectByOffsets,
464
- selectByLengths,
465
- selectValues,
466
- selectComparators,
467
- sortByIndexes,
468
- sortByOffsets,
469
- sortByLengths,
470
- sortOrder,
471
- limit,
472
- offset,
473
- status,
474
- );
475
-
476
- const returnDataAsArrayOfArrays = noteDatas.map(noteData =>
477
- packAsHintedNote({
478
- contractAddress: noteData.contractAddress,
479
- owner: noteData.owner,
480
- randomness: noteData.randomness,
481
- storageSlot: noteData.storageSlot,
482
- noteNonce: noteData.noteNonce,
483
- isPending: noteData.isPending,
484
- note: noteData.note,
485
- }),
486
- );
487
-
488
- // Now we convert each sub-array to an array of ForeignCallSingles
489
- const returnDataAsArrayOfForeignCallSingleArrays = returnDataAsArrayOfArrays.map(subArray =>
490
- subArray.map(toSingle),
491
- );
492
-
493
- // At last we convert the array of arrays to a bounded vec of arrays
494
- return toForeignCallResult(
495
- arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength),
496
- );
497
- }
498
-
499
- // eslint-disable-next-line camelcase
500
- aztec_prv_notifyCreatedNote(
501
- foreignOwner: ForeignCallSingle,
502
- foreignStorageSlot: ForeignCallSingle,
503
- foreignRandomness: ForeignCallSingle,
504
- foreignNoteTypeId: ForeignCallSingle,
505
- foreignNote: ForeignCallArray,
506
- foreignNoteHash: ForeignCallSingle,
507
- foreignCounter: ForeignCallSingle,
508
- ) {
509
- const owner = addressFromSingle(foreignOwner);
510
- const storageSlot = fromSingle(foreignStorageSlot);
511
- const randomness = fromSingle(foreignRandomness);
512
- const noteTypeId = NoteSelector.fromField(fromSingle(foreignNoteTypeId));
513
- const note = fromArray(foreignNote);
514
- const noteHash = fromSingle(foreignNoteHash);
515
- const counter = fromSingle(foreignCounter).toNumber();
516
-
517
- this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
518
-
519
- return toForeignCallResult([]);
520
- }
521
-
522
- // eslint-disable-next-line camelcase
523
- async aztec_prv_notifyNullifiedNote(
524
- foreignInnerNullifier: ForeignCallSingle,
525
- foreignNoteHash: ForeignCallSingle,
526
- foreignCounter: ForeignCallSingle,
527
- ) {
528
- const innerNullifier = fromSingle(foreignInnerNullifier);
529
- const noteHash = fromSingle(foreignNoteHash);
530
- const counter = fromSingle(foreignCounter).toNumber();
531
-
532
- await this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter);
533
-
534
- return toForeignCallResult([]);
535
- }
536
-
537
- // eslint-disable-next-line camelcase
538
- async aztec_prv_notifyCreatedNullifier(foreignInnerNullifier: ForeignCallSingle) {
539
- const innerNullifier = fromSingle(foreignInnerNullifier);
540
-
541
- await this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier);
542
-
543
- return toForeignCallResult([]);
327
+ aztec_misc_log(...inputs: ForeignCallArgs) {
328
+ return callTxeHandler({
329
+ oracle: 'aztec_misc_log',
330
+ inputs,
331
+ handler: ([level, message, fieldsSize, fields]) => this.handlerAsMisc().log(level, message, fieldsSize, fields),
332
+ });
544
333
  }
545
334
 
546
335
  // eslint-disable-next-line camelcase
547
- async aztec_prv_isNullifierPending(
548
- foreignInnerNullifier: ForeignCallSingle,
549
- foreignContractAddress: ForeignCallSingle,
550
- ) {
551
- const innerNullifier = fromSingle(foreignInnerNullifier);
552
- const contractAddress = addressFromSingle(foreignContractAddress);
553
-
554
- const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
555
-
556
- return toForeignCallResult([toSingle(new Fr(isPending))]);
336
+ aztec_utl_getFromPublicStorage(...inputs: ForeignCallArgs) {
337
+ return callTxeHandler({
338
+ oracle: 'aztec_utl_getFromPublicStorage',
339
+ inputs,
340
+ handler: ([blockHash, contractAddress, startStorageSlot, numberOfElements]) =>
341
+ this.handlerAsUtility().getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements),
342
+ });
557
343
  }
558
344
 
559
345
  // eslint-disable-next-line camelcase
560
- async aztec_utl_doesNullifierExist(foreignInnerNullifier: ForeignCallSingle) {
561
- const innerNullifier = fromSingle(foreignInnerNullifier);
562
-
563
- const exists = await this.handlerAsUtility().doesNullifierExist(innerNullifier);
564
-
565
- return toForeignCallResult([toSingle(new Fr(exists))]);
346
+ aztec_utl_getPublicDataWitness(...inputs: ForeignCallArgs) {
347
+ return callTxeHandler({
348
+ oracle: 'aztec_utl_getPublicDataWitness',
349
+ inputs,
350
+ handler: ([blockHash, leafSlot]) => this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot),
351
+ });
566
352
  }
567
353
 
568
354
  // eslint-disable-next-line camelcase
569
- async aztec_utl_getContractInstance(foreignAddress: ForeignCallSingle) {
570
- const address = addressFromSingle(foreignAddress);
571
-
572
- const instance = await this.handlerAsUtility().getContractInstance(address);
573
-
574
- return toForeignCallResult(
575
- [
576
- instance.salt,
577
- instance.deployer.toField(),
578
- instance.currentContractClassId,
579
- instance.initializationHash,
580
- ...instance.publicKeys.toFields(),
581
- ].map(toSingle),
582
- );
355
+ aztec_utl_getNotes(...inputs: ForeignCallArgs) {
356
+ return callTxeHandler({
357
+ oracle: 'aztec_utl_getNotes',
358
+ inputs,
359
+ handler: ([
360
+ owner,
361
+ storageSlot,
362
+ numSelects,
363
+ selectByIndexes,
364
+ selectByOffsets,
365
+ selectByLengths,
366
+ selectValues,
367
+ selectComparators,
368
+ sortByIndexes,
369
+ sortByOffsets,
370
+ sortByLengths,
371
+ sortOrder,
372
+ limit,
373
+ offset,
374
+ status,
375
+ maxNotes,
376
+ packedHintedNoteLength,
377
+ ]) =>
378
+ this.handlerAsUtility().getNotes(
379
+ owner,
380
+ storageSlot,
381
+ numSelects,
382
+ selectByIndexes,
383
+ selectByOffsets,
384
+ selectByLengths,
385
+ selectValues,
386
+ selectComparators,
387
+ sortByIndexes,
388
+ sortByOffsets,
389
+ sortByLengths,
390
+ sortOrder,
391
+ limit,
392
+ offset,
393
+ status,
394
+ maxNotes,
395
+ packedHintedNoteLength,
396
+ ),
397
+ });
583
398
  }
584
399
 
585
400
  // eslint-disable-next-line camelcase
586
- async aztec_utl_getPublicKeysAndPartialAddress(foreignAddress: ForeignCallSingle) {
587
- const address = addressFromSingle(foreignAddress);
588
-
589
- const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(address);
401
+ aztec_prv_notifyCreatedNote(...inputs: ForeignCallArgs) {
402
+ return callTxeHandler({
403
+ oracle: 'aztec_prv_notifyCreatedNote',
404
+ inputs,
405
+ handler: ([owner, storageSlot, randomness, noteTypeId, note, noteHash, counter]) =>
406
+ this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter),
407
+ });
408
+ }
590
409
 
591
- // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
592
- // with two fields: `some` (a boolean) and `value` (a field array in this case).
593
- if (result === undefined) {
594
- // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
595
- return toForeignCallResult([toSingle(new Fr(0)), toArray(Array(13).fill(new Fr(0)))]);
596
- } else {
597
- // Data was found so we set `some` to 1 and return it along with `value`.
598
- return toForeignCallResult([
599
- toSingle(new Fr(1)),
600
- toArray([...result.publicKeys.toFields(), result.partialAddress]),
601
- ]);
602
- }
410
+ // eslint-disable-next-line camelcase
411
+ aztec_prv_notifyNullifiedNote(...inputs: ForeignCallArgs) {
412
+ return callTxeHandler({
413
+ oracle: 'aztec_prv_notifyNullifiedNote',
414
+ inputs,
415
+ handler: ([innerNullifier, noteHash, counter]) =>
416
+ this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter),
417
+ });
603
418
  }
604
419
 
605
420
  // eslint-disable-next-line camelcase
606
- async aztec_utl_getKeyValidationRequest(foreignPkMHash: ForeignCallSingle) {
607
- const pkMHash = fromSingle(foreignPkMHash);
421
+ aztec_prv_notifyCreatedNullifier(...inputs: ForeignCallArgs) {
422
+ return callTxeHandler({
423
+ oracle: 'aztec_prv_notifyCreatedNullifier',
424
+ inputs,
425
+ handler: ([innerNullifier]) => this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier),
426
+ });
427
+ }
608
428
 
609
- const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
429
+ // eslint-disable-next-line camelcase
430
+ aztec_prv_isNullifierPending(...inputs: ForeignCallArgs) {
431
+ return callTxeHandler({
432
+ oracle: 'aztec_prv_isNullifierPending',
433
+ inputs,
434
+ handler: ([innerNullifier, contractAddress]) =>
435
+ this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress),
436
+ });
437
+ }
610
438
 
611
- return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
439
+ // eslint-disable-next-line camelcase
440
+ aztec_utl_doesNullifierExist(...inputs: ForeignCallArgs) {
441
+ return callTxeHandler({
442
+ oracle: 'aztec_utl_doesNullifierExist',
443
+ inputs,
444
+ handler: ([innerNullifier]) => this.handlerAsUtility().doesNullifierExist(innerNullifier),
445
+ });
612
446
  }
613
447
 
614
448
  // eslint-disable-next-line camelcase
615
- aztec_prv_callPrivateFunction(
616
- _foreignTargetContractAddress: ForeignCallSingle,
617
- _foreignFunctionSelector: ForeignCallSingle,
618
- _foreignArgsHash: ForeignCallSingle,
619
- _foreignSideEffectCounter: ForeignCallSingle,
620
- _foreignIsStaticCall: ForeignCallSingle,
621
- ) {
622
- throw new Error(
623
- 'Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead',
624
- );
449
+ aztec_utl_getContractInstance(...inputs: ForeignCallArgs) {
450
+ return callTxeHandler({
451
+ oracle: 'aztec_utl_getContractInstance',
452
+ inputs,
453
+ handler: ([address]) => this.handlerAsUtility().getContractInstance(address),
454
+ });
625
455
  }
626
456
 
627
457
  // eslint-disable-next-line camelcase
628
- async aztec_utl_getNullifierMembershipWitness(
629
- foreignBlockHash: ForeignCallSingle,
630
- foreignNullifier: ForeignCallSingle,
631
- ) {
632
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
633
- const nullifier = fromSingle(foreignNullifier);
458
+ aztec_utl_getPublicKeysAndPartialAddress(...inputs: ForeignCallArgs) {
459
+ return callTxeHandler({
460
+ oracle: 'aztec_utl_getPublicKeysAndPartialAddress',
461
+ inputs,
462
+ handler: ([address]) => this.handlerAsUtility().getPublicKeysAndPartialAddress(address),
463
+ });
464
+ }
634
465
 
635
- const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
466
+ // eslint-disable-next-line camelcase
467
+ aztec_utl_getKeyValidationRequest(...inputs: ForeignCallArgs) {
468
+ return callTxeHandler({
469
+ oracle: 'aztec_utl_getKeyValidationRequest',
470
+ inputs,
471
+ handler: ([pkMHash, keyIndex]) => this.handlerAsUtility().getKeyValidationRequest(pkMHash, keyIndex),
472
+ });
473
+ }
636
474
 
637
- if (!witness) {
638
- throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
639
- }
640
- return toForeignCallResult(witness.toNoirRepresentation());
475
+ // eslint-disable-next-line camelcase
476
+ aztec_prv_callPrivateFunction(...inputs: ForeignCallArgs) {
477
+ return callTxeHandler({
478
+ oracle: 'aztec_prv_callPrivateFunction',
479
+ inputs,
480
+ handler: ([contractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall]) =>
481
+ this.handlerAsPrivate().callPrivateFunction(
482
+ contractAddress,
483
+ functionSelector,
484
+ argsHash,
485
+ sideEffectCounter,
486
+ isStaticCall,
487
+ ),
488
+ });
641
489
  }
642
490
 
643
491
  // eslint-disable-next-line camelcase
644
- async aztec_utl_getAuthWitness(foreignMessageHash: ForeignCallSingle) {
645
- const messageHash = fromSingle(foreignMessageHash);
492
+ aztec_utl_getNullifierMembershipWitness(...inputs: ForeignCallArgs) {
493
+ return callTxeHandler({
494
+ oracle: 'aztec_utl_getNullifierMembershipWitness',
495
+ inputs,
496
+ handler: ([blockHash, nullifier]) => this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier),
497
+ });
498
+ }
646
499
 
647
- const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
500
+ // eslint-disable-next-line camelcase
501
+ aztec_utl_getL1ToL2MembershipWitnessV2(...inputs: ForeignCallArgs) {
502
+ return callTxeHandler({
503
+ oracle: 'aztec_utl_getL1ToL2MembershipWitnessV2',
504
+ inputs,
505
+ handler: ([messageHash, nullifier]) =>
506
+ this.handlerAsUtility().getL1ToL2MembershipWitnessV2(messageHash, nullifier),
507
+ });
508
+ }
648
509
 
649
- if (!authWitness) {
650
- throw new Error(`Auth witness not found for message hash ${messageHash}.`);
651
- }
652
- return toForeignCallResult([toArray(authWitness)]);
510
+ // eslint-disable-next-line camelcase
511
+ aztec_utl_getAuthWitness(...inputs: ForeignCallArgs) {
512
+ return callTxeHandler({
513
+ oracle: 'aztec_utl_getAuthWitness',
514
+ inputs,
515
+ handler: ([messageHash]) => this.handlerAsUtility().getAuthWitness(messageHash),
516
+ });
653
517
  }
654
518
 
655
519
  // eslint-disable-next-line camelcase
656
- public aztec_prv_assertValidPublicCalldata(_foreignCalldataHash: ForeignCallSingle) {
657
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
520
+ aztec_prv_assertValidPublicCalldata(...inputs: ForeignCallArgs) {
521
+ return callTxeHandler({
522
+ oracle: 'aztec_prv_assertValidPublicCalldata',
523
+ inputs,
524
+ handler: ([calldataHash]) => this.handlerAsPrivate().assertValidPublicCalldata(calldataHash),
525
+ });
658
526
  }
659
527
 
660
528
  // eslint-disable-next-line camelcase
661
- public aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter: ForeignCallSingle) {
662
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
529
+ aztec_prv_notifyRevertiblePhaseStart(...inputs: ForeignCallArgs) {
530
+ return callTxeHandler({
531
+ oracle: 'aztec_prv_notifyRevertiblePhaseStart',
532
+ inputs,
533
+ handler: ([minRevertibleSideEffectCounter]) =>
534
+ this.handlerAsPrivate().notifyRevertiblePhaseStart(minRevertibleSideEffectCounter),
535
+ });
663
536
  }
664
537
 
665
538
  // eslint-disable-next-line camelcase
666
- public async aztec_prv_isExecutionInRevertiblePhase(foreignSideEffectCounter: ForeignCallSingle) {
667
- const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
668
- const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter);
669
- return toForeignCallResult([toSingle(new Fr(isRevertible))]);
539
+ aztec_prv_isExecutionInRevertiblePhase(...inputs: ForeignCallArgs) {
540
+ return callTxeHandler({
541
+ oracle: 'aztec_prv_isExecutionInRevertiblePhase',
542
+ inputs,
543
+ handler: ([sideEffectCounter]) => this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter),
544
+ });
670
545
  }
671
546
 
672
547
  // eslint-disable-next-line camelcase
673
548
  aztec_utl_getUtilityContext() {
674
- const context = this.handlerAsUtility().getUtilityContext();
675
-
676
- return toForeignCallResult(context.toNoirRepresentation());
549
+ return callTxeHandler({
550
+ oracle: 'aztec_utl_getUtilityContext',
551
+ inputs: [],
552
+ handler: () => this.handlerAsUtility().getUtilityContext(),
553
+ });
677
554
  }
678
555
 
679
556
  // eslint-disable-next-line camelcase
680
- async aztec_utl_getBlockHeader(foreignBlockNumber: ForeignCallSingle) {
681
- const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
682
-
683
- const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
684
-
685
- if (!header) {
686
- throw new Error(`Block header not found for block ${blockNumber}.`);
687
- }
688
- return toForeignCallResult(header.toFields().map(toSingle));
557
+ aztec_utl_getBlockHeader(...inputs: ForeignCallArgs) {
558
+ return callTxeHandler({
559
+ oracle: 'aztec_utl_getBlockHeader',
560
+ inputs,
561
+ handler: ([blockNumber]) => this.handlerAsUtility().getBlockHeader(blockNumber),
562
+ });
689
563
  }
690
564
 
691
565
  // eslint-disable-next-line camelcase
692
- async aztec_utl_getNoteHashMembershipWitness(
693
- foreignAnchorBlockHash: ForeignCallSingle,
694
- foreignNoteHash: ForeignCallSingle,
695
- ) {
696
- const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
697
- const noteHash = fromSingle(foreignNoteHash);
698
-
699
- const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
700
-
701
- if (!witness) {
702
- throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
703
- }
704
- return toForeignCallResult(witness.toNoirRepresentation());
566
+ aztec_utl_getNoteHashMembershipWitness(...inputs: ForeignCallArgs) {
567
+ return callTxeHandler({
568
+ oracle: 'aztec_utl_getNoteHashMembershipWitness',
569
+ inputs,
570
+ handler: ([blockHash, noteHash]) => this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash),
571
+ });
705
572
  }
706
573
 
707
574
  // eslint-disable-next-line camelcase
708
- async aztec_utl_getBlockHashMembershipWitness(
709
- foreignAnchorBlockHash: ForeignCallSingle,
710
- foreignBlockHash: ForeignCallSingle,
711
- ) {
712
- const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
713
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
714
-
715
- const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
716
-
717
- if (!witness) {
718
- throw new Error(
719
- `Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`,
720
- );
721
- }
722
- return toForeignCallResult(witness.toNoirRepresentation());
575
+ aztec_utl_getBlockHashMembershipWitness(...inputs: ForeignCallArgs) {
576
+ return callTxeHandler({
577
+ oracle: 'aztec_utl_getBlockHashMembershipWitness',
578
+ inputs,
579
+ handler: ([anchorBlockHash, blockHash]) =>
580
+ this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash),
581
+ });
723
582
  }
724
583
 
725
584
  // eslint-disable-next-line camelcase
726
- async aztec_utl_getLowNullifierMembershipWitness(
727
- foreignBlockHash: ForeignCallSingle,
728
- foreignNullifier: ForeignCallSingle,
729
- ) {
730
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
731
- const nullifier = fromSingle(foreignNullifier);
732
-
733
- const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
734
-
735
- if (!witness) {
736
- throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
737
- }
738
- return toForeignCallResult(witness.toNoirRepresentation());
585
+ aztec_utl_areBlockHashesInArchive(...inputs: ForeignCallArgs) {
586
+ return callTxeHandler({
587
+ oracle: 'aztec_utl_areBlockHashesInArchive',
588
+ inputs,
589
+ handler: ([anchorBlockHash, blockHashes]) =>
590
+ this.handlerAsUtility().areBlockHashesInArchive(anchorBlockHash, blockHashes),
591
+ });
739
592
  }
740
593
 
741
594
  // eslint-disable-next-line camelcase
742
- async aztec_utl_getPendingTaggedLogs(
743
- foreignPendingTaggedLogArrayBaseSlot: ForeignCallSingle,
744
- foreignScope: ForeignCallSingle,
745
- ) {
746
- const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
747
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
748
-
749
- await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, scope);
750
-
751
- return toForeignCallResult([]);
752
- }
753
-
754
- // eslint-disable-next-line camelcase
755
- async aztec_utl_getPendingTaggedLogs_v2(foreignScope: ForeignCallSingle) {
756
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
757
- const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(scope);
758
- return toForeignCallResult([toSingle(slot)]);
595
+ aztec_utl_getLowNullifierMembershipWitness(...inputs: ForeignCallArgs) {
596
+ return callTxeHandler({
597
+ oracle: 'aztec_utl_getLowNullifierMembershipWitness',
598
+ inputs,
599
+ handler: ([blockHash, nullifier]) =>
600
+ this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier),
601
+ });
759
602
  }
760
603
 
761
604
  // eslint-disable-next-line camelcase
762
- public async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
763
- foreignContractAddress: ForeignCallSingle,
764
- foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
765
- foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
766
- foreignMaxNotePackedLen: ForeignCallSingle,
767
- foreignMaxEventSerializedLen: ForeignCallSingle,
768
- foreignScope: ForeignCallSingle,
769
- ) {
770
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
771
- const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
772
- const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
773
- const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
774
- const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
775
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
776
-
777
- await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
778
- contractAddress,
779
- noteValidationRequestsArrayBaseSlot,
780
- eventValidationRequestsArrayBaseSlot,
781
- maxNotePackedLen,
782
- maxEventSerializedLen,
783
- scope,
784
- );
785
-
786
- return toForeignCallResult([]);
605
+ aztec_utl_getPendingTaggedLogsV2(...inputs: ForeignCallArgs) {
606
+ return callTxeHandler({
607
+ oracle: 'aztec_utl_getPendingTaggedLogsV2',
608
+ inputs,
609
+ handler: ([scope, providedSecrets]) => this.handlerAsUtility().getPendingTaggedLogsV2(scope, providedSecrets),
610
+ });
787
611
  }
788
612
 
789
613
  // eslint-disable-next-line camelcase
790
- public async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(
791
- foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
792
- foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
793
- foreignMaxNotePackedLen: ForeignCallSingle,
794
- foreignMaxEventSerializedLen: ForeignCallSingle,
795
- foreignScope: ForeignCallSingle,
796
- ) {
797
- const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
798
- const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
799
- const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
800
- const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
801
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
802
-
803
- await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(
804
- noteValidationRequestsArrayBaseSlot,
805
- eventValidationRequestsArrayBaseSlot,
806
- maxNotePackedLen,
807
- maxEventSerializedLen,
808
- scope,
809
- );
810
-
811
- return toForeignCallResult([]);
614
+ aztec_utl_validateAndStoreEnqueuedNotesAndEvents(...inputs: ForeignCallArgs) {
615
+ return callTxeHandler({
616
+ oracle: 'aztec_utl_validateAndStoreEnqueuedNotesAndEvents',
617
+ inputs,
618
+ handler: ([noteValidationRequests, eventValidationRequests, scope]) =>
619
+ this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
620
+ noteValidationRequests,
621
+ eventValidationRequests,
622
+ scope,
623
+ ),
624
+ });
812
625
  }
813
626
 
814
627
  // eslint-disable-next-line camelcase
815
- public async aztec_utl_getLogsByTag(
816
- foreignContractAddress: ForeignCallSingle,
817
- foreignLogRetrievalRequestsArrayBaseSlot: ForeignCallSingle,
818
- foreignLogRetrievalResponsesArrayBaseSlot: ForeignCallSingle,
819
- foreignScope: ForeignCallSingle,
820
- ) {
821
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
822
- const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
823
- const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
824
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
825
-
826
- await this.handlerAsUtility().getLogsByTag(
827
- contractAddress,
828
- logRetrievalRequestsArrayBaseSlot,
829
- logRetrievalResponsesArrayBaseSlot,
830
- scope,
831
- );
832
-
833
- return toForeignCallResult([]);
628
+ aztec_utl_getLogsByTagV2(...inputs: ForeignCallArgs) {
629
+ return callTxeHandler({
630
+ oracle: 'aztec_utl_getLogsByTagV2',
631
+ inputs,
632
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot),
633
+ });
834
634
  }
835
635
 
836
636
  // eslint-disable-next-line camelcase
837
- public async aztec_utl_getMessageContextsByTxHash(
838
- foreignContractAddress: ForeignCallSingle,
839
- foreignMessageContextRequestsArrayBaseSlot: ForeignCallSingle,
840
- foreignMessageContextResponsesArrayBaseSlot: ForeignCallSingle,
841
- foreignScope: ForeignCallSingle,
842
- ) {
843
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
844
- const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
845
- const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
846
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
637
+ aztec_utl_getResolvedTxs(...inputs: ForeignCallArgs) {
638
+ return callTxeHandler({
639
+ oracle: 'aztec_utl_getResolvedTxs',
640
+ inputs,
641
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot),
642
+ });
643
+ }
847
644
 
848
- await this.handlerAsUtility().getMessageContextsByTxHash(
849
- contractAddress,
850
- messageContextRequestsArrayBaseSlot,
851
- messageContextResponsesArrayBaseSlot,
852
- scope,
853
- );
854
-
855
- return toForeignCallResult([]);
856
- }
857
-
858
- // eslint-disable-next-line camelcase
859
- async aztec_utl_getLogsByTag_v2(foreignRequestArrayBaseSlot: ForeignCallSingle) {
860
- const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
861
- const responseSlot = await this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot);
862
- return toForeignCallResult([toSingle(responseSlot)]);
863
- }
864
-
865
- // eslint-disable-next-line camelcase
866
- async aztec_utl_getMessageContextsByTxHash_v2(foreignRequestArrayBaseSlot: ForeignCallSingle) {
867
- const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
868
- const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(requestArrayBaseSlot);
869
- return toForeignCallResult([toSingle(responseSlot)]);
870
- }
871
-
872
- // eslint-disable-next-line camelcase
873
- aztec_utl_setCapsule(
874
- foreignContractAddress: ForeignCallSingle,
875
- foreignSlot: ForeignCallSingle,
876
- foreignCapsule: ForeignCallArray,
877
- foreignScope: ForeignCallSingle,
878
- ) {
879
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
880
- const slot = fromSingle(foreignSlot);
881
- const capsule = fromArray(foreignCapsule);
882
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
645
+ // eslint-disable-next-line camelcase
646
+ aztec_utl_getTxEffects(...inputs: ForeignCallArgs) {
647
+ return callTxeHandler({
648
+ oracle: 'aztec_utl_getTxEffects',
649
+ inputs,
650
+ handler: ([txHashes]) => this.handlerAsUtility().getTxEffects(txHashes),
651
+ });
652
+ }
883
653
 
884
- this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
654
+ // eslint-disable-next-line camelcase
655
+ aztec_utl_setCapsule(...inputs: ForeignCallArgs) {
656
+ return callTxeHandler({
657
+ oracle: 'aztec_utl_setCapsule',
658
+ inputs,
659
+ handler: ([contractAddress, slot, capsule, scope]) =>
660
+ this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope),
661
+ });
662
+ }
885
663
 
886
- return toForeignCallResult([]);
664
+ // eslint-disable-next-line camelcase
665
+ aztec_utl_getCapsule(...inputs: ForeignCallArgs) {
666
+ return callTxeHandler({
667
+ oracle: 'aztec_utl_getCapsule',
668
+ inputs,
669
+ handler: ([contractAddress, slot, tSize, scope]) =>
670
+ this.handlerAsUtility().getCapsule(contractAddress, slot, tSize, scope),
671
+ });
887
672
  }
888
673
 
889
- // eslint-disable-next-line camelcase
890
- async aztec_utl_getCapsule(
891
- foreignContractAddress: ForeignCallSingle,
892
- foreignSlot: ForeignCallSingle,
893
- foreignTSize: ForeignCallSingle,
894
- foreignScope: ForeignCallSingle,
895
- ) {
896
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
897
- const slot = fromSingle(foreignSlot);
898
- const tSize = fromSingle(foreignTSize).toNumber();
899
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
674
+ // eslint-disable-next-line camelcase
675
+ aztec_utl_deleteCapsule(...inputs: ForeignCallArgs) {
676
+ return callTxeHandler({
677
+ oracle: 'aztec_utl_deleteCapsule',
678
+ inputs,
679
+ handler: ([contractAddress, slot, scope]) => this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope),
680
+ });
681
+ }
900
682
 
901
- const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
683
+ // eslint-disable-next-line camelcase
684
+ aztec_utl_copyCapsule(...inputs: ForeignCallArgs) {
685
+ return callTxeHandler({
686
+ oracle: 'aztec_utl_copyCapsule',
687
+ inputs,
688
+ handler: ([contractAddress, srcSlot, dstSlot, numEntries, scope]) =>
689
+ this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope),
690
+ });
691
+ }
902
692
 
903
- // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
904
- // with two fields: `some` (a boolean) and `value` (a field array in this case).
905
- if (values === null) {
906
- // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
907
- return toForeignCallResult([toSingle(new Fr(0)), toArray(Array(tSize).fill(new Fr(0)))]);
908
- } else {
909
- // Data was found so we set `some` to 1 and return it along with `value`.
910
- return toForeignCallResult([toSingle(new Fr(1)), toArray(values)]);
911
- }
693
+ // eslint-disable-next-line camelcase
694
+ aztec_utl_pushEphemeral(...inputs: ForeignCallArgs) {
695
+ return callTxeHandler({
696
+ oracle: 'aztec_utl_pushEphemeral',
697
+ inputs,
698
+ handler: ([slot, elements]) => this.handlerAsUtility().pushEphemeral(slot, elements),
699
+ });
912
700
  }
913
701
 
914
702
  // eslint-disable-next-line camelcase
915
- aztec_utl_deleteCapsule(
916
- foreignContractAddress: ForeignCallSingle,
917
- foreignSlot: ForeignCallSingle,
918
- foreignScope: ForeignCallSingle,
919
- ) {
920
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
921
- const slot = fromSingle(foreignSlot);
922
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
703
+ aztec_utl_popEphemeral(...inputs: ForeignCallArgs) {
704
+ return callTxeHandler({
705
+ oracle: 'aztec_utl_popEphemeral',
706
+ inputs,
707
+ handler: ([slot]) => this.handlerAsUtility().popEphemeral(slot),
708
+ });
709
+ }
923
710
 
924
- this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
711
+ // eslint-disable-next-line camelcase
712
+ aztec_utl_getEphemeral(...inputs: ForeignCallArgs) {
713
+ return callTxeHandler({
714
+ oracle: 'aztec_utl_getEphemeral',
715
+ inputs,
716
+ handler: ([slot, index]) => this.handlerAsUtility().getEphemeral(slot, index),
717
+ });
718
+ }
925
719
 
926
- return toForeignCallResult([]);
720
+ // eslint-disable-next-line camelcase
721
+ aztec_utl_setEphemeral(...inputs: ForeignCallArgs) {
722
+ return callTxeHandler({
723
+ oracle: 'aztec_utl_setEphemeral',
724
+ inputs,
725
+ handler: ([slot, index, elements]) => this.handlerAsUtility().setEphemeral(slot, index, elements),
726
+ });
927
727
  }
928
728
 
929
729
  // eslint-disable-next-line camelcase
930
- async aztec_utl_copyCapsule(
931
- foreignContractAddress: ForeignCallSingle,
932
- foreignSrcSlot: ForeignCallSingle,
933
- foreignDstSlot: ForeignCallSingle,
934
- foreignNumEntries: ForeignCallSingle,
935
- foreignScope: ForeignCallSingle,
936
- ) {
937
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
938
- const srcSlot = fromSingle(foreignSrcSlot);
939
- const dstSlot = fromSingle(foreignDstSlot);
940
- const numEntries = fromSingle(foreignNumEntries).toNumber();
941
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
730
+ aztec_utl_getEphemeralLen(...inputs: ForeignCallArgs) {
731
+ return callTxeHandler({
732
+ oracle: 'aztec_utl_getEphemeralLen',
733
+ inputs,
734
+ handler: ([slot]) => this.handlerAsUtility().getEphemeralLen(slot),
735
+ });
736
+ }
942
737
 
943
- await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
738
+ // eslint-disable-next-line camelcase
739
+ aztec_utl_removeEphemeral(...inputs: ForeignCallArgs) {
740
+ return callTxeHandler({
741
+ oracle: 'aztec_utl_removeEphemeral',
742
+ inputs,
743
+ handler: ([slot, index]) => this.handlerAsUtility().removeEphemeral(slot, index),
744
+ });
745
+ }
944
746
 
945
- return toForeignCallResult([]);
747
+ // eslint-disable-next-line camelcase
748
+ aztec_utl_clearEphemeral(...inputs: ForeignCallArgs) {
749
+ return callTxeHandler({
750
+ oracle: 'aztec_utl_clearEphemeral',
751
+ inputs,
752
+ handler: ([slot]) => this.handlerAsUtility().clearEphemeral(slot),
753
+ });
946
754
  }
947
755
 
948
756
  // eslint-disable-next-line camelcase
949
- aztec_utl_pushEphemeral(foreignSlot: ForeignCallSingle, foreignElements: ForeignCallArray) {
950
- const slot = fromSingle(foreignSlot);
951
- const elements = fromArray(foreignElements);
952
- const newLen = this.handlerAsUtility().pushEphemeral(slot, elements);
953
- return toForeignCallResult([toSingle(new Fr(newLen))]);
757
+ aztec_utl_pushTransient(...inputs: ForeignCallArgs) {
758
+ return callTxeHandler({
759
+ oracle: 'aztec_utl_pushTransient',
760
+ inputs,
761
+ handler: ([slot, elements]) => this.handlerAsUtility().pushTransient(slot, elements),
762
+ });
954
763
  }
955
764
 
956
765
  // eslint-disable-next-line camelcase
957
- aztec_utl_popEphemeral(foreignSlot: ForeignCallSingle) {
958
- const slot = fromSingle(foreignSlot);
959
- const element = this.handlerAsUtility().popEphemeral(slot);
960
- return toForeignCallResult([toArray(element)]);
766
+ aztec_utl_popTransient(...inputs: ForeignCallArgs) {
767
+ return callTxeHandler({
768
+ oracle: 'aztec_utl_popTransient',
769
+ inputs,
770
+ handler: ([slot]) => this.handlerAsUtility().popTransient(slot),
771
+ });
961
772
  }
962
773
 
963
774
  // eslint-disable-next-line camelcase
964
- aztec_utl_getEphemeral(foreignSlot: ForeignCallSingle, foreignIndex: ForeignCallSingle) {
965
- const slot = fromSingle(foreignSlot);
966
- const index = fromSingle(foreignIndex).toNumber();
967
- const element = this.handlerAsUtility().getEphemeral(slot, index);
968
- return toForeignCallResult([toArray(element)]);
775
+ aztec_utl_getTransient(...inputs: ForeignCallArgs) {
776
+ return callTxeHandler({
777
+ oracle: 'aztec_utl_getTransient',
778
+ inputs,
779
+ handler: ([slot, index]) => this.handlerAsUtility().getTransient(slot, index),
780
+ });
969
781
  }
970
782
 
971
783
  // eslint-disable-next-line camelcase
972
- aztec_utl_setEphemeral(
973
- foreignSlot: ForeignCallSingle,
974
- foreignIndex: ForeignCallSingle,
975
- foreignElements: ForeignCallArray,
976
- ) {
977
- const slot = fromSingle(foreignSlot);
978
- const index = fromSingle(foreignIndex).toNumber();
979
- const elements = fromArray(foreignElements);
980
- this.handlerAsUtility().setEphemeral(slot, index, elements);
981
- return toForeignCallResult([]);
784
+ aztec_utl_setTransient(...inputs: ForeignCallArgs) {
785
+ return callTxeHandler({
786
+ oracle: 'aztec_utl_setTransient',
787
+ inputs,
788
+ handler: ([slot, index, elements]) => this.handlerAsUtility().setTransient(slot, index, elements),
789
+ });
982
790
  }
983
791
 
984
792
  // eslint-disable-next-line camelcase
985
- aztec_utl_getEphemeralLen(foreignSlot: ForeignCallSingle) {
986
- const slot = fromSingle(foreignSlot);
987
- const len = this.handlerAsUtility().getEphemeralLen(slot);
988
- return toForeignCallResult([toSingle(new Fr(len))]);
793
+ aztec_utl_getTransientLen(...inputs: ForeignCallArgs) {
794
+ return callTxeHandler({
795
+ oracle: 'aztec_utl_getTransientLen',
796
+ inputs,
797
+ handler: ([slot]) => this.handlerAsUtility().getTransientLen(slot),
798
+ });
989
799
  }
990
800
 
991
801
  // eslint-disable-next-line camelcase
992
- aztec_utl_removeEphemeral(foreignSlot: ForeignCallSingle, foreignIndex: ForeignCallSingle) {
993
- const slot = fromSingle(foreignSlot);
994
- const index = fromSingle(foreignIndex).toNumber();
995
- this.handlerAsUtility().removeEphemeral(slot, index);
996
- return toForeignCallResult([]);
802
+ aztec_utl_removeTransient(...inputs: ForeignCallArgs) {
803
+ return callTxeHandler({
804
+ oracle: 'aztec_utl_removeTransient',
805
+ inputs,
806
+ handler: ([slot, index]) => this.handlerAsUtility().removeTransient(slot, index),
807
+ });
997
808
  }
998
809
 
999
810
  // eslint-disable-next-line camelcase
1000
- aztec_utl_clearEphemeral(foreignSlot: ForeignCallSingle) {
1001
- const slot = fromSingle(foreignSlot);
1002
- this.handlerAsUtility().clearEphemeral(slot);
1003
- return toForeignCallResult([]);
811
+ aztec_utl_clearTransient(...inputs: ForeignCallArgs) {
812
+ return callTxeHandler({
813
+ oracle: 'aztec_utl_clearTransient',
814
+ inputs,
815
+ handler: ([slot]) => this.handlerAsUtility().clearTransient(slot),
816
+ });
1004
817
  }
1005
818
 
1006
819
  // TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
@@ -1008,365 +821,399 @@ export class RPCTranslator {
1008
821
  // to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
1009
822
  // existence of a txe_oracle method?
1010
823
  // eslint-disable-next-line camelcase
1011
- async aztec_utl_decryptAes128(
1012
- foreignCiphertextBVecStorage: ForeignCallArray,
1013
- foreignCiphertextLength: ForeignCallSingle,
1014
- foreignIv: ForeignCallArray,
1015
- foreignSymKey: ForeignCallArray,
1016
- ) {
1017
- const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
1018
- const iv = fromUintArray(foreignIv, 8);
1019
- const symKey = fromUintArray(foreignSymKey, 8);
1020
-
1021
- // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
1022
- try {
1023
- const plaintextBuffer = await this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey);
1024
- const [storage, length] = arrayToBoundedVec(
1025
- bufferToU8Array(plaintextBuffer),
1026
- foreignCiphertextBVecStorage.length,
1027
- );
1028
- return toForeignCallResult([toSingle(new Fr(1)), storage, length]);
1029
- } catch {
1030
- const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
1031
- return toForeignCallResult([toSingle(new Fr(0)), zeroStorage, toSingle(new Fr(0))]);
1032
- }
824
+ aztec_utl_decryptAes128(...inputs: ForeignCallArgs) {
825
+ return callTxeHandler({
826
+ oracle: 'aztec_utl_decryptAes128',
827
+ inputs,
828
+ handler: ([ciphertext, iv, symKey]) => this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey),
829
+ });
1033
830
  }
1034
831
 
1035
832
  // eslint-disable-next-line camelcase
1036
- async aztec_utl_getSharedSecret(
1037
- foreignAddress: ForeignCallSingle,
1038
- foreignEphPKField0: ForeignCallSingle,
1039
- foreignEphPKField1: ForeignCallSingle,
1040
- foreignEphPKField2: ForeignCallSingle,
1041
- foreignContractAddress: ForeignCallSingle,
1042
- ) {
1043
- const address = AztecAddress.fromField(fromSingle(foreignAddress));
1044
- const ephPK = Point.fromFields([
1045
- fromSingle(foreignEphPKField0),
1046
- fromSingle(foreignEphPKField1),
1047
- fromSingle(foreignEphPKField2),
1048
- ]);
1049
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
1050
-
1051
- const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK, contractAddress);
1052
-
1053
- return toForeignCallResult([toSingle(secret)]);
833
+ aztec_utl_getSharedSecrets(...inputs: ForeignCallArgs) {
834
+ return callTxeHandler({
835
+ oracle: 'aztec_utl_getSharedSecrets',
836
+ inputs,
837
+ handler: ([address, ephPksSlot, contractAddress]) =>
838
+ this.handlerAsUtility().getSharedSecrets(address, ephPksSlot, contractAddress),
839
+ });
1054
840
  }
1055
841
 
1056
842
  // eslint-disable-next-line camelcase
1057
- aztec_utl_setContractSyncCacheInvalid(
1058
- foreignContractAddress: ForeignCallSingle,
1059
- foreignScopes: ForeignCallArray,
1060
- foreignScopeCount: ForeignCallSingle,
1061
- ) {
1062
- const contractAddress = addressFromSingle(foreignContractAddress);
1063
- const count = fromSingle(foreignScopeCount).toNumber();
1064
- const scopes = fromArray(foreignScopes)
1065
- .slice(0, count)
1066
- .map(f => new AztecAddress(f));
1067
-
1068
- this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
1069
-
1070
- return Promise.resolve(toForeignCallResult([]));
843
+ aztec_utl_setContractSyncCacheInvalid(...inputs: ForeignCallArgs) {
844
+ return callTxeHandler({
845
+ oracle: 'aztec_utl_setContractSyncCacheInvalid',
846
+ inputs,
847
+ handler: ([contractAddress, scopes]) =>
848
+ this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes),
849
+ });
1071
850
  }
1072
851
 
1073
852
  // eslint-disable-next-line camelcase
1074
- aztec_utl_emitOffchainEffect(_foreignData: ForeignCallArray) {
1075
- throw new Error('Offchain effects are not yet supported in the TestEnvironment');
853
+ aztec_utl_emitOffchainEffect(...inputs: ForeignCallArgs) {
854
+ return callTxeHandler({
855
+ oracle: 'aztec_utl_emitOffchainEffect',
856
+ inputs,
857
+ handler: ([data]) => {
858
+ // Record the raw payload against the currently-executing top-level call. The Noir side
859
+ // (via `env.offchain_messages()`) is responsible for decoding the protocol-reserved prefix
860
+ // (`OFFCHAIN_MESSAGE_IDENTIFIER`, recipient) and turning each payload into an `OffchainMessage` struct suitable
861
+ // for `offchain_receive`.
862
+ this.stateHandler.recordOffchainEffect(data);
863
+ },
864
+ });
1076
865
  }
1077
866
 
1078
- // AVM opcodes
1079
-
1080
867
  // eslint-disable-next-line camelcase
1081
- aztec_avm_emitPublicLog(_foreignMessage: ForeignCallArray) {
1082
- // TODO(#8811): Implement
1083
- return toForeignCallResult([]);
868
+ aztec_utl_recordFact(...inputs: ForeignCallArgs) {
869
+ return callTxeHandler({
870
+ oracle: 'aztec_utl_recordFact',
871
+ inputs,
872
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock]) =>
873
+ this.handlerAsUtility().recordFact(
874
+ contractAddress,
875
+ scope,
876
+ factCollectionTypeId,
877
+ factCollectionId,
878
+ factTypeId,
879
+ payload,
880
+ originBlock,
881
+ ),
882
+ });
1084
883
  }
1085
884
 
1086
885
  // eslint-disable-next-line camelcase
1087
- async aztec_avm_storageRead(foreignSlot: ForeignCallSingle, foreignContractAddress: ForeignCallSingle) {
1088
- const slot = fromSingle(foreignSlot);
1089
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
1090
-
1091
- const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
1092
-
1093
- return toForeignCallResult([toSingle(new Fr(value))]);
886
+ aztec_utl_deleteFactCollection(...inputs: ForeignCallArgs) {
887
+ return callTxeHandler({
888
+ oracle: 'aztec_utl_deleteFactCollection',
889
+ inputs,
890
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId]) =>
891
+ this.handlerAsUtility().deleteFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId),
892
+ });
1094
893
  }
1095
894
 
1096
895
  // eslint-disable-next-line camelcase
1097
- async aztec_avm_storageWrite(foreignSlot: ForeignCallSingle, foreignValue: ForeignCallSingle) {
1098
- const slot = fromSingle(foreignSlot);
1099
- const value = fromSingle(foreignValue);
1100
-
1101
- await this.handlerAsAvm().storageWrite(slot, value);
1102
-
1103
- return toForeignCallResult([]);
896
+ aztec_utl_getFactCollection(...inputs: ForeignCallArgs) {
897
+ return callTxeHandler({
898
+ oracle: 'aztec_utl_getFactCollection',
899
+ inputs,
900
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId]) =>
901
+ this.handlerAsUtility().getFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId),
902
+ });
1104
903
  }
1105
904
 
1106
905
  // eslint-disable-next-line camelcase
1107
- async aztec_avm_getContractInstanceDeployer(foreignAddress: ForeignCallSingle) {
1108
- const address = addressFromSingle(foreignAddress);
906
+ aztec_utl_getFactCollectionsByType(...inputs: ForeignCallArgs) {
907
+ return callTxeHandler({
908
+ oracle: 'aztec_utl_getFactCollectionsByType',
909
+ inputs,
910
+ handler: ([contractAddress, scope, factCollectionTypeId]) =>
911
+ this.handlerAsUtility().getFactCollectionsByType(contractAddress, scope, factCollectionTypeId),
912
+ });
913
+ }
1109
914
 
1110
- const instance = await this.handlerAsUtility().getContractInstance(address);
915
+ // AVM opcodes
1111
916
 
1112
- return toForeignCallResult([
1113
- toSingle(instance.deployer),
1114
- // AVM requires an extra boolean indicating the instance was found
1115
- toSingle(new Fr(1)),
1116
- ]);
917
+ // eslint-disable-next-line camelcase
918
+ aztec_avm_emitPublicLog() {
919
+ return callTxeHandler({
920
+ oracle: 'aztec_avm_emitPublicLog',
921
+ inputs: [],
922
+ // TODO(#8811): Implement
923
+ handler: () => {},
924
+ });
1117
925
  }
1118
926
 
1119
927
  // eslint-disable-next-line camelcase
1120
- async aztec_avm_getContractInstanceClassId(foreignAddress: ForeignCallSingle) {
1121
- const address = addressFromSingle(foreignAddress);
1122
-
1123
- const instance = await this.handlerAsUtility().getContractInstance(address);
1124
-
1125
- return toForeignCallResult([
1126
- toSingle(instance.currentContractClassId),
1127
- // AVM requires an extra boolean indicating the instance was found
1128
- toSingle(new Fr(1)),
1129
- ]);
928
+ aztec_avm_storageRead(...inputs: ForeignCallArgs) {
929
+ return callTxeHandler({
930
+ oracle: 'aztec_avm_storageRead',
931
+ inputs,
932
+ handler: ([slot, contractAddress]) => this.handlerAsAvm().storageRead(slot, contractAddress),
933
+ });
1130
934
  }
1131
935
 
1132
936
  // eslint-disable-next-line camelcase
1133
- async aztec_avm_getContractInstanceInitializationHash(foreignAddress: ForeignCallSingle) {
1134
- const address = addressFromSingle(foreignAddress);
1135
-
1136
- const instance = await this.handlerAsUtility().getContractInstance(address);
1137
-
1138
- return toForeignCallResult([
1139
- toSingle(instance.initializationHash),
1140
- // AVM requires an extra boolean indicating the instance was found
1141
- toSingle(new Fr(1)),
1142
- ]);
937
+ aztec_avm_storageWrite(...inputs: ForeignCallArgs) {
938
+ return callTxeHandler({
939
+ oracle: 'aztec_avm_storageWrite',
940
+ inputs,
941
+ handler: ([slot, value]) => this.handlerAsAvm().storageWrite(slot, value),
942
+ });
1143
943
  }
1144
944
 
1145
945
  // eslint-disable-next-line camelcase
1146
- async aztec_avm_sender() {
1147
- const sender = await this.handlerAsAvm().sender();
1148
-
1149
- return toForeignCallResult([toSingle(sender)]);
946
+ aztec_avm_getContractInstanceDeployer(...inputs: ForeignCallArgs) {
947
+ return callTxeHandler({
948
+ oracle: 'aztec_avm_getContractInstanceDeployer',
949
+ inputs,
950
+ handler: ([address]) => this.handlerAsAvm().getContractInstanceDeployer(address),
951
+ });
1150
952
  }
1151
953
 
1152
954
  // eslint-disable-next-line camelcase
1153
- async aztec_avm_emitNullifier(foreignNullifier: ForeignCallSingle) {
1154
- const nullifier = fromSingle(foreignNullifier);
1155
-
1156
- await this.handlerAsAvm().emitNullifier(nullifier);
1157
-
1158
- return toForeignCallResult([]);
955
+ aztec_avm_getContractInstanceClassId(...inputs: ForeignCallArgs) {
956
+ return callTxeHandler({
957
+ oracle: 'aztec_avm_getContractInstanceClassId',
958
+ inputs,
959
+ handler: ([address]) => this.handlerAsAvm().getContractInstanceClassId(address),
960
+ });
1159
961
  }
1160
962
 
1161
963
  // eslint-disable-next-line camelcase
1162
- async aztec_avm_emitNoteHash(foreignNoteHash: ForeignCallSingle) {
1163
- const noteHash = fromSingle(foreignNoteHash);
1164
-
1165
- await this.handlerAsAvm().emitNoteHash(noteHash);
1166
-
1167
- return toForeignCallResult([]);
964
+ aztec_avm_getContractInstanceInitializationHash(...inputs: ForeignCallArgs) {
965
+ return callTxeHandler({
966
+ oracle: 'aztec_avm_getContractInstanceInitializationHash',
967
+ inputs,
968
+ handler: ([address]) => this.handlerAsAvm().getContractInstanceInitializationHash(address),
969
+ });
1168
970
  }
1169
971
 
1170
972
  // eslint-disable-next-line camelcase
1171
- async aztec_avm_nullifierExists(foreignSiloedNullifier: ForeignCallSingle) {
1172
- const siloedNullifier = fromSingle(foreignSiloedNullifier);
1173
-
1174
- const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
1175
-
1176
- return toForeignCallResult([toSingle(new Fr(exists))]);
973
+ aztec_avm_getContractInstanceImmutablesHash(...inputs: ForeignCallArgs) {
974
+ return callTxeHandler({
975
+ oracle: 'aztec_avm_getContractInstanceImmutablesHash',
976
+ inputs,
977
+ handler: ([address]) => this.handlerAsAvm().getContractInstanceImmutablesHash(address),
978
+ });
1177
979
  }
1178
980
 
1179
981
  // eslint-disable-next-line camelcase
1180
- async aztec_avm_address() {
1181
- const contractAddress = await this.handlerAsAvm().address();
1182
-
1183
- return toForeignCallResult([toSingle(contractAddress.toField())]);
982
+ aztec_avm_sender() {
983
+ return callTxeHandler({
984
+ oracle: 'aztec_avm_sender',
985
+ inputs: [],
986
+ handler: () => this.handlerAsAvm().sender(),
987
+ });
1184
988
  }
1185
989
 
1186
990
  // eslint-disable-next-line camelcase
1187
- async aztec_avm_blockNumber() {
1188
- const blockNumber = await this.handlerAsAvm().blockNumber();
1189
-
1190
- return toForeignCallResult([toSingle(new Fr(blockNumber))]);
991
+ aztec_avm_emitNullifier(...inputs: ForeignCallArgs) {
992
+ return callTxeHandler({
993
+ oracle: 'aztec_avm_emitNullifier',
994
+ inputs,
995
+ handler: ([nullifier]) => this.handlerAsAvm().emitNullifier(nullifier),
996
+ });
1191
997
  }
1192
998
 
1193
999
  // eslint-disable-next-line camelcase
1194
- async aztec_avm_timestamp() {
1195
- const timestamp = await this.handlerAsAvm().timestamp();
1196
-
1197
- return toForeignCallResult([toSingle(new Fr(timestamp))]);
1000
+ aztec_avm_emitNoteHash(...inputs: ForeignCallArgs) {
1001
+ return callTxeHandler({
1002
+ oracle: 'aztec_avm_emitNoteHash',
1003
+ inputs,
1004
+ handler: ([noteHash]) => this.handlerAsAvm().emitNoteHash(noteHash),
1005
+ });
1198
1006
  }
1199
1007
 
1200
1008
  // eslint-disable-next-line camelcase
1201
- async aztec_avm_isStaticCall() {
1202
- const isStaticCall = await this.handlerAsAvm().isStaticCall();
1203
-
1204
- return toForeignCallResult([toSingle(new Fr(isStaticCall ? 1 : 0))]);
1009
+ aztec_avm_nullifierExists(...inputs: ForeignCallArgs) {
1010
+ return callTxeHandler({
1011
+ oracle: 'aztec_avm_nullifierExists',
1012
+ inputs,
1013
+ handler: ([siloedNullifier]) => this.handlerAsAvm().nullifierExists(siloedNullifier),
1014
+ });
1205
1015
  }
1206
1016
 
1207
1017
  // eslint-disable-next-line camelcase
1208
- async aztec_avm_chainId() {
1209
- const chainId = await this.handlerAsAvm().chainId();
1210
-
1211
- return toForeignCallResult([toSingle(chainId)]);
1018
+ aztec_avm_address() {
1019
+ return callTxeHandler({
1020
+ oracle: 'aztec_avm_address',
1021
+ inputs: [],
1022
+ handler: () => this.handlerAsAvm().address(),
1023
+ });
1212
1024
  }
1213
1025
 
1214
1026
  // eslint-disable-next-line camelcase
1215
- async aztec_avm_version() {
1216
- const version = await this.handlerAsAvm().version();
1217
-
1218
- return toForeignCallResult([toSingle(version)]);
1027
+ aztec_avm_blockNumber() {
1028
+ return callTxeHandler({
1029
+ oracle: 'aztec_avm_blockNumber',
1030
+ inputs: [],
1031
+ handler: () => this.handlerAsAvm().blockNumber(),
1032
+ });
1219
1033
  }
1220
1034
 
1221
1035
  // eslint-disable-next-line camelcase
1222
- aztec_avm_returndataSize() {
1223
- throw new Error(
1224
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1225
- );
1036
+ aztec_avm_timestamp() {
1037
+ return callTxeHandler({
1038
+ oracle: 'aztec_avm_timestamp',
1039
+ inputs: [],
1040
+ handler: () => this.handlerAsAvm().timestamp(),
1041
+ });
1226
1042
  }
1227
1043
 
1228
1044
  // eslint-disable-next-line camelcase
1229
- aztec_avm_returndataCopy(_foreignRdOffset: ForeignCallSingle, _foreignCopySize: ForeignCallSingle) {
1230
- throw new Error(
1231
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1232
- );
1045
+ aztec_avm_isStaticCall() {
1046
+ return callTxeHandler({
1047
+ oracle: 'aztec_avm_isStaticCall',
1048
+ inputs: [],
1049
+ handler: () => this.handlerAsAvm().isStaticCall(),
1050
+ });
1233
1051
  }
1234
1052
 
1235
1053
  // eslint-disable-next-line camelcase
1236
- aztec_avm_call(
1237
- _foreignL2Gas: ForeignCallSingle,
1238
- _foreignDaGas: ForeignCallSingle,
1239
- _foreignAddress: ForeignCallSingle,
1240
- _foreignLength: ForeignCallSingle,
1241
- _foreignArgs: ForeignCallArray,
1242
- ) {
1243
- throw new Error(
1244
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1245
- );
1054
+ aztec_avm_chainId() {
1055
+ return callTxeHandler({
1056
+ oracle: 'aztec_avm_chainId',
1057
+ inputs: [],
1058
+ handler: () => this.handlerAsAvm().chainId(),
1059
+ });
1246
1060
  }
1247
1061
 
1248
1062
  // eslint-disable-next-line camelcase
1249
- aztec_avm_staticCall(
1250
- _foreignL2Gas: ForeignCallSingle,
1251
- _foreignDaGas: ForeignCallSingle,
1252
- _foreignAddress: ForeignCallSingle,
1253
- _foreignLength: ForeignCallSingle,
1254
- _foreignArgs: ForeignCallArray,
1255
- ) {
1256
- throw new Error(
1257
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1258
- );
1063
+ aztec_avm_version() {
1064
+ return callTxeHandler({
1065
+ oracle: 'aztec_avm_version',
1066
+ inputs: [],
1067
+ handler: () => this.handlerAsAvm().version(),
1068
+ });
1259
1069
  }
1260
1070
 
1261
1071
  // eslint-disable-next-line camelcase
1262
- aztec_avm_successCopy() {
1263
- throw new Error(
1264
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1265
- );
1266
- }
1267
-
1268
- // eslint-disable-next-line camelcase
1269
- async aztec_txe_privateCallNewFlow(
1270
- foreignFrom: ForeignCallSingle,
1271
- foreignTargetContractAddress: ForeignCallSingle,
1272
- foreignFunctionSelector: ForeignCallSingle,
1273
- foreignArgs: ForeignCallArray,
1274
- foreignArgsHash: ForeignCallSingle,
1275
- foreignIsStaticCall: ForeignCallSingle,
1276
- ) {
1277
- const from = addressFromSingle(foreignFrom);
1278
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
1279
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
1280
- const args = fromArray(foreignArgs);
1281
- const argsHash = fromSingle(foreignArgsHash);
1282
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
1283
-
1284
- const returnValues = await this.handlerAsTxe().privateCallNewFlow(
1285
- from,
1286
- targetContractAddress,
1287
- functionSelector,
1288
- args,
1289
- argsHash,
1290
- isStaticCall,
1291
- this.stateHandler.getCurrentJob(),
1292
- );
1293
-
1294
- // TODO(F-335): Avoid doing the following call here.
1295
- await this.stateHandler.cycleJob();
1296
- return toForeignCallResult([toArray(returnValues)]);
1297
- }
1298
-
1299
- // eslint-disable-next-line camelcase
1300
- async aztec_txe_executeUtilityFunction(
1301
- foreignTargetContractAddress: ForeignCallSingle,
1302
- foreignFunctionSelector: ForeignCallSingle,
1303
- foreignArgs: ForeignCallArray,
1304
- ) {
1305
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
1306
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
1307
- const args = fromArray(foreignArgs);
1308
-
1309
- const returnValues = await this.handlerAsTxe().executeUtilityFunction(
1310
- targetContractAddress,
1311
- functionSelector,
1312
- args,
1313
- this.stateHandler.getCurrentJob(),
1314
- );
1315
-
1316
- // TODO(F-335): Avoid doing the following call here.
1317
- await this.stateHandler.cycleJob();
1318
- return toForeignCallResult([toArray(returnValues)]);
1319
- }
1320
-
1321
- // eslint-disable-next-line camelcase
1322
- async aztec_txe_publicCallNewFlow(
1323
- foreignFrom: ForeignCallSingle,
1324
- foreignAddress: ForeignCallSingle,
1325
- foreignCalldata: ForeignCallArray,
1326
- foreignIsStaticCall: ForeignCallSingle,
1327
- ) {
1328
- const from = addressFromSingle(foreignFrom);
1329
- const address = addressFromSingle(foreignAddress);
1330
- const calldata = fromArray(foreignCalldata);
1331
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
1332
-
1333
- const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
1334
-
1335
- // TODO(F-335): Avoid doing the following call here.
1336
- await this.stateHandler.cycleJob();
1337
- return toForeignCallResult([toArray(returnValues)]);
1338
- }
1339
-
1340
- // eslint-disable-next-line camelcase
1341
- async aztec_prv_getSenderForTags() {
1342
- const sender = await this.handlerAsPrivate().getSenderForTags();
1343
-
1344
- // Return a Noir Option struct with `some` and `value` fields
1345
- if (sender === undefined) {
1346
- // No sender found, return Option with some=0 and value=0
1347
- return toForeignCallResult([toSingle(0), toSingle(0)]);
1348
- } else {
1349
- // Sender found, return Option with some=1 and value=sender address
1350
- return toForeignCallResult([toSingle(1), toSingle(sender)]);
1351
- }
1072
+ aztec_avm_returndataSize() {
1073
+ return callTxeHandler({
1074
+ oracle: 'aztec_avm_returndataSize',
1075
+ inputs: [],
1076
+ handler: () => this.handlerAsAvm().returndataSize(),
1077
+ });
1352
1078
  }
1353
1079
 
1354
1080
  // eslint-disable-next-line camelcase
1355
- async aztec_prv_setSenderForTags(foreignSenderForTags: ForeignCallSingle) {
1356
- const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
1357
-
1358
- await this.handlerAsPrivate().setSenderForTags(senderForTags);
1359
-
1360
- return toForeignCallResult([]);
1081
+ aztec_avm_returndataCopy(...inputs: ForeignCallArgs) {
1082
+ return callTxeHandler({
1083
+ oracle: 'aztec_avm_returndataCopy',
1084
+ inputs,
1085
+ handler: ([rdOffset, copySize]) => this.handlerAsAvm().returndataCopy(rdOffset, copySize),
1086
+ });
1361
1087
  }
1362
1088
 
1363
1089
  // eslint-disable-next-line camelcase
1364
- async aztec_prv_getNextAppTagAsSender(foreignSender: ForeignCallSingle, foreignRecipient: ForeignCallSingle) {
1365
- const sender = AztecAddress.fromField(fromSingle(foreignSender));
1366
- const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
1090
+ aztec_avm_call(...inputs: ForeignCallArgs) {
1091
+ return callTxeHandler({
1092
+ oracle: 'aztec_avm_call',
1093
+ inputs,
1094
+ handler: ([l2Gas, daGas, address, argsLength, args]) =>
1095
+ this.handlerAsAvm().call(l2Gas, daGas, address, argsLength, args),
1096
+ });
1097
+ }
1367
1098
 
1368
- const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
1099
+ // eslint-disable-next-line camelcase
1100
+ aztec_avm_staticCall(...inputs: ForeignCallArgs) {
1101
+ return callTxeHandler({
1102
+ oracle: 'aztec_avm_staticCall',
1103
+ inputs,
1104
+ handler: ([l2Gas, daGas, address, argsLength, args]) =>
1105
+ this.handlerAsAvm().staticCall(l2Gas, daGas, address, argsLength, args),
1106
+ });
1107
+ }
1369
1108
 
1370
- return toForeignCallResult([toSingle(nextAppTag.value)]);
1109
+ // eslint-disable-next-line camelcase
1110
+ aztec_avm_successCopy() {
1111
+ return callTxeHandler({
1112
+ oracle: 'aztec_avm_successCopy',
1113
+ inputs: [],
1114
+ handler: () => this.handlerAsAvm().successCopy(),
1115
+ });
1116
+ }
1117
+
1118
+ // eslint-disable-next-line camelcase
1119
+ aztec_txe_privateCallNewFlow(...inputs: ForeignCallArgs) {
1120
+ return callTxeHandler({
1121
+ oracle: 'aztec_txe_privateCallNewFlow',
1122
+ inputs,
1123
+ handler: ([
1124
+ from,
1125
+ targetContractAddress,
1126
+ functionSelector,
1127
+ args,
1128
+ argsHash,
1129
+ isStaticCall,
1130
+ additionalScopes,
1131
+ authorizedUtilityCallTargets,
1132
+ gasSettings,
1133
+ ]) =>
1134
+ this.stateHandler.executePrivateCall(
1135
+ from,
1136
+ targetContractAddress,
1137
+ functionSelector,
1138
+ args,
1139
+ argsHash,
1140
+ isStaticCall,
1141
+ additionalScopes,
1142
+ authorizedUtilityCallTargets,
1143
+ gasSettings,
1144
+ ),
1145
+ });
1146
+ }
1147
+
1148
+ // eslint-disable-next-line camelcase
1149
+ aztec_txe_executeUtilityFunction(...inputs: ForeignCallArgs) {
1150
+ return callTxeHandler({
1151
+ oracle: 'aztec_txe_executeUtilityFunction',
1152
+ inputs,
1153
+ handler: ([from, targetContractAddress, functionSelector, args, authorizedUtilityCallTargets]) =>
1154
+ this.stateHandler.executeUtilityFunction(
1155
+ from,
1156
+ targetContractAddress,
1157
+ functionSelector,
1158
+ args,
1159
+ authorizedUtilityCallTargets,
1160
+ ),
1161
+ });
1162
+ }
1163
+
1164
+ // eslint-disable-next-line camelcase
1165
+ aztec_txe_publicCallNewFlow(...inputs: ForeignCallArgs) {
1166
+ return callTxeHandler({
1167
+ oracle: 'aztec_txe_publicCallNewFlow',
1168
+ inputs,
1169
+ handler: ([from, address, calldata, isStaticCall, gasSettings]) =>
1170
+ this.stateHandler.executePublicCall(from, address, calldata, isStaticCall, gasSettings),
1171
+ });
1172
+ }
1173
+
1174
+ // eslint-disable-next-line camelcase
1175
+ aztec_prv_getSenderForTags() {
1176
+ return callTxeHandler({
1177
+ oracle: 'aztec_prv_getSenderForTags',
1178
+ inputs: [],
1179
+ handler: () => this.handlerAsPrivate().getSenderForTags(),
1180
+ });
1181
+ }
1182
+
1183
+ // eslint-disable-next-line camelcase
1184
+ aztec_prv_resolveTaggingStrategy(...inputs: ForeignCallArgs) {
1185
+ return callTxeHandler({
1186
+ oracle: 'aztec_prv_resolveTaggingStrategy',
1187
+ inputs,
1188
+ handler: ([sender, recipient, deliveryMode]) =>
1189
+ this.handlerAsPrivate().resolveTaggingStrategy(sender, recipient, deliveryMode),
1190
+ });
1191
+ }
1192
+
1193
+ // eslint-disable-next-line camelcase
1194
+ aztec_prv_resolveCustomRequest(...inputs: ForeignCallArgs) {
1195
+ return callTxeHandler({
1196
+ oracle: 'aztec_prv_resolveCustomRequest',
1197
+ inputs,
1198
+ handler: ([kind, payload]) => this.handlerAsPrivate().resolveCustomRequest(kind, payload),
1199
+ });
1200
+ }
1201
+
1202
+ // eslint-disable-next-line camelcase
1203
+ aztec_prv_getAppTaggingSecret(...inputs: ForeignCallArgs) {
1204
+ return callTxeHandler({
1205
+ oracle: 'aztec_prv_getAppTaggingSecret',
1206
+ inputs,
1207
+ handler: ([sender, recipient]) => this.handlerAsPrivate().getAppTaggingSecret(sender, recipient),
1208
+ });
1209
+ }
1210
+
1211
+ // eslint-disable-next-line camelcase
1212
+ aztec_prv_getNextTaggingIndex(...inputs: ForeignCallArgs) {
1213
+ return callTxeHandler({
1214
+ oracle: 'aztec_prv_getNextTaggingIndex',
1215
+ inputs,
1216
+ handler: ([secret, deliveryMode]) => this.handlerAsPrivate().getNextTaggingIndex(secret, deliveryMode),
1217
+ });
1371
1218
  }
1372
1219
  }