@aztec/txe 0.0.1-commit.343b43af6 → 0.0.1-commit.350e0a4d

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