@aztec/txe 0.0.1-commit.9ef841308 → 0.0.1-commit.a5db02d

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-56AMRLSQ.js +3 -0
  2. package/dest/AuthRegistry-56AMRLSQ.js.map +7 -0
  3. package/dest/ContractClassRegistry-N6NA3SFA.js +3 -0
  4. package/dest/ContractClassRegistry-N6NA3SFA.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-NADDSLGL.js +3 -0
  6. package/dest/ContractInstanceRegistry-NADDSLGL.js.map +7 -0
  7. package/dest/FeeJuice-QBH5JWJV.js +3 -0
  8. package/dest/FeeJuice-QBH5JWJV.js.map +7 -0
  9. package/dest/HandshakeRegistry-D2W3AOPD.js +3 -0
  10. package/dest/HandshakeRegistry-D2W3AOPD.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-MIDICLQB.js +3 -0
  12. package/dest/MultiCallEntrypoint-MIDICLQB.js.map +7 -0
  13. package/dest/SchnorrAccount-HNL7EN7Y.js +3 -0
  14. package/dest/SchnorrAccount-HNL7EN7Y.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-TFAFXZW6.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-TFAFXZW6.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-EKHK6CRD.js +268 -0
  28. package/dest/chunk-EKHK6CRD.js.map +7 -0
  29. package/dest/chunk-RELAEYUE.js +304 -0
  30. package/dest/chunk-RELAEYUE.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 +39965 -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 +46 -8
  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 +9 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +207 -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 +757 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +57 -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 +255 -89
  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 -233
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +791 -647
  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 +12 -9
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +51 -15
  93. package/dest/state_machine/mock_epoch_cache.d.ts +1 -2
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +0 -3
  96. package/dest/state_machine/synchronizer.d.ts +5 -2
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +7 -3
  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 +314 -69
  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 +7 -4
  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 +70 -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 +46 -7
  135. package/src/oracle/tagging_secret_strategy.ts +25 -0
  136. package/src/oracle/test-resolver/default_fixtures.ts +282 -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 +543 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +335 -99
  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 +890 -938
  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 -35
  150. package/src/state_machine/mock_epoch_cache.ts +0 -4
  151. package/src/state_machine/synchronizer.ts +9 -3
  152. package/src/txe_session.ts +548 -91
  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 -4
  158. package/src/worker.ts +98 -0
  159. package/dest/util/encoding.d.ts +0 -788
  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,737 +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]) => 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);
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_assertCompatibleOracleVersion(foreignVersion: ForeignCallSingle) {
268
- const version = fromSingle(foreignVersion).toNumber();
269
-
270
- this.handlerAsMisc().assertCompatibleOracleVersion(version);
271
-
272
- 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
+ });
273
251
  }
274
252
 
275
253
  // eslint-disable-next-line camelcase
276
- aztec_utl_getRandomField() {
277
- const randomField = this.handlerAsMisc().getRandomField();
278
-
279
- return toForeignCallResult([toSingle(randomField)]);
254
+ aztec_misc_getRandomField() {
255
+ return callTxeHandler({
256
+ oracle: 'aztec_misc_getRandomField',
257
+ inputs: [],
258
+ handler: () => this.handlerAsMisc().getRandomField(),
259
+ });
280
260
  }
281
261
 
282
262
  // 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))]);
263
+ aztec_txe_getLastBlockTimestamp() {
264
+ return callTxeHandler({
265
+ oracle: 'aztec_txe_getLastBlockTimestamp',
266
+ inputs: [],
267
+ handler: () => this.handlerAsTxe().getLastBlockTimestamp(),
268
+ });
287
269
  }
288
270
 
289
271
  // 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
- ]);
272
+ aztec_txe_getLastTxEffects() {
273
+ return callTxeHandler({
274
+ oracle: 'aztec_txe_getLastTxEffects',
275
+ inputs: [],
276
+ handler: () => this.handlerAsTxe().getLastTxEffects(),
277
+ });
298
278
  }
299
279
 
300
280
  // 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)]);
281
+ aztec_txe_getLastCallOffchainEffects() {
282
+ return callTxeHandler({
283
+ oracle: 'aztec_txe_getLastCallOffchainEffects',
284
+ inputs: [],
285
+ handler: () => this.stateHandler.getLastCallOffchainEffects(),
286
+ });
339
287
  }
340
288
 
341
289
  // eslint-disable-next-line camelcase
