@aztec-labs/txe 6.0.0-nightly.20260829

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 (173) hide show
  1. package/dest/AuthRegistry-D4XJULH3.js +3 -0
  2. package/dest/AuthRegistry-D4XJULH3.js.map +7 -0
  3. package/dest/ContractClassRegistry-Q76MXQZD.js +3 -0
  4. package/dest/ContractClassRegistry-Q76MXQZD.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-CTRARU77.js +3 -0
  6. package/dest/ContractInstanceRegistry-CTRARU77.js.map +7 -0
  7. package/dest/FeeJuice-YLTJXWYJ.js +3 -0
  8. package/dest/FeeJuice-YLTJXWYJ.js.map +7 -0
  9. package/dest/HandshakeRegistry-BRPEG7GL.js +3 -0
  10. package/dest/HandshakeRegistry-BRPEG7GL.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-CJHMYQT5.js +3 -0
  12. package/dest/MultiCallEntrypoint-CJHMYQT5.js.map +7 -0
  13. package/dest/SchnorrAccount-OB4N4QIM.js +3 -0
  14. package/dest/SchnorrAccount-OB4N4QIM.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-TWGKRUSY.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 +22 -0
  20. package/dest/bin/index.d.ts +3 -0
  21. package/dest/bin/index.d.ts.map +1 -0
  22. package/dest/bin/index.js +4 -0
  23. package/dest/bin/index.js.map +7 -0
  24. package/dest/bin/oracle_test_server.d.ts +3 -0
  25. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  26. package/dest/bin/oracle_test_server.js +41 -0
  27. package/dest/chunk-32UHX7YY.js +3 -0
  28. package/dest/chunk-32UHX7YY.js.map +7 -0
  29. package/dest/chunk-F4QVFWNM.js +258 -0
  30. package/dest/chunk-F4QVFWNM.js.map +7 -0
  31. package/dest/chunk-LILEKW2X.js +304 -0
  32. package/dest/chunk-LILEKW2X.js.map +7 -0
  33. package/dest/constants.d.ts +7 -0
  34. package/dest/constants.d.ts.map +1 -0
  35. package/dest/constants.js +10 -0
  36. package/dest/dispatcher_pool.d.ts +67 -0
  37. package/dest/dispatcher_pool.d.ts.map +1 -0
  38. package/dest/dispatcher_pool.js +288 -0
  39. package/dest/index.d.ts +52 -0
  40. package/dest/index.d.ts.map +1 -0
  41. package/dest/index.js +102 -0
  42. package/dest/metafile.json +38805 -0
  43. package/dest/msgpackr_fr_extension.d.ts +2 -0
  44. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  45. package/dest/msgpackr_fr_extension.js +21 -0
  46. package/dest/oracle/interfaces.d.ts +90 -0
  47. package/dest/oracle/interfaces.d.ts.map +1 -0
  48. package/dest/oracle/interfaces.js +3 -0
  49. package/dest/oracle/noir-structs/gas_settings_data.d.ts +14 -0
  50. package/dest/oracle/noir-structs/gas_settings_data.d.ts.map +1 -0
  51. package/dest/oracle/noir-structs/gas_settings_data.js +1 -0
  52. package/dest/oracle/noir-structs/tx_effects_data.d.ts +11 -0
  53. package/dest/oracle/noir-structs/tx_effects_data.d.ts.map +1 -0
  54. package/dest/oracle/noir-structs/tx_effects_data.js +1 -0
  55. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  56. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  57. package/dest/oracle/tagging_secret_strategy.js +12 -0
  58. package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
  59. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  60. package/dest/oracle/test-resolver/default_fixtures.js +207 -0
  61. package/dest/oracle/test-resolver/index.d.ts +9 -0
  62. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  63. package/dest/oracle/test-resolver/index.js +32 -0
  64. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  65. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  66. package/dest/oracle/test-resolver/resolver.js +181 -0
  67. package/dest/oracle/txe_oracle_public_context.d.ts +58 -0
  68. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_public_context.js +170 -0
  70. package/dest/oracle/txe_oracle_registry.d.ts +164 -0
  71. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  72. package/dest/oracle/txe_oracle_registry.js +753 -0
  73. package/dest/oracle/txe_oracle_top_level_context.d.ts +128 -0
  74. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -0
  75. package/dest/oracle/txe_oracle_top_level_context.js +815 -0
  76. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  77. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  78. package/dest/oracle/txe_oracle_version.js +14 -0
  79. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  80. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  81. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  82. package/dest/rpc_server.d.ts +14 -0
  83. package/dest/rpc_server.d.ts.map +1 -0
  84. package/dest/rpc_server.js +78 -0
  85. package/dest/rpc_translator.d.ts +140 -0
  86. package/dest/rpc_translator.d.ts.map +1 -0
  87. package/dest/rpc_translator.js +976 -0
  88. package/dest/server.bundle.js +3 -0
  89. package/dest/server.bundle.js.map +7 -0
  90. package/dest/state_machine/archiver.d.ts +32 -0
  91. package/dest/state_machine/archiver.d.ts.map +1 -0
  92. package/dest/state_machine/archiver.js +95 -0
  93. package/dest/state_machine/dummy_p2p_client.d.ts +69 -0
  94. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -0
  95. package/dest/state_machine/dummy_p2p_client.js +180 -0
  96. package/dest/state_machine/global_variable_builder.d.ts +15 -0
  97. package/dest/state_machine/global_variable_builder.d.ts.map +1 -0
  98. package/dest/state_machine/global_variable_builder.js +25 -0
  99. package/dest/state_machine/index.d.ts +22 -0
  100. package/dest/state_machine/index.d.ts.map +1 -0
  101. package/dest/state_machine/index.js +110 -0
  102. package/dest/state_machine/mock_epoch_cache.d.ts +43 -0
  103. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -0
  104. package/dest/state_machine/mock_epoch_cache.js +88 -0
  105. package/dest/state_machine/synchronizer.d.ts +41 -0
  106. package/dest/state_machine/synchronizer.d.ts.map +1 -0
  107. package/dest/state_machine/synchronizer.js +70 -0
  108. package/dest/txe_session.d.ts +179 -0
  109. package/dest/txe_session.d.ts.map +1 -0
  110. package/dest/txe_session.js +697 -0
  111. package/dest/utils/block_creation.d.ts +28 -0
  112. package/dest/utils/block_creation.d.ts.map +1 -0
  113. package/dest/utils/block_creation.js +59 -0
  114. package/dest/utils/encoding.d.ts +194 -0
  115. package/dest/utils/encoding.d.ts.map +1 -0
  116. package/dest/utils/encoding.js +136 -0
  117. package/dest/utils/expected_failure_error.d.ts +4 -0
  118. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  119. package/dest/utils/expected_failure_error.js +5 -0
  120. package/dest/utils/tx_effect_creation.d.ts +5 -0
  121. package/dest/utils/tx_effect_creation.d.ts.map +1 -0
  122. package/dest/utils/tx_effect_creation.js +12 -0
  123. package/dest/utils/txe_account_store.d.ts +10 -0
  124. package/dest/utils/txe_account_store.d.ts.map +1 -0
  125. package/dest/utils/txe_account_store.js +17 -0
  126. package/dest/utils/txe_artifact_resolver.d.ts +36 -0
  127. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  128. package/dest/utils/txe_artifact_resolver.js +160 -0
  129. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  130. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  131. package/dest/utils/txe_public_contract_data_source.js +51 -0
  132. package/dest/worker.bundle.js +3 -0
  133. package/dest/worker.bundle.js.map +7 -0
  134. package/dest/worker.d.ts +2 -0
  135. package/dest/worker.d.ts.map +1 -0
  136. package/dest/worker.js +92 -0
  137. package/package.json +115 -0
  138. package/src/bin/check_txe_oracle_version.ts +31 -0
  139. package/src/bin/index.ts +49 -0
  140. package/src/bin/oracle_test_server.ts +51 -0
  141. package/src/constants.ts +13 -0
  142. package/src/dispatcher_pool.ts +319 -0
  143. package/src/index.ts +152 -0
  144. package/src/msgpackr_fr_extension.ts +22 -0
  145. package/src/oracle/interfaces.ts +125 -0
  146. package/src/oracle/noir-structs/gas_settings_data.ts +16 -0
  147. package/src/oracle/noir-structs/tx_effects_data.ts +11 -0
  148. package/src/oracle/tagging_secret_strategy.ts +25 -0
  149. package/src/oracle/test-resolver/default_fixtures.ts +278 -0
  150. package/src/oracle/test-resolver/index.ts +43 -0
  151. package/src/oracle/test-resolver/resolver.ts +245 -0
  152. package/src/oracle/txe_oracle_public_context.ts +220 -0
  153. package/src/oracle/txe_oracle_registry.ts +501 -0
  154. package/src/oracle/txe_oracle_top_level_context.ts +1086 -0
  155. package/src/oracle/txe_oracle_version.ts +17 -0
  156. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  157. package/src/rpc_server.ts +86 -0
  158. package/src/rpc_translator.ts +1229 -0
  159. package/src/state_machine/archiver.ts +118 -0
  160. package/src/state_machine/dummy_p2p_client.ts +264 -0
  161. package/src/state_machine/global_variable_builder.ts +39 -0
  162. package/src/state_machine/index.ts +152 -0
  163. package/src/state_machine/mock_epoch_cache.ts +111 -0
  164. package/src/state_machine/synchronizer.ts +105 -0
  165. package/src/txe_session.ts +1107 -0
  166. package/src/utils/block_creation.ts +91 -0
  167. package/src/utils/encoding.ts +171 -0
  168. package/src/utils/expected_failure_error.ts +5 -0
  169. package/src/utils/tx_effect_creation.ts +28 -0
  170. package/src/utils/txe_account_store.ts +23 -0
  171. package/src/utils/txe_artifact_resolver.ts +217 -0
  172. package/src/utils/txe_public_contract_data_source.ts +60 -0
  173. package/src/worker.ts +98 -0
