@aztec/txe 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49

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