342
- aztec_prv_setHashPreimage(foreignValues: ForeignCallArray, foreignHash: ForeignCallSingle) {
343
- const values = fromArray(foreignValues);
344
- const hash = fromSingle(foreignHash);
345
-
346
- this.handlerAsPrivate().setHashPreimage(values, hash);
347
-
348
- return toForeignCallResult([]);
290
+ aztec_txe_getLastCallContext() {
291
+ return callTxeHandler({
292
+ oracle: 'aztec_txe_getLastCallContext',
293
+ inputs: [],
294
+ handler: () => this.stateHandler.getLastCallContext(),
295
+ });
349
296
  }
350
297
 
351
298
  // eslint-disable-next-line camelcase
352
- async aztec_prv_getHashPreimage(foreignHash: ForeignCallSingle) {
353
- const hash = fromSingle(foreignHash);
354
-
355
- const returns = await this.handlerAsPrivate().getHashPreimage(hash);
356
-
357
- 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
+ });
358
306
  }
359
307
 
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
308
  // 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([]);
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
+ });
378
315
  }
379
316
 
380
317
  // eslint-disable-next-line camelcase
381
- async aztec_utl_getFromPublicStorage(
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().getFromPublicStorage(
393
- blockHash,
394
- contractAddress,
395
- startStorageSlot,
396
- numberOfElements,
397
- );
398
-
399
- 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
+ });
400
324
  }
401
325
 
402
326
  // 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([]);
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
+ });
543
333
  }
544
334
 
545
335
  // 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))]);
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
+ });
556
343
  }
557
344
 
558
345
  // eslint-disable-next-line camelcase
559
- async aztec_utl_doesNullifierExist(foreignInnerNullifier: ForeignCallSingle) {
560
- const innerNullifier = fromSingle(foreignInnerNullifier);
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
+ });
352
+ }
561
353
 
562
- const exists = await this.handlerAsUtility().doesNullifierExist(innerNullifier);
354
+ // eslint-disable-next-line camelcase
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
+ });
398
+ }
563
399
 
564
- return toForeignCallResult([toSingle(new Fr(exists))]);
400
+ // eslint-disable-next-line camelcase
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
+ });
565
408
  }
566
409
 
567
410
  // eslint-disable-next-line camelcase
568
- async aztec_utl_getContractInstance(foreignAddress: ForeignCallSingle) {
569
- const address = addressFromSingle(foreignAddress);
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
+ });
418
+ }
570
419
 
571
- const instance = await this.handlerAsUtility().getContractInstance(address);
420
+ // eslint-disable-next-line camelcase
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
+ }
572
428
 
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
- );
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
+ });
582
437
  }
583
438
 
584
439
  // eslint-disable-next-line camelcase
585
- async aztec_utl_getPublicKeysAndPartialAddress(foreignAddress: ForeignCallSingle) {
586
- const address = addressFromSingle(foreignAddress);
440
+ aztec_utl_doesNullifierExist(...inputs: ForeignCallArgs) {
441
+ return callTxeHandler({
442
+ oracle: 'aztec_utl_doesNullifierExist',
443
+ inputs,
444
+ handler: ([innerNullifier]) => this.handlerAsUtility().doesNullifierExist(innerNullifier),
445
+ });
446
+ }
587
447
 
588
- const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(address);
448
+ // eslint-disable-next-line camelcase
449
+ aztec_utl_getContractInstance(...inputs: ForeignCallArgs) {
450
+ return callTxeHandler({
451
+ oracle: 'aztec_utl_getContractInstance',
452
+ inputs,
453
+ handler: ([address]) => this.handlerAsUtility().getContractInstance(address),
454
+ });
455
+ }
589
456
 
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
- }
457
+ // eslint-disable-next-line camelcase
458
+ aztec_utl_getPublicKeysAndPartialAddress(...inputs: ForeignCallArgs) {
459
+ return callTxeHandler({
460
+ oracle: 'aztec_utl_getPublicKeysAndPartialAddress',
461
+ inputs,
462
+ handler: ([address]) => this.handlerAsUtility().getPublicKeysAndPartialAddress(address),
463
+ });
602
464
  }
603
465
 
604
466
  // eslint-disable-next-line camelcase
605
- async aztec_utl_getKeyValidationRequest(foreignPkMHash: ForeignCallSingle) {
606
- const pkMHash = fromSingle(foreignPkMHash);
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
+ }
607
474
 
608
- const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
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
+ });
489
+ }
609
490
 
610
- return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
491
+ // eslint-disable-next-line camelcase
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
+ });
611
498
  }
612
499
 
613
500
  // 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
- );
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
+ });
624
508
  }
625
509
 
626
510
  // 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);
511
+ aztec_utl_getAuthWitness(...inputs: ForeignCallArgs) {
512
+ return callTxeHandler({
513
+ oracle: 'aztec_utl_getAuthWitness',
514
+ inputs,
515
+ handler: ([messageHash]) => this.handlerAsUtility().getAuthWitness(messageHash),
516
+ });
517
+ }
633
518
 
