@aztec/txe 0.0.1-commit.3fd054f6 → 0.0.1-commit.431c48d

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