@@ -0,0 +1,753 @@
1
+ /* eslint-disable camelcase */ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec-labs/constants';
2
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
3
+ import { Point } from '@aztec-labs/foundation/curves/grumpkin';
4
+ import { withHexPrefix, withoutHexPrefix } from '@aztec-labs/foundation/string';
5
+ import { ARRAY, AZTEC_ADDRESS, BLOCK_HEADER, BLOCK_NUMBER, BOOL, ETH_ADDRESS, FIELD, FIXED_ARRAY, FIXED_BOUNDED_VEC, FUNCTION_SELECTOR, GAS_FEES, LEAF, OPTION, ORACLE_REGISTRY, PUBLIC_KEYS, SCALAR, STR, STRUCT, TX_HASH, U32, U64, VECTOR, buildACIRCallback, makeEntry } from '@aztec-labs/pxe/simulator';
6
+ import { EventSelector } from '@aztec-labs/stdlib/abi';
7
+ import { MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY, MAX_OFFCHAIN_EFFECT_LEN, MAX_PRIVATE_EVENTS_PER_TXE_QUERY, MAX_PRIVATE_EVENT_LEN } from '../constants.js';
8
+ const GAS = STRUCT([
9
+ {
10
+ name: 'daGas',
11
+ type: U32
12
+ },
13
+ {
14
+ name: 'l2Gas',
15
+ type: U32
16
+ }
17
+ ]);
18
+ const GAS_SETTINGS = STRUCT([
19
+ {
20
+ name: 'gasLimits',
21
+ type: GAS
22
+ },
23
+ {
24
+ name: 'teardownGasLimits',
25
+ type: GAS
26
+ },
27
+ {
28
+ name: 'maxFeesPerGas',
29
+ type: GAS_FEES
30
+ },
31
+ {
32
+ name: 'maxPriorityFeesPerGas',
33
+ type: GAS_FEES
34
+ }
35
+ ]);
36
+ // Tagging secret strategy discriminants. Must match the Noir test helper `TaggingSecretStrategy` in
37
+ // aztec-nr `test/helpers/tagging_secret_strategy.nr`. This is a test-only oracle (only `set_tagging_secret_strategies`
38
+ // reads it), so the mapping lives here on the TXE side rather than in the production oracle type mappings.
39
+ const STRATEGY_NON_INTERACTIVE_HANDSHAKE = 1;
40
+ const STRATEGY_ARBITRARY_SECRET = 2;
41
+ const STRATEGY_ADDRESS_DERIVED = 3;
42
+ const STRATEGY_INTERACTIVE_HANDSHAKE = 4;
43
+ const TAGGING_SECRET_STRATEGY = LEAF({
44
+ kind: 'tagging-secret-strategy',
45
+ serialization: {
46
+ fn: (strategy)=>{
47
+ switch(strategy.type){
48
+ case 'non-interactive-handshake':
49
+ return [
50
+ new Fr(STRATEGY_NON_INTERACTIVE_HANDSHAKE),
51
+ Fr.ZERO,
52
+ Fr.ZERO
53
+ ];
54
+ case 'interactive-handshake':
55
+ return [
56
+ new Fr(STRATEGY_INTERACTIVE_HANDSHAKE),
57
+ Fr.ZERO,
58
+ Fr.ZERO
59
+ ];
60
+ case 'address-derived':
61
+ return [
62
+ new Fr(STRATEGY_ADDRESS_DERIVED),
63
+ Fr.ZERO,
64
+ Fr.ZERO
65
+ ];
66
+ case 'arbitrary-secret':
67
+ return [
68
+ new Fr(STRATEGY_ARBITRARY_SECRET),
69
+ strategy.secret.x,
70
+ strategy.secret.y
71
+ ];
72
+ }
73
+ }
74
+ },
75
+ deserialization: {
76
+ fn: ([kindReader, xReader, yReader])=>{
77
+ const kind = kindReader.readField().toNumber();
78
+ const [x, y] = [
79
+ xReader.readField(),
80
+ yReader.readField()
81
+ ];
82
+ switch(kind){
83
+ case STRATEGY_NON_INTERACTIVE_HANDSHAKE:
84
+ return {
85
+ type: 'non-interactive-handshake'
86
+ };
87
+ case STRATEGY_INTERACTIVE_HANDSHAKE:
88
+ return {
89
+ type: 'interactive-handshake'
90
+ };
91
+ case STRATEGY_ADDRESS_DERIVED:
92
+ return {
93
+ type: 'address-derived'
94
+ };
95
+ case STRATEGY_ARBITRARY_SECRET:
96
+ return {
97
+ type: 'arbitrary-secret',
98
+ secret: Point.fromFields([
99
+ x,
100
+ y
101
+ ])
102
+ };
103
+ default:
104
+ throw new Error(`Unrecognized tagging secret strategy kind: ${kind}`);
105
+ }
106
+ }
107
+ },
108
+ shape: [
109
+ 'scalar',
110
+ 'scalar',
111
+ 'scalar'
112
+ ]
113
+ });
114
+ const CALL_CONTEXT = STRUCT([
115
+ {
116
+ name: 'msgSender',
117
+ type: AZTEC_ADDRESS
118
+ },
119
+ {
120
+ name: 'contractAddress',
121
+ type: AZTEC_ADDRESS
122
+ },
123
+ {
124
+ name: 'functionSelector',
125
+ type: FUNCTION_SELECTOR
126
+ },
127
+ {
128
+ name: 'isStaticCall',
129
+ type: BOOL
130
+ }
131
+ ]);
132
+ const TX_CONTEXT = STRUCT([
133
+ {
134
+ name: 'chainId',
135
+ type: FIELD
136
+ },
137
+ {
138
+ name: 'version',
139
+ type: FIELD
140
+ },
141
+ {
142
+ name: 'gasSettings',
143
+ type: GAS_SETTINGS
144
+ }
145
+ ]);
146
+ const PRIVATE_CONTEXT_INPUTS = STRUCT([
147
+ {
148
+ name: 'callContext',
149
+ type: CALL_CONTEXT
150
+ },
151
+ {
152
+ name: 'anchorBlockHeader',
153
+ type: BLOCK_HEADER
154
+ },
155
+ {
156
+ name: 'txContext',
157
+ type: TX_CONTEXT
158
+ },
159
+ {
160
+ name: 'startSideEffectCounter',
161
+ type: U32
162
+ },
163
+ {
164
+ name: 'txRequestSalt',
165
+ type: FIELD
166
+ }
167
+ ]);
168
+ const COMPLETE_ADDRESS = STRUCT([
169
+ {
170
+ name: 'address',
171
+ type: AZTEC_ADDRESS
172
+ },
173
+ {
174
+ name: 'publicKeys',
175
+ type: PUBLIC_KEYS
176
+ }
177
+ ]);
178
+ const TXE_TX_EFFECTS = STRUCT([
179
+ {
180
+ name: 'txHash',
181
+ type: TX_HASH
182
+ },
183
+ {
184
+ name: 'noteHashes',
185
+ type: FIXED_BOUNDED_VEC(FIELD, MAX_NOTE_HASHES_PER_TX)
186
+ },
187
+ {
188
+ name: 'nullifiers',
189
+ type: FIXED_BOUNDED_VEC(FIELD, MAX_NULLIFIERS_PER_TX)
190
+ },
191
+ {
192
+ name: 'privateLogs',
193
+ type: FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD, PRIVATE_LOG_SIZE_IN_FIELDS), MAX_PRIVATE_LOGS_PER_TX)
194
+ }
195
+ ]);
196
+ const TXE_OFFCHAIN_EFFECTS = FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD, MAX_OFFCHAIN_EFFECT_LEN), MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY);
197
+ const TXE_CALL_CONTEXT = STRUCT([
198
+ {
199
+ name: 'txHash',
200
+ type: OPTION(FIELD)
201
+ },
202
+ {
203
+ name: 'anchorBlockTimestamp',
204
+ type: U64
205
+ }
206
+ ]);
207
+ const CONTRACT_INSTANCE_MEMBER = FIXED_ARRAY(STRUCT([
208
+ {
209
+ name: 'exists',
210
+ type: BOOL
211
+ },
212
+ {
213
+ name: 'member',
214
+ type: FIELD
215
+ }
216
+ ]), 1);
217
+ export const EVENT_SELECTOR = SCALAR({
218
+ kind: 'event-selector',
219
+ serialization: {
220
+ fn: (v)=>[
221
+ v.toField()
222
+ ]
223
+ },
224
+ deserialization: {
225
+ fn: ([reader])=>EventSelector.fromField(reader.readField())
226
+ }
227
+ });
228
+ const TXE_PRIVATE_EVENTS = FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD, MAX_PRIVATE_EVENT_LEN), MAX_PRIVATE_EVENTS_PER_TXE_QUERY);
229
+ export const TXE_ORACLE_REGISTRY = {
230
+ ...ORACLE_REGISTRY,
231
+ aztec_txe_assertCompatibleOracleVersion: makeEntry({
232
+ params: [
233
+ {
234
+ name: 'major',
235
+ type: U32
236
+ },
237
+ {
238
+ name: 'minor',
239
+ type: U32
240
+ }
241
+ ]
242
+ }),
243
+ aztec_txe_setTopLevelTXEContext: makeEntry(),
244
+ aztec_txe_setPrivateTXEContext: makeEntry({
245
+ params: [
246
+ {
247
+ name: 'contractAddress',
248
+ type: OPTION(AZTEC_ADDRESS)
249
+ },
250
+ {
251
+ name: 'anchorBlockNumber',
252
+ type: OPTION(BLOCK_NUMBER)
253
+ },
254
+ {
255
+ name: 'gasSettings',
256
+ type: GAS_SETTINGS
257
+ }
258
+ ],
259
+ returnType: PRIVATE_CONTEXT_INPUTS
260
+ }),
261
+ aztec_txe_setPublicTXEContext: makeEntry({
262
+ params: [
263
+ {
264
+ name: 'contractAddress',
265
+ type: OPTION(AZTEC_ADDRESS)
266
+ }
267
+ ]
268
+ }),
269
+ aztec_txe_setUtilityTXEContext: makeEntry({
270
+ params: [
271
+ {
272
+ name: 'contractAddress',
273
+ type: OPTION(AZTEC_ADDRESS)
274
+ }
275
+ ]
276
+ }),
277
+ aztec_txe_getDefaultAddress: makeEntry({
278
+ returnType: AZTEC_ADDRESS
279
+ }),
280
+ aztec_txe_getNextBlockNumber: makeEntry({
281
+ returnType: BLOCK_NUMBER
282
+ }),
283
+ aztec_txe_getNextBlockTimestamp: makeEntry({
284
+ returnType: U64
285
+ }),
286
+ aztec_txe_advanceBlocksBy: makeEntry({
287
+ params: [
288
+ {
289
+ name: 'blocks',
290
+ type: U32
291
+ }
292
+ ]
293
+ }),
294
+ aztec_txe_advanceTimestampBy: makeEntry({
295
+ params: [
296
+ {
297
+ name: 'duration',
298
+ type: U64
299
+ }
300
+ ]
301
+ }),
302
+ aztec_txe_deploy: makeEntry({
303
+ params: [
304
+ {
305
+ name: 'contractPath',
306
+ type: STR
307
+ },
308
+ {
309
+ name: 'initializer',
310
+ type: STR
311
+ },
312
+ {
313
+ name: 'argsLength',
314
+ type: U32
315
+ },
316
+ {
317
+ name: 'args',
318
+ type: ARRAY(FIELD)
319
+ },
320
+ {
321
+ name: 'secret',
322
+ type: FIELD
323
+ },
324
+ {
325
+ name: 'salt',
326
+ type: FIELD
327
+ },
328
+ {
329
+ name: 'deployer',
330
+ type: AZTEC_ADDRESS
331
+ }
332
+ ],
333
+ returnType: ARRAY(FIELD)
334
+ }),
335
+ aztec_txe_createAccount: makeEntry({
336
+ params: [
337
+ {
338
+ name: 'secret',
339
+ type: FIELD
340
+ },
341
+ {
342
+ name: 'partialAddress',
343
+ type: FIELD
344
+ }
345
+ ],
346
+ returnType: COMPLETE_ADDRESS
347
+ }),
348
+ aztec_txe_addAccount: makeEntry({
349
+ params: [
350
+ {
351
+ name: 'secret',
352
+ type: FIELD
353
+ }
354
+ ],
355
+ returnType: COMPLETE_ADDRESS
356
+ }),
357
+ aztec_txe_addAuthWitness: makeEntry({
358
+ params: [
359
+ {
360
+ name: 'address',
361
+ type: AZTEC_ADDRESS
362
+ },
363
+ {
364
+ name: 'messageHash',
365
+ type: FIELD
366
+ }
367
+ ]
368
+ }),
369
+ aztec_txe_sendL1ToL2Message: makeEntry({
370
+ params: [
371
+ {
372
+ name: 'content',
373
+ type: FIELD
374
+ },
375
+ {
376
+ name: 'secretHash',
377
+ type: FIELD
378
+ },
379
+ {
380
+ name: 'sender',
381
+ type: ETH_ADDRESS
382
+ },
383
+ {
384
+ name: 'recipient',
385
+ type: AZTEC_ADDRESS
386
+ }
387
+ ],
388
+ returnType: FIELD
389
+ }),
390
+ aztec_txe_setTaggingSecretStrategies: makeEntry({
391
+ params: [
392
+ {
393
+ name: 'unconstrainedStrategy',
394
+ type: OPTION(TAGGING_SECRET_STRATEGY)
395
+ },
396
+ {
397
+ name: 'constrainedStrategy',
398
+ type: OPTION(TAGGING_SECRET_STRATEGY)
399
+ }
400
+ ]
401
+ }),
402
+ aztec_txe_setAuthorizeAllUtilityCallTargets: makeEntry({
403
+ params: [
404
+ {
405
+ name: 'authorizeAll',
406
+ type: BOOL
407
+ }
408
+ ]
409
+ }),
410
+ aztec_txe_getLastBlockTimestamp: makeEntry({
411
+ returnType: U64
412
+ }),
413
+ aztec_txe_getLastTxEffects: makeEntry({
414
+ returnType: TXE_TX_EFFECTS
415
+ }),
416
+ aztec_txe_getLastCallOffchainEffects: makeEntry({
417
+ returnType: TXE_OFFCHAIN_EFFECTS
418
+ }),
419
+ aztec_txe_getLastCallContext: makeEntry({
420
+ returnType: TXE_CALL_CONTEXT
421
+ }),
422
+ aztec_txe_getPrivateEvents: makeEntry({
423
+ params: [
424
+ {
425
+ name: 'selector',
426
+ type: EVENT_SELECTOR
427
+ },
428
+ {
429
+ name: 'contractAddress',
430
+ type: AZTEC_ADDRESS
431
+ },
432
+ {
433
+ name: 'scope',
434
+ type: AZTEC_ADDRESS
435
+ }
436
+ ],
437
+ returnType: TXE_PRIVATE_EVENTS
438
+ }),
439
+ aztec_txe_privateCallNewFlow: makeEntry({
440
+ params: [
441
+ {
442
+ name: 'from',
443
+ type: OPTION(AZTEC_ADDRESS)
444
+ },
445
+ {
446
+ name: 'targetContractAddress',
447
+ type: AZTEC_ADDRESS
448
+ },
449
+ {
450
+ name: 'functionSelector',
451
+ type: FUNCTION_SELECTOR
452
+ },
453
+ {
454
+ name: 'args',
455
+ type: ARRAY(FIELD)
456
+ },
457
+ {
458
+ name: 'argsHash',
459
+ type: FIELD
460
+ },
461
+ {
462
+ name: 'isStaticCall',
463
+ type: BOOL
464
+ },
465
+ {
466
+ name: 'additionalScopes',
467
+ type: ARRAY(AZTEC_ADDRESS)
468
+ },
469
+ {
470
+ name: 'authorizedUtilityCallTargets',
471
+ type: ARRAY(AZTEC_ADDRESS)
472
+ },
473
+ {
474
+ name: 'gasSettings',
475
+ type: GAS_SETTINGS
476
+ }
477
+ ],
478
+ returnType: ARRAY(FIELD)
479
+ }),
480
+ aztec_txe_executeUtilityFunction: makeEntry({
481
+ params: [
482
+ {
483
+ name: 'from',
484
+ type: OPTION(AZTEC_ADDRESS)
485
+ },
486
+ {
487
+ name: 'targetContractAddress',
488
+ type: AZTEC_ADDRESS
489
+ },
490
+ {
491
+ name: 'functionSelector',
492
+ type: FUNCTION_SELECTOR
493
+ },
494
+ {
495
+ name: 'args',
496
+ type: ARRAY(FIELD)
497
+ },
498
+ {
499
+ name: 'authorizedUtilityCallTargets',
500
+ type: ARRAY(AZTEC_ADDRESS)
501
+ }
502
+ ],
503
+ returnType: ARRAY(FIELD)
504
+ }),
505
+ aztec_txe_publicCallNewFlow: makeEntry({
506
+ params: [
507
+ {
508
+ name: 'from',
509
+ type: OPTION(AZTEC_ADDRESS)
510
+ },
511
+ {
512
+ name: 'address',
513
+ type: AZTEC_ADDRESS
514
+ },
515
+ {
516
+ name: 'calldata',
517
+ type: ARRAY(FIELD)
518
+ },
519
+ {
520
+ name: 'isStaticCall',
521
+ type: BOOL
522
+ },
523
+ {
524
+ name: 'gasSettings',
525
+ type: GAS_SETTINGS
526
+ }
527
+ ],
528
+ returnType: ARRAY(FIELD)
529
+ }),
530
+ aztec_avm_address: makeEntry({
531
+ returnType: AZTEC_ADDRESS
532
+ }),
533
+ aztec_avm_sender: makeEntry({
534
+ returnType: AZTEC_ADDRESS
535
+ }),
536
+ aztec_avm_blockNumber: makeEntry({
537
+ returnType: BLOCK_NUMBER
538
+ }),
539
+ aztec_avm_timestamp: makeEntry({
540
+ returnType: U64
541
+ }),
542
+ aztec_avm_isStaticCall: makeEntry({
543
+ returnType: BOOL
544
+ }),
545
+ aztec_avm_chainId: makeEntry({
546
+ returnType: FIELD
547
+ }),
548
+ aztec_avm_version: makeEntry({
549
+ returnType: FIELD
550
+ }),
551
+ aztec_avm_emitNullifier: makeEntry({
552
+ params: [
553
+ {
554
+ name: 'nullifier',
555
+ type: FIELD
556
+ }
557
+ ]
558
+ }),
559
+ aztec_avm_emitNoteHash: makeEntry({
560
+ params: [
561
+ {
562
+ name: 'noteHash',
563
+ type: FIELD
564
+ }
565
+ ]
566
+ }),
567
+ aztec_avm_nullifierExists: makeEntry({
568
+ params: [
569
+ {
570
+ name: 'siloedNullifier',
571
+ type: FIELD
572
+ }
573
+ ],
574
+ returnType: BOOL
575
+ }),
576
+ aztec_avm_storageRead: makeEntry({
577
+ params: [
578
+ {
579
+ name: 'slot',
580
+ type: FIELD
581
+ },
582
+ {
583
+ name: 'contractAddress',
584
+ type: AZTEC_ADDRESS
585
+ }
586
+ ],
587
+ returnType: FIELD
588
+ }),
589
+ aztec_avm_storageWrite: makeEntry({
590
+ params: [
591
+ {
592
+ name: 'slot',
593
+ type: FIELD
594
+ },
595
+ {
596
+ name: 'value',
597
+ type: FIELD
598
+ }
599
+ ]
600
+ }),
601
+ aztec_avm_emitPublicLog: makeEntry({
602
+ params: [
603
+ {
604
+ name: 'message',
605
+ type: VECTOR(FIELD)
606
+ }
607
+ ]
608
+ }),
609
+ aztec_avm_returndataSize: makeEntry({
610
+ returnType: U32
611
+ }),
612
+ aztec_avm_returndataCopy: makeEntry({
613
+ params: [
614
+ {
615
+ name: 'rdOffset',
616
+ type: U32
617
+ },
618
+ {
619
+ name: 'copySize',
620
+ type: U32
621
+ }
622
+ ],
623
+ returnType: VECTOR(FIELD)
624
+ }),
625
+ aztec_avm_call: makeEntry({
626
+ params: [
627
+ {
628
+ name: 'l2Gas',
629
+ type: U32
630
+ },
631
+ {
632
+ name: 'daGas',
633
+ type: U32
634
+ },
635
+ {
636
+ name: 'address',
637
+ type: AZTEC_ADDRESS
638
+ },
639
+ {
640
+ name: 'argsLength',
641
+ type: U32
642
+ },
643
+ {
644
+ name: 'args',
645
+ type: ARRAY(FIELD)
646
+ }
647
+ ]
648
+ }),
649
+ aztec_avm_staticCall: makeEntry({
650
+ params: [
651
+ {
652
+ name: 'l2Gas',
653
+ type: U32
654
+ },
655
+ {
656
+ name: 'daGas',
657
+ type: U32
658
+ },
659
+ {
660
+ name: 'address',
661
+ type: AZTEC_ADDRESS
662
+ },
663
+ {
664
+ name: 'argsLength',
665
+ type: U32
666
+ },
667
+ {
668
+ name: 'args',
669
+ type: ARRAY(FIELD)
670
+ }
671
+ ]
672
+ }),
673
+ aztec_avm_successCopy: makeEntry({
674
+ returnType: BOOL
675
+ }),
676
+ aztec_avm_getContractInstanceDeployer: makeEntry({
677
+ params: [
678
+ {
679
+ name: 'address',
680
+ type: AZTEC_ADDRESS
681
+ }
682
+ ],
683
+ returnType: CONTRACT_INSTANCE_MEMBER
684
+ }),
685
+ aztec_avm_getContractInstanceClassId: makeEntry({
686
+ params: [
687
+ {
688
+ name: 'address',
689
+ type: AZTEC_ADDRESS
690
+ }
691
+ ],
692
+ returnType: CONTRACT_INSTANCE_MEMBER
693
+ }),
694
+ aztec_avm_getContractInstanceInitializationHash: makeEntry({
695
+ params: [
696
+ {
697
+ name: 'address',
698
+ type: AZTEC_ADDRESS
699
+ }
700
+ ],
701
+ returnType: CONTRACT_INSTANCE_MEMBER
702
+ }),
703
+ aztec_avm_getContractInstanceImmutablesHash: makeEntry({
704
+ params: [
705
+ {
706
+ name: 'address',
707
+ type: AZTEC_ADDRESS
708
+ }
709
+ ],
710
+ returnType: CONTRACT_INSTANCE_MEMBER
711
+ })
712
+ };
713
+ export function toInputSlots(inputs) {
714
+ // TXE foreign calls use bare hex strings, but Fr.fromString requires a 0x prefix to parse as hex.
715
+ return inputs.map((v)=>Array.isArray(v) ? v.map(withHexPrefix) : [
716
+ withHexPrefix(v)
717
+ ]);
718
+ }
719
+ /**
720
+ * Deserializes oracle inputs, calls the handler with typed params, serializes the result, and wraps
721
+ * it in a `ForeignCallResult`. Normalizes `ForeignCallArgs` (which may contain bare strings) into
722
+ * `InputSlot[]` (always arrays) before deserialization.
723
+ */ export async function callTxeHandler({ oracle, inputs, handler }) {
724
+ const entry = TXE_ORACLE_REGISTRY[oracle];
725
+ const named = entry.deserializeParams(toInputSlots(inputs));
726
+ const positional = named.map((p)=>p.value);
727
+ const result = await handler(positional);
728
+ return outputSlotsToForeignCallResult(entry.serializeReturn(result));
729
+ }
730
+ /**
731
+ * Dispatches an oracle that has been retired into the PXE legacy registry. TXE has no explicit handler method for such
732
+ * names; this runs them through the same `buildACIRCallback` legacy path that contract execution already uses, so
733
+ * TXE's top-level oracle path and its in-contract path treat the legacy registry identically.
734
+ */ const legacyCallbacksByHandler = new WeakMap();
735
+ export async function callTxeLegacyHandler(oracle, inputs, oracleHandler) {
736
+ // `buildACIRCallback` materializes the whole real+legacy closure set, so memoize it per handler rather than
737
+ // rebuilding on every call (TXE routes one legacy oracle through here on each top-level discovery).
738
+ let callback = legacyCallbacksByHandler.get(oracleHandler);
739
+ if (!callback) {
740
+ callback = buildACIRCallback(oracleHandler);
741
+ legacyCallbacksByHandler.set(oracleHandler, callback);
742
+ }
743
+ const outputSlots = await callback[oracle](...toInputSlots(inputs));
744
+ return outputSlotsToForeignCallResult(outputSlots);
745
+ }
746
+ /**
747
+ * Strips the `0x` prefix from each serialized output slot (TXE foreign calls use bare hex strings) and wraps them in a
748
+ * `ForeignCallResult`.
749
+ */ function outputSlotsToForeignCallResult(outputSlots) {
750
+ return {
751
+ values: outputSlots.map((slot)=>Array.isArray(slot) ? slot.map(withoutHexPrefix) : withoutHexPrefix(slot))
752
+ };
753
+ }