634
- const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
519
+ // eslint-disable-next-line camelcase
520
+ aztec_prv_assertValidPublicCalldata(...inputs: ForeignCallArgs) {
521
+ return callTxeHandler({
522
+ oracle: 'aztec_prv_assertValidPublicCalldata',
523
+ inputs,
524
+ handler: ([calldataHash]) => this.handlerAsPrivate().assertValidPublicCalldata(calldataHash),
525
+ });
526
+ }
635
527
 
636
- if (!witness) {
637
- throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
638
- }
639
- return toForeignCallResult(witness.toNoirRepresentation());
528
+ // eslint-disable-next-line camelcase
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
+ });
640
536
  }
641
537
 
642
538
  // eslint-disable-next-line camelcase
643
- async aztec_utl_getAuthWitness(foreignMessageHash: ForeignCallSingle) {
644
- const messageHash = fromSingle(foreignMessageHash);
539
+ aztec_prv_isExecutionInRevertiblePhase(...inputs: ForeignCallArgs) {
540
+ return callTxeHandler({
541
+ oracle: 'aztec_prv_isExecutionInRevertiblePhase',
542
+ inputs,
543
+ handler: ([sideEffectCounter]) => this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter),
544
+ });
545
+ }
645
546
 
646
- const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
547
+ // eslint-disable-next-line camelcase
548
+ aztec_utl_getUtilityContext() {
549
+ return callTxeHandler({
550
+ oracle: 'aztec_utl_getUtilityContext',
551
+ inputs: [],
552
+ handler: () => this.handlerAsUtility().getUtilityContext(),
553
+ });
554
+ }
647
555
 
648
- if (!authWitness) {
649
- throw new Error(`Auth witness not found for message hash ${messageHash}.`);
650
- }
651
- return toForeignCallResult([toArray(authWitness)]);
556
+ // eslint-disable-next-line camelcase
557
+ aztec_utl_getBlockHeader(...inputs: ForeignCallArgs) {
558
+ return callTxeHandler({
559
+ oracle: 'aztec_utl_getBlockHeader',
560
+ inputs,
561
+ handler: ([blockNumber]) => this.handlerAsUtility().getBlockHeader(blockNumber),
562
+ });
652
563
  }
653
564
 
654
565
  // eslint-disable-next-line camelcase
655
- public aztec_prv_assertValidPublicCalldata(_foreignCalldataHash: ForeignCallSingle) {
656
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
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
+ });
657
572
  }
658
573
 
659
574
  // 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');
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
+ });
662
582
  }
663
583
 
664
584
  // eslint-disable-next-line camelcase
665
- public async aztec_prv_isExecutionInRevertiblePhase(foreignSideEffectCounter: ForeignCallSingle) {
666
- const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
667
- const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter);
668
- return toForeignCallResult([toSingle(new Fr(isRevertible))]);
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
+ });
669
592
  }
670
593
 
671
594
  // eslint-disable-next-line camelcase
672
- aztec_utl_getUtilityContext() {
673
- const context = this.handlerAsUtility().getUtilityContext();
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
+ });
602
+ }
674
603
 
675
- return toForeignCallResult(context.toNoirRepresentation());
604
+ // eslint-disable-next-line camelcase
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
+ });
676
611
  }
677
612
 
678
613
  // eslint-disable-next-line camelcase
679
- async aztec_utl_getBlockHeader(foreignBlockNumber: ForeignCallSingle) {
680
- const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
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
+ });
625
+ }
681
626
 
682
- const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
627
+ // eslint-disable-next-line camelcase
628
+ aztec_utl_getLogsByTagV2(...inputs: ForeignCallArgs) {
629
+ return callTxeHandler({
630
+ oracle: 'aztec_utl_getLogsByTagV2',
631
+ inputs,
632
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot),
633
+ });
634
+ }
683
635
 
684
- if (!header) {
685
- throw new Error(`Block header not found for block ${blockNumber}.`);
686
- }
687
- return toForeignCallResult(header.toFields().map(toSingle));
636
+ // eslint-disable-next-line camelcase
637
+ aztec_utl_getResolvedTxs(...inputs: ForeignCallArgs) {
638
+ return callTxeHandler({
639
+ oracle: 'aztec_utl_getResolvedTxs',
640
+ inputs,
641
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot),
642
+ });
688
643
  }
689
644
 
690
645
  // 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);
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
+ }
697
653
 
698
- const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
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
+ }
699
663
 
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());
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
+ });
704
672
  }
705
673
 
706
674
  // 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));
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
+ }
713
682
 
714
- const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
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
+ }
715
692
 
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());
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
+ });
722
700
  }
723
701
 
724
702
  // 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);
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
+ }
731
710
 
732
- const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
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
+ }
733
719
 
