@aztec/txe 0.0.1-commit.3469e52 → 0.0.1-commit.350e0a4d

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