@aztec/txe 0.0.1-commit.2ed92850 → 0.0.1-commit.3100065

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-FSRZIMX6.js +3 -0
  2. package/dest/AuthRegistry-FSRZIMX6.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-KKUEU7XW.js +3 -0
  10. package/dest/HandshakeRegistry-KKUEU7XW.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-TGICA67H.js +3 -0
  12. package/dest/MultiCallEntrypoint-TGICA67H.js.map +7 -0
  13. package/dest/SchnorrAccount-J5T6OKR3.js +3 -0
  14. package/dest/SchnorrAccount-J5T6OKR3.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-OOES6Q4F.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-OOES6Q4F.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-PDOEF22H.js +304 -0
  28. package/dest/chunk-PDOEF22H.js.map +7 -0
  29. package/dest/chunk-YP4ODNMQ.js +268 -0
  30. package/dest/chunk-YP4ODNMQ.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 +39883 -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 +65 -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 +63 -16
  61. package/dest/oracle/txe_oracle_registry.d.ts +170 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +749 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +56 -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 +330 -103
  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 +113 -228
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +885 -613
  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 +89 -16
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +363 -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 +71 -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 +76 -16
  140. package/src/oracle/txe_oracle_registry.ts +539 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +440 -168
  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 +1098 -988
  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 +603 -128
  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,749 @@
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_getLastBlockTimestamp: makeEntry({
407
+ returnType: BIGINT
408
+ }),
409
+ aztec_txe_getLastTxEffects: makeEntry({
410
+ returnType: TXE_TX_EFFECTS
411
+ }),
412
+ aztec_txe_getLastCallOffchainEffects: makeEntry({
413
+ returnType: TXE_OFFCHAIN_EFFECTS
414
+ }),
415
+ aztec_txe_getLastCallContext: makeEntry({
416
+ returnType: TXE_CALL_CONTEXT
417
+ }),
418
+ aztec_txe_getPrivateEvents: makeEntry({
419
+ params: [
420
+ {
421
+ name: 'selector',
422
+ type: EVENT_SELECTOR
423
+ },
424
+ {
425
+ name: 'contractAddress',
426
+ type: AZTEC_ADDRESS
427
+ },
428
+ {
429
+ name: 'scope',
430
+ type: AZTEC_ADDRESS
431
+ }
432
+ ],
433
+ returnType: TXE_PRIVATE_EVENTS
434
+ }),
435
+ aztec_txe_privateCallNewFlow: makeEntry({
436
+ params: [
437
+ {
438
+ name: 'from',
439
+ type: OPTION(AZTEC_ADDRESS)
440
+ },
441
+ {
442
+ name: 'targetContractAddress',
443
+ type: AZTEC_ADDRESS
444
+ },
445
+ {
446
+ name: 'functionSelector',
447
+ type: FUNCTION_SELECTOR
448
+ },
449
+ {
450
+ name: 'args',
451
+ type: ARRAY(FIELD)
452
+ },
453
+ {
454
+ name: 'argsHash',
455
+ type: FIELD
456
+ },
457
+ {
458
+ name: 'isStaticCall',
459
+ type: BOOL
460
+ },
461
+ {
462
+ name: 'additionalScopes',
463
+ type: ARRAY(AZTEC_ADDRESS)
464
+ },
465
+ {
466
+ name: 'authorizedUtilityCallTargets',
467
+ type: ARRAY(AZTEC_ADDRESS)
468
+ },
469
+ {
470
+ name: 'gasSettings',
471
+ type: GAS_SETTINGS
472
+ }
473
+ ],
474
+ returnType: ARRAY(FIELD)
475
+ }),
476
+ aztec_txe_executeUtilityFunction: makeEntry({
477
+ params: [
478
+ {
479
+ name: 'from',
480
+ type: OPTION(AZTEC_ADDRESS)
481
+ },
482
+ {
483
+ name: 'targetContractAddress',
484
+ type: AZTEC_ADDRESS
485
+ },
486
+ {
487
+ name: 'functionSelector',
488
+ type: FUNCTION_SELECTOR
489
+ },
490
+ {
491
+ name: 'args',
492
+ type: ARRAY(FIELD)
493
+ },
494
+ {
495
+ name: 'authorizedUtilityCallTargets',
496
+ type: ARRAY(AZTEC_ADDRESS)
497
+ }
498
+ ],
499
+ returnType: ARRAY(FIELD)
500
+ }),
501
+ aztec_txe_publicCallNewFlow: makeEntry({
502
+ params: [
503
+ {
504
+ name: 'from',
505
+ type: OPTION(AZTEC_ADDRESS)
506
+ },
507
+ {
508
+ name: 'address',
509
+ type: AZTEC_ADDRESS
510
+ },
511
+ {
512
+ name: 'calldata',
513
+ type: ARRAY(FIELD)
514
+ },
515
+ {
516
+ name: 'isStaticCall',
517
+ type: BOOL
518
+ },
519
+ {
520
+ name: 'gasSettings',
521
+ type: GAS_SETTINGS
522
+ }
523
+ ],
524
+ returnType: ARRAY(FIELD)
525
+ }),
526
+ aztec_avm_address: makeEntry({
527
+ returnType: AZTEC_ADDRESS
528
+ }),
529
+ aztec_avm_sender: makeEntry({
530
+ returnType: AZTEC_ADDRESS
531
+ }),
532
+ aztec_avm_blockNumber: makeEntry({
533
+ returnType: BLOCK_NUMBER
534
+ }),
535
+ aztec_avm_timestamp: makeEntry({
536
+ returnType: BIGINT
537
+ }),
538
+ aztec_avm_isStaticCall: makeEntry({
539
+ returnType: BOOL
540
+ }),
541
+ aztec_avm_chainId: makeEntry({
542
+ returnType: FIELD
543
+ }),
544
+ aztec_avm_version: makeEntry({
545
+ returnType: FIELD
546
+ }),
547
+ aztec_avm_emitNullifier: makeEntry({
548
+ params: [
549
+ {
550
+ name: 'nullifier',
551
+ type: FIELD
552
+ }
553
+ ]
554
+ }),
555
+ aztec_avm_emitNoteHash: makeEntry({
556
+ params: [
557
+ {
558
+ name: 'noteHash',
559
+ type: FIELD
560
+ }
561
+ ]
562
+ }),
563
+ aztec_avm_nullifierExists: makeEntry({
564
+ params: [
565
+ {
566
+ name: 'siloedNullifier',
567
+ type: FIELD
568
+ }
569
+ ],
570
+ returnType: BOOL
571
+ }),
572
+ aztec_avm_storageRead: makeEntry({
573
+ params: [
574
+ {
575
+ name: 'slot',
576
+ type: FIELD
577
+ },
578
+ {
579
+ name: 'contractAddress',
580
+ type: AZTEC_ADDRESS
581
+ }
582
+ ],
583
+ returnType: FIELD
584
+ }),
585
+ aztec_avm_storageWrite: makeEntry({
586
+ params: [
587
+ {
588
+ name: 'slot',
589
+ type: FIELD
590
+ },
591
+ {
592
+ name: 'value',
593
+ type: FIELD
594
+ }
595
+ ]
596
+ }),
597
+ aztec_avm_emitPublicLog: makeEntry({
598
+ params: [
599
+ {
600
+ name: 'message',
601
+ type: ARRAY(FIELD)
602
+ }
603
+ ]
604
+ }),
605
+ aztec_avm_returndataSize: makeEntry({
606
+ returnType: U32
607
+ }),
608
+ aztec_avm_returndataCopy: makeEntry({
609
+ params: [
610
+ {
611
+ name: 'rdOffset',
612
+ type: U32
613
+ },
614
+ {
615
+ name: 'copySize',
616
+ type: U32
617
+ }
618
+ ],
619
+ returnType: ARRAY(FIELD)
620
+ }),
621
+ aztec_avm_call: makeEntry({
622
+ params: [
623
+ {
624
+ name: 'l2Gas',
625
+ type: U32
626
+ },
627
+ {
628
+ name: 'daGas',
629
+ type: U32
630
+ },
631
+ {
632
+ name: 'address',
633
+ type: AZTEC_ADDRESS
634
+ },
635
+ {
636
+ name: 'argsLength',
637
+ type: U32
638
+ },
639
+ {
640
+ name: 'args',
641
+ type: ARRAY(FIELD)
642
+ }
643
+ ]
644
+ }),
645
+ aztec_avm_staticCall: makeEntry({
646
+ params: [
647
+ {
648
+ name: 'l2Gas',
649
+ type: U32
650
+ },
651
+ {
652
+ name: 'daGas',
653
+ type: U32
654
+ },
655
+ {
656
+ name: 'address',
657
+ type: AZTEC_ADDRESS
658
+ },
659
+ {
660
+ name: 'argsLength',
661
+ type: U32
662
+ },
663
+ {
664
+ name: 'args',
665
+ type: ARRAY(FIELD)
666
+ }
667
+ ]
668
+ }),
669
+ aztec_avm_successCopy: makeEntry({
670
+ returnType: BOOL
671
+ }),
672
+ aztec_avm_getContractInstanceDeployer: makeEntry({
673
+ params: [
674
+ {
675
+ name: 'address',
676
+ type: AZTEC_ADDRESS
677
+ }
678
+ ],
679
+ returnType: CONTRACT_INSTANCE_MEMBER
680
+ }),
681
+ aztec_avm_getContractInstanceClassId: makeEntry({
682
+ params: [
683
+ {
684
+ name: 'address',
685
+ type: AZTEC_ADDRESS
686
+ }
687
+ ],
688
+ returnType: CONTRACT_INSTANCE_MEMBER
689
+ }),
690
+ aztec_avm_getContractInstanceInitializationHash: makeEntry({
691
+ params: [
692
+ {
693
+ name: 'address',
694
+ type: AZTEC_ADDRESS
695
+ }
696
+ ],
697
+ returnType: CONTRACT_INSTANCE_MEMBER
698
+ }),
699
+ aztec_avm_getContractInstanceImmutablesHash: makeEntry({
700
+ params: [
701
+ {
702
+ name: 'address',
703
+ type: AZTEC_ADDRESS
704
+ }
705
+ ],
706
+ returnType: CONTRACT_INSTANCE_MEMBER
707
+ })
708
+ };
709
+ export function toInputSlots(inputs) {
710
+ // TXE foreign calls use bare hex strings, but Fr.fromString requires a 0x prefix to parse as hex.
711
+ return inputs.map((v)=>Array.isArray(v) ? v.map(withHexPrefix) : [
712
+ withHexPrefix(v)
713
+ ]);
714
+ }
715
+ /**
716
+ * Deserializes oracle inputs, calls the handler with typed params, serializes the result, and wraps
717
+ * it in a `ForeignCallResult`. Normalizes `ForeignCallArgs` (which may contain bare strings) into
718
+ * `InputSlot[]` (always arrays) before deserialization.
719
+ */ export async function callTxeHandler({ oracle, inputs, handler }) {
720
+ const entry = TXE_ORACLE_REGISTRY[oracle];
721
+ const named = entry.deserializeParams(toInputSlots(inputs));
722
+ const positional = named.map((p)=>p.value);
723
+ const result = await handler(positional);
724
+ return outputSlotsToForeignCallResult(entry.serializeReturn(result));
725
+ }
726
+ /**
727
+ * Dispatches an oracle that has been retired into the PXE legacy registry. TXE has no explicit handler method for such
728
+ * names; this runs them through the same `buildACIRCallback` legacy path that contract execution already uses, so
729
+ * TXE's top-level oracle path and its in-contract path treat the legacy registry identically.
730
+ */ const legacyCallbacksByHandler = new WeakMap();
731
+ export async function callTxeLegacyHandler(oracle, inputs, oracleHandler) {
732
+ // `buildACIRCallback` materializes the whole real+legacy closure set, so memoize it per handler rather than
733
+ // rebuilding on every call (TXE routes one legacy oracle through here on each top-level discovery).
734
+ let callback = legacyCallbacksByHandler.get(oracleHandler);
735
+ if (!callback) {
736
+ callback = buildACIRCallback(oracleHandler);
737
+ legacyCallbacksByHandler.set(oracleHandler, callback);
738
+ }
739
+ const outputSlots = await callback[oracle](...toInputSlots(inputs));
740
+ return outputSlotsToForeignCallResult(outputSlots);
741
+ }
742
+ /**
743
+ * Strips the `0x` prefix from each serialized output slot (TXE foreign calls use bare hex strings) and wraps them in a
744
+ * `ForeignCallResult`.
745
+ */ function outputSlotsToForeignCallResult(outputSlots) {
746
+ return {
747
+ values: outputSlots.map((slot)=>Array.isArray(slot) ? slot.map(withoutHexPrefix) : withoutHexPrefix(slot))
748
+ };
749
+ }