734
- if (!witness) {
735
- throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
736
- }
737
- return toForeignCallResult(witness.toNoirRepresentation());
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
+ });
738
727
  }
739
728
 
740
729
  // eslint-disable-next-line camelcase
741
- async aztec_utl_getPendingTaggedLogs(
742
- foreignPendingTaggedLogArrayBaseSlot: ForeignCallSingle,
743
- foreignScope: ForeignCallSingle,
744
- ) {
745
- const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
746
- 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
+ }
747
737
 
748
- await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, 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
+ }
749
746
 
750
- 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
+ });
751
754
  }
752
-
755
+
753
756
  // eslint-disable-next-line camelcase
754
- public async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
755
- foreignContractAddress: ForeignCallSingle,
756
- foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
757
- foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
758
- foreignMaxNotePackedLen: ForeignCallSingle,
759
- foreignMaxEventSerializedLen: ForeignCallSingle,
760
- foreignScope: ForeignCallSingle,
761
- ) {
762
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
763
- const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
764
- const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
765
- const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
766
- const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
767
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
768
-
769
- await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
770
- contractAddress,
771
- noteValidationRequestsArrayBaseSlot,
772
- eventValidationRequestsArrayBaseSlot,
773
- maxNotePackedLen,
774
- maxEventSerializedLen,
775
- scope,
776
- );
777
-
778
- return toForeignCallResult([]);
779
- }
780
-
781
- // eslint-disable-next-line camelcase
782
- public async aztec_utl_getLogsByTag(
783
- foreignContractAddress: ForeignCallSingle,
784
- foreignLogRetrievalRequestsArrayBaseSlot: ForeignCallSingle,
785
- foreignLogRetrievalResponsesArrayBaseSlot: ForeignCallSingle,
786
- foreignScope: ForeignCallSingle,
787
- ) {
788
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
789
- const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
790
- const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
791
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
792
-
793
- await this.handlerAsUtility().getLogsByTag(
794
- contractAddress,
795
- logRetrievalRequestsArrayBaseSlot,
796
- logRetrievalResponsesArrayBaseSlot,
797
- scope,
798
- );
799
-
800
- return toForeignCallResult([]);
801
- }
802
-
803
- // eslint-disable-next-line camelcase
804
- public async aztec_utl_getMessageContextsByTxHash(
805
- foreignContractAddress: ForeignCallSingle,
806
- foreignMessageContextRequestsArrayBaseSlot: ForeignCallSingle,
807
- foreignMessageContextResponsesArrayBaseSlot: ForeignCallSingle,
808
- foreignScope: ForeignCallSingle,
809
- ) {
810
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
811
- const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
812
- const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
813
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
814
-
815
- await this.handlerAsUtility().getMessageContextsByTxHash(
816
- contractAddress,
817
- messageContextRequestsArrayBaseSlot,
818
- messageContextResponsesArrayBaseSlot,
819
- scope,
820
- );
821
-
822
- return toForeignCallResult([]);
823
- }
824
-
825
- // eslint-disable-next-line camelcase
826
- aztec_utl_setCapsule(
827
- foreignContractAddress: ForeignCallSingle,
828
- foreignSlot: ForeignCallSingle,
829
- foreignCapsule: ForeignCallArray,
830
- foreignScope: ForeignCallSingle,
831
- ) {
832
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
833
- const slot = fromSingle(foreignSlot);
834
- const capsule = fromArray(foreignCapsule);
835
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
836
-
837
- this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
838
-
839
- return toForeignCallResult([]);
840
- }
841
-
842
- // eslint-disable-next-line camelcase
843
- async aztec_utl_getCapsule(
844
- foreignContractAddress: ForeignCallSingle,
845
- foreignSlot: ForeignCallSingle,
846
- foreignTSize: ForeignCallSingle,
847
- foreignScope: ForeignCallSingle,
848
- ) {
849
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
850
- const slot = fromSingle(foreignSlot);
851
- const tSize = fromSingle(foreignTSize).toNumber();
852
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
853
-
854
- const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
855
-
856
- // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
857
- // with two fields: `some` (a boolean) and `value` (a field array in this case).
858
- if (values === null) {
859
- // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
860
- return toForeignCallResult([toSingle(new Fr(0)), toArray(Array(tSize).fill(new Fr(0)))]);
861
- } else {
862
- // Data was found so we set `some` to 1 and return it along with `value`.
863
- return toForeignCallResult([toSingle(new Fr(1)), toArray(values)]);
864
- }
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
+ });
865
763
  }
866
764
 
867
765
  // eslint-disable-next-line camelcase
