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

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 (174) hide show
  1. package/dest/AuthRegistry-56AMRLSQ.js +3 -0
  2. package/dest/AuthRegistry-56AMRLSQ.js.map +7 -0
  3. package/dest/ContractClassRegistry-N6NA3SFA.js +3 -0
  4. package/dest/ContractClassRegistry-N6NA3SFA.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-NADDSLGL.js +3 -0
  6. package/dest/ContractInstanceRegistry-NADDSLGL.js.map +7 -0
  7. package/dest/FeeJuice-QBH5JWJV.js +3 -0
  8. package/dest/FeeJuice-QBH5JWJV.js.map +7 -0
  9. package/dest/HandshakeRegistry-D2W3AOPD.js +3 -0
  10. package/dest/HandshakeRegistry-D2W3AOPD.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-MIDICLQB.js +3 -0
  12. package/dest/MultiCallEntrypoint-MIDICLQB.js.map +7 -0
  13. package/dest/SchnorrAccount-HNL7EN7Y.js +3 -0
  14. package/dest/SchnorrAccount-HNL7EN7Y.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-TFAFXZW6.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-TFAFXZW6.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-EKHK6CRD.js +268 -0
  28. package/dest/chunk-EKHK6CRD.js.map +7 -0
  29. package/dest/chunk-RELAEYUE.js +304 -0
  30. package/dest/chunk-RELAEYUE.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 +39965 -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 +69 -30
  45. package/dest/oracle/interfaces.d.ts.map +1 -1
  46. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  47. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  48. package/dest/oracle/tagging_secret_strategy.js +12 -0
  49. package/dest/oracle/test-resolver/default_fixtures.d.ts +9 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +207 -0
  52. package/dest/oracle/test-resolver/index.d.ts +9 -0
  53. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  54. package/dest/oracle/test-resolver/index.js +32 -0
  55. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  56. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  57. package/dest/oracle/test-resolver/resolver.js +181 -0
  58. package/dest/oracle/txe_oracle_public_context.d.ts +38 -14
  59. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  60. package/dest/oracle/txe_oracle_public_context.js +61 -13
  61. package/dest/oracle/txe_oracle_registry.d.ts +172 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +757 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +69 -29
  65. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  66. package/dest/oracle/txe_oracle_top_level_context.js +343 -102
  67. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  68. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_version.js +14 -0
  70. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  71. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  72. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  73. package/dest/rpc_server.d.ts +14 -0
  74. package/dest/rpc_server.d.ts.map +1 -0
  75. package/dest/rpc_server.js +78 -0
  76. package/dest/rpc_translator.d.ts +115 -228
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +901 -612
  79. package/dest/server.bundle.js +3 -0
  80. package/dest/server.bundle.js.map +7 -0
  81. package/dest/state_machine/archiver.d.ts +6 -5
  82. package/dest/state_machine/archiver.d.ts.map +1 -1
  83. package/dest/state_machine/archiver.js +30 -20
  84. package/dest/state_machine/dummy_p2p_client.d.ts +29 -16
  85. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  86. package/dest/state_machine/dummy_p2p_client.js +53 -20
  87. package/dest/state_machine/global_variable_builder.d.ts +10 -6
  88. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  89. package/dest/state_machine/global_variable_builder.js +8 -5
  90. package/dest/state_machine/index.d.ts +13 -7
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +60 -15
  93. package/dest/state_machine/mock_epoch_cache.d.ts +18 -3
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +33 -2
  96. package/dest/state_machine/synchronizer.d.ts +9 -6
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +10 -6
  99. package/dest/txe_session.d.ts +90 -16
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +369 -56
  102. package/dest/utils/block_creation.d.ts +2 -2
  103. package/dest/utils/block_creation.d.ts.map +1 -1
  104. package/dest/utils/block_creation.js +5 -3
  105. package/dest/utils/encoding.d.ts +192 -0
  106. package/dest/utils/encoding.d.ts.map +1 -0
  107. package/dest/{util → utils}/encoding.js +7 -2
  108. package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
  109. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  110. package/dest/utils/tx_effect_creation.d.ts +1 -1
  111. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  112. package/dest/utils/tx_effect_creation.js +0 -1
  113. package/dest/{util → utils}/txe_account_store.d.ts +1 -1
  114. package/dest/utils/txe_account_store.d.ts.map +1 -0
  115. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  116. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  117. package/dest/utils/txe_artifact_resolver.js +161 -0
  118. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  119. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  120. package/dest/utils/txe_public_contract_data_source.js +51 -0
  121. package/dest/worker.bundle.js +3 -0
  122. package/dest/worker.bundle.js.map +7 -0
  123. package/dest/worker.d.ts +2 -0
  124. package/dest/worker.d.ts.map +1 -0
  125. package/dest/worker.js +92 -0
  126. package/package.json +38 -21
  127. package/src/bin/check_txe_oracle_version.ts +70 -0
  128. package/src/bin/index.ts +11 -2
  129. package/src/bin/oracle_test_server.ts +51 -0
  130. package/src/constants.ts +11 -1
  131. package/src/dispatcher_pool.ts +317 -0
  132. package/src/index.ts +99 -190
  133. package/src/msgpackr_fr_extension.ts +23 -0
  134. package/src/oracle/interfaces.ts +75 -35
  135. package/src/oracle/tagging_secret_strategy.ts +25 -0
  136. package/src/oracle/test-resolver/default_fixtures.ts +282 -0
  137. package/src/oracle/test-resolver/index.ts +44 -0
  138. package/src/oracle/test-resolver/resolver.ts +245 -0
  139. package/src/oracle/txe_oracle_public_context.ts +74 -12
  140. package/src/oracle/txe_oracle_registry.ts +543 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +443 -161
  142. package/src/oracle/txe_oracle_version.ts +17 -0
  143. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  144. package/src/rpc_server.ts +87 -0
  145. package/src/rpc_translator.ts +1116 -995
  146. package/src/state_machine/archiver.ts +43 -20
  147. package/src/state_machine/dummy_p2p_client.ts +83 -32
  148. package/src/state_machine/global_variable_builder.ts +12 -11
  149. package/src/state_machine/index.ts +84 -33
  150. package/src/state_machine/mock_epoch_cache.ts +43 -3
  151. package/src/state_machine/synchronizer.ts +13 -7
  152. package/src/txe_session.ts +606 -115
  153. package/src/utils/block_creation.ts +5 -2
  154. package/src/{util → utils}/encoding.ts +8 -2
  155. package/src/utils/tx_effect_creation.ts +0 -2
  156. package/src/utils/txe_artifact_resolver.ts +217 -0
  157. package/src/utils/txe_public_contract_data_source.ts +60 -0
  158. package/src/worker.ts +98 -0
  159. package/dest/util/encoding.d.ts +0 -720
  160. package/dest/util/encoding.d.ts.map +0 -1
  161. package/dest/util/expected_failure_error.d.ts.map +0 -1
  162. package/dest/util/txe_account_store.d.ts.map +0 -1
  163. package/dest/util/txe_contract_store.d.ts +0 -12
  164. package/dest/util/txe_contract_store.d.ts.map +0 -1
  165. package/dest/util/txe_contract_store.js +0 -22
  166. package/dest/util/txe_public_contract_data_source.d.ts +0 -21
  167. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  168. package/dest/util/txe_public_contract_data_source.js +0 -67
  169. package/src/util/txe_contract_store.ts +0 -36
  170. package/src/util/txe_public_contract_data_source.ts +0 -86
  171. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  172. /package/dest/{util → utils}/txe_account_store.js +0 -0
  173. /package/src/{util → utils}/expected_failure_error.ts +0 -0
  174. /package/src/{util → utils}/txe_account_store.ts +0 -0
