@aztec/txe 5.0.0-private.20260319 → 5.0.0-rc.2

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