868
- aztec_utl_deleteCapsule(
869
- foreignContractAddress: ForeignCallSingle,
870
- foreignSlot: ForeignCallSingle,
871
- foreignScope: ForeignCallSingle,
872
- ) {
873
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
874
- const slot = fromSingle(foreignSlot);
875
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
766
+ aztec_utl_popTransient(...inputs: ForeignCallArgs) {
767
+ return callTxeHandler({
768
+ oracle: 'aztec_utl_popTransient',
769
+ inputs,
770
+ handler: ([slot]) => this.handlerAsUtility().popTransient(slot),
771
+ });
772
+ }
876
773
 
877
- this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
774
+ // eslint-disable-next-line camelcase
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
+ });
781
+ }
878
782
 
879
- return toForeignCallResult([]);
783
+ // eslint-disable-next-line camelcase
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
+ });
880
790
  }
881
791
 
882
792
  // eslint-disable-next-line camelcase
883
- async aztec_utl_copyCapsule(
884
- foreignContractAddress: ForeignCallSingle,
885
- foreignSrcSlot: ForeignCallSingle,
886
- foreignDstSlot: ForeignCallSingle,
887
- foreignNumEntries: ForeignCallSingle,
888
- foreignScope: ForeignCallSingle,
889
- ) {
890
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
891
- const srcSlot = fromSingle(foreignSrcSlot);
892
- const dstSlot = fromSingle(foreignDstSlot);
893
- const numEntries = fromSingle(foreignNumEntries).toNumber();
894
- const scope = AztecAddress.fromField(fromSingle(foreignScope));
793
+ aztec_utl_getTransientLen(...inputs: ForeignCallArgs) {
794
+ return callTxeHandler({
795
+ oracle: 'aztec_utl_getTransientLen',
796
+ inputs,
797
+ handler: ([slot]) => this.handlerAsUtility().getTransientLen(slot),
798
+ });
799
+ }
895
800
 
896
- await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
801
+ // eslint-disable-next-line camelcase
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
+ });
808
+ }
897
809
 
898
- return toForeignCallResult([]);
810
+ // eslint-disable-next-line camelcase
811
+ aztec_utl_clearTransient(...inputs: ForeignCallArgs) {
812
+ return callTxeHandler({
813
+ oracle: 'aztec_utl_clearTransient',
814
+ inputs,
815
+ handler: ([slot]) => this.handlerAsUtility().clearTransient(slot),
816
+ });
899
817
  }
900
818
 
901
819
  // TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
@@ -903,365 +821,399 @@ export class RPCTranslator {
903
821
  // to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
904
822
  // existence of a txe_oracle method?
905
823
  // eslint-disable-next-line camelcase
906
- async aztec_utl_decryptAes128(
907
- foreignCiphertextBVecStorage: ForeignCallArray,
908
- foreignCiphertextLength: ForeignCallSingle,
909
- foreignIv: ForeignCallArray,
910
- foreignSymKey: ForeignCallArray,
911
- ) {
912
- const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
913
- const iv = fromUintArray(foreignIv, 8);
914
- const symKey = fromUintArray(foreignSymKey, 8);
915
-
916
- // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
917
- try {
918
- const plaintextBuffer = await this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey);
919
- const [storage, length] = arrayToBoundedVec(
920
- bufferToU8Array(plaintextBuffer),
921
- foreignCiphertextBVecStorage.length,
922
- );
923
- return toForeignCallResult([toSingle(new Fr(1)), storage, length]);
924
- } catch {
925
- const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
926
- return toForeignCallResult([toSingle(new Fr(0)), zeroStorage, toSingle(new Fr(0))]);
927
- }
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
+ });
928
830
  }
929
831
 
930
832
  // eslint-disable-next-line camelcase
931
- async aztec_utl_getSharedSecret(
932
- foreignAddress: ForeignCallSingle,
933
- foreignEphPKField0: ForeignCallSingle,
934
- foreignEphPKField1: ForeignCallSingle,
935
- foreignEphPKField2: ForeignCallSingle,
936
- foreignContractAddress: ForeignCallSingle,
937
- ) {
938
- const address = AztecAddress.fromField(fromSingle(foreignAddress));
939
- const ephPK = Point.fromFields([
940
- fromSingle(foreignEphPKField0),
941
- fromSingle(foreignEphPKField1),
942
- fromSingle(foreignEphPKField2),
943
- ]);
944
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
945
-
946
- const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK, contractAddress);
947
-
948
- 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
+ });
949
840
  }
950
841
 
951
842
  // eslint-disable-next-line camelcase