@@ -0,0 +1,757 @@
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_strategies`
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_setTaggingSecretStrategies: makeEntry({
395
+ params: [
396
+ {
397
+ name: 'unconstrainedStrategy',
398
+ type: OPTION(TAGGING_SECRET_STRATEGY)
399
+ },
400
+ {
401
+ name: 'constrainedStrategy',
402
+ type: OPTION(TAGGING_SECRET_STRATEGY)
403
+ }
404
+ ]
405
+ }),
406
+ aztec_txe_setAuthorizeAllUtilityCallTargets: makeEntry({
407
+ params: [
408
+ {
409
+ name: 'authorizeAll',
410
+ type: BOOL
411
+ }
412
+ ]
413
+ }),
414
+ aztec_txe_getLastBlockTimestamp: makeEntry({
415
+ returnType: BIGINT
416
+ }),
417
+ aztec_txe_getLastTxEffects: makeEntry({
418
+ returnType: TXE_TX_EFFECTS
419
+ }),
420
+ aztec_txe_getLastCallOffchainEffects: makeEntry({
421
+ returnType: TXE_OFFCHAIN_EFFECTS
422
+ }),
423
+ aztec_txe_getLastCallContext: makeEntry({
424
+ returnType: TXE_CALL_CONTEXT
425
+ }),
426
+ aztec_txe_getPrivateEvents: makeEntry({
427
+ params: [
428
+ {
429
+ name: 'selector',
430
+ type: EVENT_SELECTOR
431
+ },
432
+ {
433
+ name: 'contractAddress',
434
+ type: AZTEC_ADDRESS
435
+ },
436
+ {
437
+ name: 'scope',
438
+ type: AZTEC_ADDRESS
439
+ }
440
+ ],
441
+ returnType: TXE_PRIVATE_EVENTS
442
+ }),
443
+ aztec_txe_privateCallNewFlow: makeEntry({
444
+ params: [
445
+ {
446
+ name: 'from',
447
+ type: OPTION(AZTEC_ADDRESS)
448
+ },
449
+ {
450
+ name: 'targetContractAddress',
451
+ type: AZTEC_ADDRESS
452
+ },
453
+ {
454
+ name: 'functionSelector',
455
+ type: FUNCTION_SELECTOR
456
+ },
457
+ {
458
+ name: 'args',
459
+ type: ARRAY(FIELD)
460
+ },
461
+ {
462
+ name: 'argsHash',
463
+ type: FIELD
464
+ },
465
+ {
466
+ name: 'isStaticCall',
467
+ type: BOOL
468
+ },
469
+ {
470
+ name: 'additionalScopes',
471
+ type: ARRAY(AZTEC_ADDRESS)
472
+ },
473
+ {
474
+ name: 'authorizedUtilityCallTargets',
475
+ type: ARRAY(AZTEC_ADDRESS)
476
+ },
477
+ {
478
+ name: 'gasSettings',
479
+ type: GAS_SETTINGS
480
+ }
481
+ ],
482
+ returnType: ARRAY(FIELD)
483
+ }),
484
+ aztec_txe_executeUtilityFunction: makeEntry({
485
+ params: [
486
+ {
487
+ name: 'from',
488
+ type: OPTION(AZTEC_ADDRESS)
489
+ },
490
+ {
491
+ name: 'targetContractAddress',
492
+ type: AZTEC_ADDRESS
493
+ },
494
+ {
495
+ name: 'functionSelector',
496
+ type: FUNCTION_SELECTOR
497
+ },
498
+ {
499
+ name: 'args',
500
+ type: ARRAY(FIELD)
501
+ },
502
+ {
503
+ name: 'authorizedUtilityCallTargets',
504
+ type: ARRAY(AZTEC_ADDRESS)
505
+ }
506
+ ],
507
+ returnType: ARRAY(FIELD)
508
+ }),
509
+ aztec_txe_publicCallNewFlow: makeEntry({
510
+ params: [
511
+ {
512
+ name: 'from',
513
+ type: OPTION(AZTEC_ADDRESS)
514
+ },
515
+ {
516
+ name: 'address',
517
+ type: AZTEC_ADDRESS
518
+ },
519
+ {
520
+ name: 'calldata',
521
+ type: ARRAY(FIELD)
522
+ },
523
+ {
524
+ name: 'isStaticCall',
525
+ type: BOOL
526
+ },
527
+ {
528
+ name: 'gasSettings',
529
+ type: GAS_SETTINGS
530
+ }
531
+ ],
532
+ returnType: ARRAY(FIELD)
533
+ }),
534
+ aztec_avm_address: makeEntry({
535
+ returnType: AZTEC_ADDRESS
536
+ }),
537
+ aztec_avm_sender: makeEntry({
538
+ returnType: AZTEC_ADDRESS
539
+ }),
540
+ aztec_avm_blockNumber: makeEntry({
541
+ returnType: BLOCK_NUMBER
542
+ }),
543
+ aztec_avm_timestamp: makeEntry({
544
+ returnType: BIGINT
545
+ }),
546
+ aztec_avm_isStaticCall: makeEntry({
547
+ returnType: BOOL
548
+ }),
549
+ aztec_avm_chainId: makeEntry({
550
+ returnType: FIELD
551
+ }),
552
+ aztec_avm_version: makeEntry({
553
+ returnType: FIELD
554
+ }),
555
+ aztec_avm_emitNullifier: makeEntry({
556
+ params: [
557
+ {
558
+ name: 'nullifier',
559
+ type: FIELD
560
+ }
561
+ ]
562
+ }),
563
+ aztec_avm_emitNoteHash: makeEntry({
564
+ params: [
565
+ {
566
+ name: 'noteHash',
567
+ type: FIELD
568
+ }
569
+ ]
570
+ }),
571
+ aztec_avm_nullifierExists: makeEntry({
572
+ params: [
573
+ {
574
+ name: 'siloedNullifier',
575
+ type: FIELD
576
+ }
577
+ ],
578
+ returnType: BOOL
579
+ }),
580
+ aztec_avm_storageRead: makeEntry({
581
+ params: [
582
+ {
583
+ name: 'slot',
584
+ type: FIELD
585
+ },
586
+ {
587
+ name: 'contractAddress',
588
+ type: AZTEC_ADDRESS
589
+ }
590
+ ],
591
+ returnType: FIELD
592
+ }),
593
+ aztec_avm_storageWrite: makeEntry({
594
+ params: [
595
+ {
596
+ name: 'slot',
597
+ type: FIELD
598
+ },
599
+ {
600
+ name: 'value',
601
+ type: FIELD
602
+ }
603
+ ]
604
+ }),
605
+ aztec_avm_emitPublicLog: makeEntry({
606
+ params: [
607
+ {
608
+ name: 'message',
609
+ type: ARRAY(FIELD)
610
+ }
611
+ ]
612
+ }),
613
+ aztec_avm_returndataSize: makeEntry({
614
+ returnType: U32
615
+ }),
616
+ aztec_avm_returndataCopy: makeEntry({
617
+ params: [
618
+ {
619
+ name: 'rdOffset',
620
+ type: U32
621
+ },
622
+ {
623
+ name: 'copySize',
624
+ type: U32
625
+ }
626
+ ],
627
+ returnType: ARRAY(FIELD)
628
+ }),
629
+ aztec_avm_call: makeEntry({
630
+ params: [
631
+ {
632
+ name: 'l2Gas',
633
+ type: U32
634
+ },
635
+ {
636
+ name: 'daGas',
637
+ type: U32
638
+ },
639
+ {
640
+ name: 'address',
641
+ type: AZTEC_ADDRESS
642
+ },
643
+ {
644
+ name: 'argsLength',
645
+ type: U32
646
+ },
647
+ {
648
+ name: 'args',
649
+ type: ARRAY(FIELD)
650
+ }
651
+ ]
652
+ }),
653
+ aztec_avm_staticCall: makeEntry({
654
+ params: [
655
+ {
656
+ name: 'l2Gas',
657
+ type: U32
658
+ },
659
+ {
660
+ name: 'daGas',
661
+ type: U32
662
+ },
663
+ {
664
+ name: 'address',
665
+ type: AZTEC_ADDRESS
666
+ },
667
+ {
668
+ name: 'argsLength',
669
+ type: U32
670
+ },
671
+ {
672
+ name: 'args',
673
+ type: ARRAY(FIELD)
674
+ }
675
+ ]
676
+ }),
677
+ aztec_avm_successCopy: makeEntry({
678
+ returnType: BOOL
679
+ }),
680
+ aztec_avm_getContractInstanceDeployer: makeEntry({
681
+ params: [
682
+ {
683
+ name: 'address',
684
+ type: AZTEC_ADDRESS
685
+ }
686
+ ],
687
+ returnType: CONTRACT_INSTANCE_MEMBER
688
+ }),
689
+ aztec_avm_getContractInstanceClassId: makeEntry({
690
+ params: [
691
+ {
692
+ name: 'address',
693
+ type: AZTEC_ADDRESS
694
+ }
695
+ ],
696
+ returnType: CONTRACT_INSTANCE_MEMBER
697
+ }),
698
+ aztec_avm_getContractInstanceInitializationHash: makeEntry({
699
+ params: [
700
+ {
701
+ name: 'address',
702
+ type: AZTEC_ADDRESS
703
+ }
704
+ ],
705
+ returnType: CONTRACT_INSTANCE_MEMBER
706
+ }),
707
+ aztec_avm_getContractInstanceImmutablesHash: makeEntry({
708
+ params: [
709
+ {
710
+ name: 'address',
711
+ type: AZTEC_ADDRESS
712
+ }
713
+ ],
714
+ returnType: CONTRACT_INSTANCE_MEMBER
715
+ })
716
+ };
717
+ export function toInputSlots(inputs) {
718
+ // TXE foreign calls use bare hex strings, but Fr.fromString requires a 0x prefix to parse as hex.
719
+ return inputs.map((v)=>Array.isArray(v) ? v.map(withHexPrefix) : [
720
+ withHexPrefix(v)
721
+ ]);
722
+ }
723
+ /**
724
+ * Deserializes oracle inputs, calls the handler with typed params, serializes the result, and wraps
725
+ * it in a `ForeignCallResult`. Normalizes `ForeignCallArgs` (which may contain bare strings) into
726
+ * `InputSlot[]` (always arrays) before deserialization.
727
+ */ export async function callTxeHandler({ oracle, inputs, handler }) {
728
+ const entry = TXE_ORACLE_REGISTRY[oracle];
729
+ const named = entry.deserializeParams(toInputSlots(inputs));
730
+ const positional = named.map((p)=>p.value);
731
+ const result = await handler(positional);
732
+ return outputSlotsToForeignCallResult(entry.serializeReturn(result));
733
+ }
734
+ /**
735
+ * Dispatches an oracle that has been retired into the PXE legacy registry. TXE has no explicit handler method for such
736
+ * names; this runs them through the same `buildACIRCallback` legacy path that contract execution already uses, so
737
+ * TXE's top-level oracle path and its in-contract path treat the legacy registry identically.
738
+ */ const legacyCallbacksByHandler = new WeakMap();
739
+ export async function callTxeLegacyHandler(oracle, inputs, oracleHandler) {
740
+ // `buildACIRCallback` materializes the whole real+legacy closure set, so memoize it per handler rather than
741
+ // rebuilding on every call (TXE routes one legacy oracle through here on each top-level discovery).
742
+ let callback = legacyCallbacksByHandler.get(oracleHandler);
743
+ if (!callback) {
744
+ callback = buildACIRCallback(oracleHandler);
745
+ legacyCallbacksByHandler.set(oracleHandler, callback);
746
+ }
747
+ const outputSlots = await callback[oracle](...toInputSlots(inputs));
748
+ return outputSlotsToForeignCallResult(outputSlots);
749
+ }
750
+ /**
751
+ * Strips the `0x` prefix from each serialized output slot (TXE foreign calls use bare hex strings) and wraps them in a
752
+ * `ForeignCallResult`.
753
+ */ function outputSlotsToForeignCallResult(outputSlots) {
754
+ return {
755
+ values: outputSlots.map((slot)=>Array.isArray(slot) ? slot.map(withoutHexPrefix) : withoutHexPrefix(slot))
756
+ };
757
+ }