952
- aztec_utl_setContractSyncCacheInvalid(
953
- foreignContractAddress: ForeignCallSingle,
954
- foreignScopes: ForeignCallArray,
955
- foreignScopeCount: ForeignCallSingle,
956
- ) {
957
- const contractAddress = addressFromSingle(foreignContractAddress);
958
- const count = fromSingle(foreignScopeCount).toNumber();
959
- const scopes = fromArray(foreignScopes)
960
- .slice(0, count)
961
- .map(f => new AztecAddress(f));
962
-
963
- this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
964
-
965
- 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
+ });
966
850
  }
967
851
 
968
852
  // eslint-disable-next-line camelcase
969
- aztec_utl_emitOffchainEffect(_foreignData: ForeignCallArray) {
970
- 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
+ });
971
865
  }
972
866
 
973
- // AVM opcodes
974
-
975
867
  // eslint-disable-next-line camelcase
976
- aztec_avm_emitPublicLog(_foreignMessage: ForeignCallArray) {
977
- // TODO(#8811): Implement
978
- 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
+ });
979
883
  }
980
884
 
981
885
  // eslint-disable-next-line camelcase
982
- async aztec_avm_storageRead(foreignSlot: ForeignCallSingle, foreignContractAddress: ForeignCallSingle) {
983
- const slot = fromSingle(foreignSlot);
984
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
985
-
986
- const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
987
-
988
- 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
+ });
989
893
  }
990
894
 
991
895
  // eslint-disable-next-line camelcase
992
- async aztec_avm_storageWrite(foreignSlot: ForeignCallSingle, foreignValue: ForeignCallSingle) {
993
- const slot = fromSingle(foreignSlot);
994
- const value = fromSingle(foreignValue);
995
-
996
- await this.handlerAsAvm().storageWrite(slot, value);
997
-
998
- 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
+ });
999
903
  }
1000
904
 
1001
905
  // eslint-disable-next-line camelcase
1002
- async aztec_avm_getContractInstanceDeployer(foreignAddress: ForeignCallSingle) {
1003
- 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
+ }
1004
914
 
1005
- const instance = await this.handlerAsUtility().getContractInstance(address);
915
+ // AVM opcodes
1006
916
 
1007
- return toForeignCallResult([
1008
- toSingle(instance.deployer),
1009
- // AVM requires an extra boolean indicating the instance was found
1010
- toSingle(new Fr(1)),
1011
- ]);
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
+ });
1012
925
  }
1013
926
 
1014
927
  // eslint-disable-next-line camelcase
1015
- async aztec_avm_getContractInstanceClassId(foreignAddress: ForeignCallSingle) {
1016
- const address = addressFromSingle(foreignAddress);
1017
-
1018
- const instance = await this.handlerAsUtility().getContractInstance(address);
1019
-
1020
- return toForeignCallResult([
1021
- toSingle(instance.currentContractClassId),
1022
- // AVM requires an extra boolean indicating the instance was found
1023
- toSingle(new Fr(1)),
1024
- ]);
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
+ });
1025
934
  }
1026
935
 
1027
936
  // eslint-disable-next-line camelcase
1028
- async aztec_avm_getContractInstanceInitializationHash(foreignAddress: ForeignCallSingle) {
1029
- const address = addressFromSingle(foreignAddress);
1030
-
1031
- const instance = await this.handlerAsUtility().getContractInstance(address);
1032
-
1033
- return toForeignCallResult([
1034
- toSingle(instance.initializationHash),
1035
- // AVM requires an extra boolean indicating the instance was found
1036
- toSingle(new Fr(1)),
1037
- ]);
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
+ });
1038
943
  }
1039
944
 
1040
945
  // eslint-disable-next-line camelcase
1041
- async aztec_avm_sender() {
1042
- const sender = await this.handlerAsAvm().sender();
1043
-
1044
- 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
+ });
1045
952
  }
1046
953
 
1047
954
  // eslint-disable-next-line camelcase
1048
- async aztec_avm_emitNullifier(foreignNullifier: ForeignCallSingle) {
1049
- const nullifier = fromSingle(foreignNullifier);
1050
-
1051
- await this.handlerAsAvm().emitNullifier(nullifier);
1052
-
1053
- 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
+ });
1054
961
  }
1055
962
 
1056
963
  // eslint-disable-next-line camelcase
1057
- async aztec_avm_emitNoteHash(foreignNoteHash: ForeignCallSingle) {
1058
- const noteHash = fromSingle(foreignNoteHash);
1059
-
1060
- await this.handlerAsAvm().emitNoteHash(noteHash);
1061
-
1062
- 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
+ });
1063
970
  }
1064
971
 
1065
972
  // eslint-disable-next-line camelcase
1066
- async aztec_avm_nullifierExists(foreignSiloedNullifier: ForeignCallSingle) {
1067
- const siloedNullifier = fromSingle(foreignSiloedNullifier);
1068
-
1069
- const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
1070
-
1071
- 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
+ });
1072
979
  }
1073
980
 
1074
981
  // eslint-disable-next-line camelcase
1075
- async aztec_avm_address() {
1076
- const contractAddress = await this.handlerAsAvm().address();
1077
-
1078
- 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
+ });
1079
988
  }
1080
989
 
1081
990
  // eslint-disable-next-line camelcase
1082
- async aztec_avm_blockNumber() {
1083
- const blockNumber = await this.handlerAsAvm().blockNumber();
1084
-
1085
- 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
+ });
1086
997
  }
1087
998
 
1088
999
  // eslint-disable-next-line camelcase
1089
- async aztec_avm_timestamp() {
1090
- const timestamp = await this.handlerAsAvm().timestamp();
1091
-
1092
- 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
+ });
1093
1006
  }
1094
1007
 
1095
1008
  // eslint-disable-next-line camelcase
1096
- async aztec_avm_isStaticCall() {
1097
- const isStaticCall = await this.handlerAsAvm().isStaticCall();
1098
-
1099
- 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
+ });
1100
1015
  }
1101
1016
 
1102
1017
  // eslint-disable-next-line camelcase
1103
- async aztec_avm_chainId() {
1104
- const chainId = await this.handlerAsAvm().chainId();
1105
-
1106
- return toForeignCallResult([toSingle(chainId)]);
1018
+ aztec_avm_address() {
1019
+ return callTxeHandler({
1020
+ oracle: 'aztec_avm_address',
1021
+ inputs: [],
1022
+ handler: () => this.handlerAsAvm().address(),
1023
+ });
1107
1024
  }
1108
1025
 
1109
1026
  // eslint-disable-next-line camelcase
1110
- async aztec_avm_version() {
1111
- const version = await this.handlerAsAvm().version();
1112
-
1113
- return toForeignCallResult([toSingle(version)]);
1027
+ aztec_avm_blockNumber() {
1028
+ return callTxeHandler({
1029
+ oracle: 'aztec_avm_blockNumber',
1030
+ inputs: [],
1031
+ handler: () => this.handlerAsAvm().blockNumber(),
1032
+ });
1114
1033
  }
1115
1034
 
1116
1035
  // eslint-disable-next-line camelcase
1117
- aztec_avm_returndataSize() {
1118
- throw new Error(
1119
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1120
- );
1036
+ aztec_avm_timestamp() {
1037
+ return callTxeHandler({
1038
+ oracle: 'aztec_avm_timestamp',
1039
+ inputs: [],
1040
+ handler: () => this.handlerAsAvm().timestamp(),
1041
+ });
1121
1042
  }
1122
1043
 
1123
1044
  // eslint-disable-next-line camelcase
1124
- aztec_avm_returndataCopy(_foreignRdOffset: ForeignCallSingle, _foreignCopySize: ForeignCallSingle) {
1125
- throw new Error(
1126
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1127
- );
1045
+ aztec_avm_isStaticCall() {
1046
+ return callTxeHandler({
1047
+ oracle: 'aztec_avm_isStaticCall',
1048
+ inputs: [],
1049
+ handler: () => this.handlerAsAvm().isStaticCall(),
1050
+ });
1128
1051
  }
1129
1052
 
1130
1053
  // eslint-disable-next-line camelcase
1131
- aztec_avm_call(
1132
- _foreignL2Gas: ForeignCallSingle,
1133
- _foreignDaGas: ForeignCallSingle,
1134
- _foreignAddress: ForeignCallSingle,
1135
- _foreignLength: ForeignCallSingle,
1136
- _foreignArgs: ForeignCallArray,
1137
- ) {
1138
- throw new Error(
1139
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1140
- );
1054
+ aztec_avm_chainId() {
1055
+ return callTxeHandler({
1056
+ oracle: 'aztec_avm_chainId',
1057
+ inputs: [],
1058
+ handler: () => this.handlerAsAvm().chainId(),
1059
+ });
1141
1060
  }
1142
1061
 
1143
1062
  // eslint-disable-next-line camelcase
1144
- aztec_avm_staticCall(
1145
- _foreignL2Gas: ForeignCallSingle,
1146
- _foreignDaGas: ForeignCallSingle,
1147
- _foreignAddress: ForeignCallSingle,
1148
- _foreignLength: ForeignCallSingle,
1149
- _foreignArgs: ForeignCallArray,
1150
- ) {
1151
- throw new Error(
1152
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1153
- );
1063
+ aztec_avm_version() {
1064
+ return callTxeHandler({
1065
+ oracle: 'aztec_avm_version',
1066
+ inputs: [],
1067
+ handler: () => this.handlerAsAvm().version(),
1068
+ });
1154
1069
  }
1155
1070
 
1156
1071
  // eslint-disable-next-line camelcase
1157
- aztec_avm_successCopy() {
1158
- throw new Error(
1159
- 'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
1160
- );
1161
- }
1162
-
1163
- // eslint-disable-next-line camelcase
1164
- async aztec_txe_privateCallNewFlow(
1165
- foreignFrom: ForeignCallSingle,
1166
- foreignTargetContractAddress: ForeignCallSingle,
1167
- foreignFunctionSelector: ForeignCallSingle,
1168
- foreignArgs: ForeignCallArray,
1169
- foreignArgsHash: ForeignCallSingle,
1170
- foreignIsStaticCall: ForeignCallSingle,
1171
- ) {
1172
- const from = addressFromSingle(foreignFrom);
1173
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
1174
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
1175
- const args = fromArray(foreignArgs);
1176
- const argsHash = fromSingle(foreignArgsHash);
1177
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
1178
-
1179
- const returnValues = await this.handlerAsTxe().privateCallNewFlow(
1180
- from,
1181
- targetContractAddress,
1182
- functionSelector,
1183
- args,
1184
- argsHash,
1185
- isStaticCall,
1186
- this.stateHandler.getCurrentJob(),
1187
- );
1188
-
1189
- // TODO(F-335): Avoid doing the following call here.
1190
- await this.stateHandler.cycleJob();
1191
- return toForeignCallResult([toArray(returnValues)]);
1192
- }
1193
-
1194
- // eslint-disable-next-line camelcase
1195
- async aztec_txe_executeUtilityFunction(
1196
- foreignTargetContractAddress: ForeignCallSingle,
1197
- foreignFunctionSelector: ForeignCallSingle,
1198
- foreignArgs: ForeignCallArray,
1199
- ) {
1200
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
1201
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
1202
- const args = fromArray(foreignArgs);
1203
-
1204
- const returnValues = await this.handlerAsTxe().executeUtilityFunction(
1205
- targetContractAddress,
1206
- functionSelector,
1207
- args,
1208
- this.stateHandler.getCurrentJob(),
1209
- );
1210
-
1211
- // TODO(F-335): Avoid doing the following call here.
1212
- await this.stateHandler.cycleJob();
1213
- return toForeignCallResult([toArray(returnValues)]);
1214
- }
1215
-
1216
- // eslint-disable-next-line camelcase
1217
- async aztec_txe_publicCallNewFlow(
1218
- foreignFrom: ForeignCallSingle,
1219
- foreignAddress: ForeignCallSingle,
1220
- foreignCalldata: ForeignCallArray,
1221
- foreignIsStaticCall: ForeignCallSingle,
1222
- ) {
1223
- const from = addressFromSingle(foreignFrom);
1224
- const address = addressFromSingle(foreignAddress);
1225
- const calldata = fromArray(foreignCalldata);
1226
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
1227
-
1228
- const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
1229
-
1230
- // TODO(F-335): Avoid doing the following call here.
1231
- await this.stateHandler.cycleJob();
1232
- return toForeignCallResult([toArray(returnValues)]);
1233
- }
1234
-
1235
- // eslint-disable-next-line camelcase
1236
- async aztec_prv_getSenderForTags() {
1237
- const sender = await this.handlerAsPrivate().getSenderForTags();
1238
-
1239
- // Return a Noir Option struct with `some` and `value` fields
1240
- if (sender === undefined) {
1241
- // No sender found, return Option with some=0 and value=0
1242
- return toForeignCallResult([toSingle(0), toSingle(0)]);
1243
- } else {
1244
- // Sender found, return Option with some=1 and value=sender address
1245
- return toForeignCallResult([toSingle(1), toSingle(sender)]);
1246
- }
1072
+ aztec_avm_returndataSize() {
1073
+ return callTxeHandler({
1074
+ oracle: 'aztec_avm_returndataSize',
1075
+ inputs: [],
1076
+ handler: () => this.handlerAsAvm().returndataSize(),
1077
+ });
1247
1078
  }
1248
1079
 
1249
1080
  // eslint-disable-next-line camelcase
1250
- async aztec_prv_setSenderForTags(foreignSenderForTags: ForeignCallSingle) {
1251
- const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
1252
-
1253
- await this.handlerAsPrivate().setSenderForTags(senderForTags);
1254
-
1255
- 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
+ });
1256
1087
  }
1257
1088
 
1258
1089
  // eslint-disable-next-line camelcase
1259
- async aztec_prv_getNextAppTagAsSender(foreignSender: ForeignCallSingle, foreignRecipient: ForeignCallSingle) {
1260
- const sender = AztecAddress.fromField(fromSingle(foreignSender));
1261
- 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
+ }
1262
1098
 
1263
- 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
+ }
1264
1108
 
1265
- 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
+ });
1266
1218
  }
1267
1219
  }