@aztec/noir-protocol-circuits-types 0.24.0

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 (77) hide show
  1. package/README.md +1 -0
  2. package/dest/index.d.ts +69 -0
  3. package/dest/index.d.ts.map +1 -0
  4. package/dest/index.js +268 -0
  5. package/dest/scripts/generate_ts_from_abi.d.ts +2 -0
  6. package/dest/scripts/generate_ts_from_abi.d.ts.map +1 -0
  7. package/dest/scripts/generate_ts_from_abi.js +180 -0
  8. package/dest/target/private_kernel_init.json +1 -0
  9. package/dest/target/private_kernel_init_simulated.json +1 -0
  10. package/dest/target/private_kernel_inner.json +1 -0
  11. package/dest/target/private_kernel_inner_simulated.json +1 -0
  12. package/dest/target/private_kernel_tail.json +1 -0
  13. package/dest/target/private_kernel_tail_simulated.json +1 -0
  14. package/dest/target/public_kernel_app_logic.json +1 -0
  15. package/dest/target/public_kernel_app_logic_simulated.json +1 -0
  16. package/dest/target/public_kernel_setup.json +1 -0
  17. package/dest/target/public_kernel_setup_simulated.json +1 -0
  18. package/dest/target/rollup_base.json +1 -0
  19. package/dest/target/rollup_base_simulated.json +1 -0
  20. package/dest/target/rollup_merge.json +1 -0
  21. package/dest/target/rollup_root.json +1 -0
  22. package/dest/type_conversion.d.ts +574 -0
  23. package/dest/type_conversion.d.ts.map +1 -0
  24. package/dest/type_conversion.js +1115 -0
  25. package/dest/types/private_kernel_init_types.d.ts +232 -0
  26. package/dest/types/private_kernel_init_types.d.ts.map +1 -0
  27. package/dest/types/private_kernel_init_types.js +3 -0
  28. package/dest/types/private_kernel_inner_types.d.ts +233 -0
  29. package/dest/types/private_kernel_inner_types.d.ts.map +1 -0
  30. package/dest/types/private_kernel_inner_types.js +3 -0
  31. package/dest/types/private_kernel_tail_types.d.ts +182 -0
  32. package/dest/types/private_kernel_tail_types.d.ts.map +1 -0
  33. package/dest/types/private_kernel_tail_types.js +3 -0
  34. package/dest/types/public_kernel_app_logic_types.d.ts +212 -0
  35. package/dest/types/public_kernel_app_logic_types.d.ts.map +1 -0
  36. package/dest/types/public_kernel_app_logic_types.js +3 -0
  37. package/dest/types/public_kernel_setup_types.d.ts +212 -0
  38. package/dest/types/public_kernel_setup_types.d.ts.map +1 -0
  39. package/dest/types/public_kernel_setup_types.js +3 -0
  40. package/dest/types/rollup_base_types.d.ts +220 -0
  41. package/dest/types/rollup_base_types.d.ts.map +1 -0
  42. package/dest/types/rollup_base_types.js +3 -0
  43. package/dest/types/rollup_merge_types.d.ts +71 -0
  44. package/dest/types/rollup_merge_types.d.ts.map +1 -0
  45. package/dest/types/rollup_merge_types.js +3 -0
  46. package/dest/types/rollup_root_types.d.ts +92 -0
  47. package/dest/types/rollup_root_types.d.ts.map +1 -0
  48. package/dest/types/rollup_root_types.js +3 -0
  49. package/package.json +60 -0
  50. package/src/fixtures/nested-call-private-kernel-init.hex +1 -0
  51. package/src/fixtures/nested-call-private-kernel-inner.hex +1 -0
  52. package/src/fixtures/nested-call-private-kernel-ordering.hex +1 -0
  53. package/src/index.ts +438 -0
  54. package/src/scripts/generate_ts_from_abi.ts +233 -0
  55. package/src/target/private_kernel_init.json +1 -0
  56. package/src/target/private_kernel_init_simulated.json +1 -0
  57. package/src/target/private_kernel_inner.json +1 -0
  58. package/src/target/private_kernel_inner_simulated.json +1 -0
  59. package/src/target/private_kernel_tail.json +1 -0
  60. package/src/target/private_kernel_tail_simulated.json +1 -0
  61. package/src/target/public_kernel_app_logic.json +1 -0
  62. package/src/target/public_kernel_app_logic_simulated.json +1 -0
  63. package/src/target/public_kernel_setup.json +1 -0
  64. package/src/target/public_kernel_setup_simulated.json +1 -0
  65. package/src/target/rollup_base.json +1 -0
  66. package/src/target/rollup_base_simulated.json +1 -0
  67. package/src/target/rollup_merge.json +1 -0
  68. package/src/target/rollup_root.json +1 -0
  69. package/src/type_conversion.ts +1673 -0
  70. package/src/types/private_kernel_init_types.ts +272 -0
  71. package/src/types/private_kernel_inner_types.ts +273 -0
  72. package/src/types/private_kernel_tail_types.ts +214 -0
  73. package/src/types/public_kernel_app_logic_types.ts +250 -0
  74. package/src/types/public_kernel_setup_types.ts +250 -0
  75. package/src/types/rollup_base_types.ts +259 -0
  76. package/src/types/rollup_merge_types.ts +85 -0
  77. package/src/types/rollup_root_types.ts +109 -0
@@ -0,0 +1,1115 @@
1
+ import { AccumulatedNonRevertibleData, AggregationObject, AppendOnlyTreeSnapshot, AztecAddress, BaseOrMergeRollupPublicInputs, CallContext, CallRequest, CallerContext, CombinedAccumulatedData, CombinedConstantData, ConstantRollupData, ContractDeploymentData, EthAddress, FinalAccumulatedData, Fr, FunctionData, FunctionSelector, GlobalVariables, GrumpkinScalar, Header, MAX_NEW_COMMITMENTS_PER_TX, MAX_NEW_COMMITMENTS_PER_TX_META, MAX_NEW_CONTRACTS_PER_TX, MAX_NEW_L2_TO_L1_MSGS_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NEW_NULLIFIERS_PER_TX_META, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX_META, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_READ_REQUESTS_PER_TX, NUM_FIELDS_PER_SHA256, NewContractData, NullifierKeyValidationRequest, NullifierKeyValidationRequestContext, PartialStateReference, Point, PrivateKernelInnerCircuitPublicInputs, PrivateKernelTailCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelCircuitPublicInputs, RootRollupPublicInputs, SideEffect, SideEffectLinkedToNoteHash, StateReference, TxContext, } from '@aztec/circuits.js';
2
+ import { from2Fields, mapTuple, to2Fields } from '@aztec/foundation/serialize';
3
+ /* eslint-disable camelcase */
4
+ /**
5
+ * Maps a field to a noir field.
6
+ * @param field - The field.
7
+ * @returns The noir field.
8
+ */
9
+ export function mapFieldToNoir(field) {
10
+ return field.toString();
11
+ }
12
+ /**
13
+ * Maps a noir field to a fr.
14
+ * @param field - The noir field.
15
+ * @returns The fr.
16
+ */
17
+ export function mapFieldFromNoir(field) {
18
+ return Fr.fromString(field);
19
+ }
20
+ /** Maps a field to a noir wrapped field type (ie any type implemented as struct with an inner Field). */
21
+ export function mapWrappedFieldToNoir(field) {
22
+ return { inner: mapFieldToNoir(field) };
23
+ }
24
+ /** Maps a noir wrapped field type (ie any type implemented as struct with an inner Field) to a typescript field. */
25
+ export function mapWrappedFieldFromNoir(wrappedField) {
26
+ return mapFieldFromNoir(wrappedField.inner);
27
+ }
28
+ /**
29
+ * Maps a number coming from noir.
30
+ * @param number - The field representing the number.
31
+ * @returns The number
32
+ */
33
+ export function mapNumberFromNoir(number) {
34
+ return Number(Fr.fromString(number).toBigInt());
35
+ }
36
+ export function mapNumberToNoir(number) {
37
+ return new Fr(BigInt(number)).toString();
38
+ }
39
+ /**
40
+ * Maps a point to a noir point.
41
+ * @param point - The point.
42
+ * @returns The noir point.
43
+ */
44
+ export function mapPointToNoir(point) {
45
+ return {
46
+ x: mapFieldToNoir(point.x),
47
+ y: mapFieldToNoir(point.y),
48
+ };
49
+ }
50
+ /**
51
+ * Maps a noir point to a point.
52
+ * @param point - The noir point.
53
+ * @returns The point.
54
+ */
55
+ export function mapPointFromNoir(point) {
56
+ return new Point(mapFieldFromNoir(point.x), mapFieldFromNoir(point.y));
57
+ }
58
+ /**
59
+ * Maps a GrumpkinPrivateKey to a noir GrumpkinPrivateKey.
60
+ * @param privateKey - The GrumpkinPrivateKey.
61
+ * @returns The noir GrumpkinPrivateKey.
62
+ */
63
+ export function mapGrumpkinPrivateKeyToNoir(privateKey) {
64
+ return {
65
+ high: mapFieldToNoir(privateKey.high),
66
+ low: mapFieldToNoir(privateKey.low),
67
+ };
68
+ }
69
+ /**
70
+ * Maps a noir GrumpkinPrivateKey to a GrumpkinPrivateKey.
71
+ * @param privateKey - The noir GrumpkinPrivateKey.
72
+ * @returns The GrumpkinPrivateKey.
73
+ */
74
+ export function mapGrumpkinPrivateKeyFromNoir(privateKey) {
75
+ return GrumpkinScalar.fromHighLow(mapFieldFromNoir(privateKey.high), mapFieldFromNoir(privateKey.low));
76
+ }
77
+ /**
78
+ * Maps an aztec address to a noir aztec address.
79
+ * @param address - The address.
80
+ * @returns The noir aztec address.
81
+ */
82
+ export function mapAztecAddressToNoir(address) {
83
+ return {
84
+ inner: mapFieldToNoir(address.toField()),
85
+ };
86
+ }
87
+ /**
88
+ * Maps a noir aztec address to an aztec address.
89
+ * @param address - The noir aztec address.
90
+ * @returns The aztec address.
91
+ */
92
+ export function mapAztecAddressFromNoir(address) {
93
+ return AztecAddress.fromField(mapFieldFromNoir(address.inner));
94
+ }
95
+ /**
96
+ * Maps an eth address to a noir eth address.
97
+ * @param address - The address.
98
+ * @returns The noir eth address.
99
+ */
100
+ export function mapEthAddressToNoir(address) {
101
+ return {
102
+ inner: mapFieldToNoir(address.toField()),
103
+ };
104
+ }
105
+ /**
106
+ * Maps a noir eth address to an eth address.
107
+ * @param address - The noir eth address.
108
+ * @returns The eth address.
109
+ */
110
+ export function mapEthAddressFromNoir(address) {
111
+ return EthAddress.fromField(mapFieldFromNoir(address.inner));
112
+ }
113
+ /** Maps a field to a contract class id in Noir. */
114
+ export function mapContractClassIdToNoir(contractClassId) {
115
+ return { inner: mapFieldToNoir(contractClassId) };
116
+ }
117
+ /** Maps a noir contract class id to typescript. */
118
+ export function mapContractClassIdFromNoir(contractClassId) {
119
+ return mapFieldFromNoir(contractClassId.inner);
120
+ }
121
+ /**
122
+ * Maps a contract deployment data to a noir contract deployment data.
123
+ * @param data - The data.
124
+ * @returns The noir contract deployment data.
125
+ */
126
+ export function mapContractDeploymentDataToNoir(data) {
127
+ return {
128
+ public_key: mapPointToNoir(data.publicKey),
129
+ initialization_hash: mapFieldToNoir(data.initializationHash),
130
+ contract_class_id: mapContractClassIdToNoir(data.contractClassId),
131
+ contract_address_salt: mapFieldToNoir(data.contractAddressSalt),
132
+ portal_contract_address: mapEthAddressToNoir(data.portalContractAddress),
133
+ };
134
+ }
135
+ /**
136
+ * Maps a noir contract deployment data to a contract deployment data.
137
+ * @param data - The noir data.
138
+ * @returns The contract deployment data.
139
+ */
140
+ export function mapContractDeploymentDataFromNoir(data) {
141
+ return new ContractDeploymentData(mapPointFromNoir(data.public_key), mapFieldFromNoir(data.initialization_hash), mapContractClassIdFromNoir(data.contract_class_id), mapFieldFromNoir(data.contract_address_salt), mapEthAddressFromNoir(data.portal_contract_address));
142
+ }
143
+ /**
144
+ * Maps a tx context to a noir tx context.
145
+ * @param txContext - The tx context.
146
+ * @returns The noir tx context.
147
+ */
148
+ export function mapTxContextToNoir(txContext) {
149
+ return {
150
+ is_fee_payment_tx: txContext.isFeePaymentTx,
151
+ is_rebate_payment_tx: txContext.isRebatePaymentTx,
152
+ is_contract_deployment_tx: txContext.isContractDeploymentTx,
153
+ contract_deployment_data: mapContractDeploymentDataToNoir(txContext.contractDeploymentData),
154
+ chain_id: mapFieldToNoir(txContext.chainId),
155
+ version: mapFieldToNoir(txContext.version),
156
+ };
157
+ }
158
+ /**
159
+ * Maps a noir tx context to a tx context.
160
+ * @param txContext - The noir tx context.
161
+ * @returns The tx context.
162
+ */
163
+ export function mapTxContextFromNoir(txContext) {
164
+ return new TxContext(txContext.is_fee_payment_tx, txContext.is_rebate_payment_tx, txContext.is_contract_deployment_tx, mapContractDeploymentDataFromNoir(txContext.contract_deployment_data), mapFieldFromNoir(txContext.chain_id), mapFieldFromNoir(txContext.version));
165
+ }
166
+ /**
167
+ * Maps a function selector to a noir function selector.
168
+ * @param functionSelector - The function selector.
169
+ * @returns The noir function selector.
170
+ */
171
+ export function mapFunctionSelectorToNoir(functionSelector) {
172
+ return {
173
+ inner: mapFieldToNoir(functionSelector.toField()),
174
+ };
175
+ }
176
+ /**
177
+ * Maps a noir function selector to a function selector.
178
+ * @param functionSelector - The noir function selector.
179
+ * @returns The function selector.
180
+ */
181
+ export function mapFunctionSelectorFromNoir(functionSelector) {
182
+ return FunctionSelector.fromField(mapFieldFromNoir(functionSelector.inner));
183
+ }
184
+ /**
185
+ * Maps a function data to a noir function data.
186
+ * @param functionData - The function data.
187
+ * @returns The noir function data.
188
+ */
189
+ export function mapFunctionDataToNoir(functionData) {
190
+ return {
191
+ selector: mapFunctionSelectorToNoir(functionData.selector),
192
+ is_internal: functionData.isInternal,
193
+ is_private: functionData.isPrivate,
194
+ is_constructor: functionData.isConstructor,
195
+ };
196
+ }
197
+ /**
198
+ * Maps a noir function data to a function data.
199
+ * @param functionData - The noir function data.
200
+ * @returns The function data.
201
+ */
202
+ export function mapFunctionDataFromNoir(functionData) {
203
+ return new FunctionData(mapFunctionSelectorFromNoir(functionData.selector), functionData.is_internal, functionData.is_private, functionData.is_constructor);
204
+ }
205
+ /**
206
+ * Maps a tx request to a noir tx request.
207
+ * @param txRequest - The tx request.
208
+ * @returns The noir tx request.
209
+ */
210
+ export function mapTxRequestToNoir(txRequest) {
211
+ return {
212
+ origin: mapAztecAddressToNoir(txRequest.origin),
213
+ args_hash: mapFieldToNoir(txRequest.argsHash),
214
+ tx_context: mapTxContextToNoir(txRequest.txContext),
215
+ function_data: mapFunctionDataToNoir(txRequest.functionData),
216
+ };
217
+ }
218
+ /**
219
+ * Maps a call context to a noir call context.
220
+ * @param callContext - The call context.
221
+ * @returns The noir call context.
222
+ */
223
+ export function mapCallContextFromNoir(callContext) {
224
+ return new CallContext(mapAztecAddressFromNoir(callContext.msg_sender), mapAztecAddressFromNoir(callContext.storage_contract_address), mapEthAddressFromNoir(callContext.portal_contract_address), mapFunctionSelectorFromNoir(callContext.function_selector), callContext.is_delegate_call, callContext.is_static_call, callContext.is_contract_deployment, mapNumberFromNoir(callContext.start_side_effect_counter));
225
+ }
226
+ /**
227
+ * Maps a call context to a noir call context.
228
+ * @param callContext - The call context.
229
+ * @returns The noir call context.
230
+ */
231
+ export function mapCallContextToNoir(callContext) {
232
+ return {
233
+ msg_sender: mapAztecAddressToNoir(callContext.msgSender),
234
+ storage_contract_address: mapAztecAddressToNoir(callContext.storageContractAddress),
235
+ portal_contract_address: mapEthAddressToNoir(callContext.portalContractAddress),
236
+ function_selector: mapFunctionSelectorToNoir(callContext.functionSelector),
237
+ is_delegate_call: callContext.isDelegateCall,
238
+ is_static_call: callContext.isStaticCall,
239
+ is_contract_deployment: callContext.isContractDeployment,
240
+ start_side_effect_counter: mapNumberToNoir(callContext.startSideEffectCounter),
241
+ };
242
+ }
243
+ /**
244
+ * Maps a caller context to a noir caller context.
245
+ * @param callContext - The caller context.
246
+ * @returns The noir caller context.
247
+ */
248
+ export function mapCallerContextFromNoir(callerContext) {
249
+ return new CallerContext(mapAztecAddressFromNoir(callerContext.msg_sender), mapAztecAddressFromNoir(callerContext.storage_contract_address));
250
+ }
251
+ /**
252
+ * Maps a caller context to a noir caller context.
253
+ * @param callContext - The caller context.
254
+ * @returns The noir caller context.
255
+ */
256
+ export function mapCallerContextToNoir(callerContext) {
257
+ return {
258
+ msg_sender: mapAztecAddressToNoir(callerContext.msgSender),
259
+ storage_contract_address: mapAztecAddressToNoir(callerContext.storageContractAddress),
260
+ };
261
+ }
262
+ /**
263
+ * Maps a noir call request to a call request.
264
+ * @param callRequest - The noir call request.
265
+ * @returns The call request.
266
+ */
267
+ export function mapCallRequestFromNoir(callRequest) {
268
+ return new CallRequest(mapFieldFromNoir(callRequest.hash), mapAztecAddressFromNoir(callRequest.caller_contract_address), mapCallerContextFromNoir(callRequest.caller_context), Fr.ZERO, // todo: actual values of counters
269
+ Fr.ZERO);
270
+ }
271
+ /**
272
+ * Maps a call request to a noir call request.
273
+ * @param privateCallStackItem - The call stack item.
274
+ * @returns The noir call stack item.
275
+ */
276
+ export function mapCallRequestToNoir(callRequest) {
277
+ return {
278
+ hash: mapFieldToNoir(callRequest.hash),
279
+ caller_contract_address: mapAztecAddressToNoir(callRequest.callerContractAddress),
280
+ caller_context: mapCallerContextToNoir(callRequest.callerContext),
281
+ start_side_effect_counter: mapFieldToNoir(callRequest.startSideEffectCounter),
282
+ end_side_effect_counter: mapFieldToNoir(callRequest.endSideEffectCounter),
283
+ };
284
+ }
285
+ /**
286
+ * Maps a SideEffect to a noir side effect.
287
+ * @param sideEffect - The side effect.
288
+ * @returns The noir sideeffect.
289
+ */
290
+ export function mapSideEffectToNoir(sideEffect) {
291
+ return {
292
+ value: mapFieldToNoir(sideEffect.value),
293
+ counter: mapFieldToNoir(sideEffect.counter),
294
+ };
295
+ }
296
+ /**
297
+ * Maps a noir side effect to aSideEffect.
298
+ * @param sideEffect - The noir side effect.
299
+ * @returns The TS sideeffect.
300
+ */
301
+ export function mapSideEffectFromNoir(sideEffect) {
302
+ return new SideEffect(mapFieldFromNoir(sideEffect.value), mapFieldFromNoir(sideEffect.counter));
303
+ }
304
+ /**
305
+ * Maps a SideEffectLinked to a noir side effect.
306
+ * @param sideEffectLinked - The side effect linked to note hash.
307
+ * @returns The noir sideeffectlinked to note hash.
308
+ */
309
+ export function mapSideEffectLinkedToNoir(sideEffectLinked) {
310
+ return {
311
+ value: mapFieldToNoir(sideEffectLinked.value),
312
+ note_hash: mapFieldToNoir(sideEffectLinked.noteHash),
313
+ counter: mapFieldToNoir(sideEffectLinked.counter),
314
+ };
315
+ }
316
+ /**
317
+ * Maps a noir side effect to aSideEffect.
318
+ * @param sideEffect - The noir side effect.
319
+ * @returns The TS sideeffect.
320
+ */
321
+ export function mapSideEffectLinkedFromNoir(sideEffectLinked) {
322
+ return new SideEffectLinkedToNoteHash(mapFieldFromNoir(sideEffectLinked.value), mapFieldFromNoir(sideEffectLinked.note_hash), mapFieldFromNoir(sideEffectLinked.counter));
323
+ }
324
+ /**
325
+ * Maps a NullifierKeyValidationRequest to a noir NullifierKeyValidationRequest.
326
+ * @param request - The NullifierKeyValidationRequest.
327
+ * @returns The noir NullifierKeyValidationRequest.
328
+ */
329
+ export function mapNullifierKeyValidationRequestToNoir(request) {
330
+ return {
331
+ public_key: mapPointToNoir(request.publicKey),
332
+ secret_key: mapGrumpkinPrivateKeyToNoir(request.secretKey),
333
+ };
334
+ }
335
+ /**
336
+ * Maps a noir NullifierKeyValidationRequest to NullifierKeyValidationRequest.
337
+ * @param request - The noir NullifierKeyValidationRequest.
338
+ * @returns The TS NullifierKeyValidationRequest.
339
+ */
340
+ export function mapNullifierKeyValidationRequestFromNoir(request) {
341
+ return new NullifierKeyValidationRequest(mapPointFromNoir(request.public_key), mapGrumpkinPrivateKeyFromNoir(request.secret_key));
342
+ }
343
+ /**
344
+ * Maps a NullifierKeyValidationRequest to a noir NullifierKeyValidationRequest.
345
+ * @param request - The NullifierKeyValidationRequest.
346
+ * @returns The noir NullifierKeyValidationRequest.
347
+ */
348
+ export function mapNullifierKeyValidationRequestContextToNoir(request) {
349
+ return {
350
+ public_key: mapPointToNoir(request.publicKey),
351
+ secret_key: mapGrumpkinPrivateKeyToNoir(request.secretKey),
352
+ contract_address: mapAztecAddressToNoir(request.contractAddress),
353
+ };
354
+ }
355
+ /**
356
+ * Maps a noir NullifierKeyValidationRequestContext to NullifierKeyValidationRequestContext.
357
+ * @param request - The noir NullifierKeyValidationRequestContext.
358
+ * @returns The TS NullifierKeyValidationRequestContext.
359
+ */
360
+ export function mapNullifierKeyValidationRequestContextFromNoir(request) {
361
+ return new NullifierKeyValidationRequestContext(mapPointFromNoir(request.public_key), mapGrumpkinPrivateKeyFromNoir(request.secret_key), mapAztecAddressFromNoir(request.contract_address));
362
+ }
363
+ /**
364
+ * Maps private circuit public inputs to noir private circuit public inputs.
365
+ * @param privateCircuitPublicInputs - The private circuit public inputs.
366
+ * @returns The noir private circuit public inputs.
367
+ */
368
+ export function mapPrivateCircuitPublicInputsToNoir(privateCircuitPublicInputs) {
369
+ return {
370
+ call_context: mapCallContextToNoir(privateCircuitPublicInputs.callContext),
371
+ args_hash: mapFieldToNoir(privateCircuitPublicInputs.argsHash),
372
+ return_values: mapTuple(privateCircuitPublicInputs.returnValues, mapFieldToNoir),
373
+ read_requests: mapTuple(privateCircuitPublicInputs.readRequests, mapSideEffectToNoir),
374
+ nullifier_key_validation_requests: mapTuple(privateCircuitPublicInputs.nullifierKeyValidationRequests, mapNullifierKeyValidationRequestToNoir),
375
+ new_commitments: mapTuple(privateCircuitPublicInputs.newCommitments, mapSideEffectToNoir),
376
+ new_nullifiers: mapTuple(privateCircuitPublicInputs.newNullifiers, mapSideEffectLinkedToNoir),
377
+ private_call_stack_hashes: mapTuple(privateCircuitPublicInputs.privateCallStackHashes, mapFieldToNoir),
378
+ public_call_stack_hashes: mapTuple(privateCircuitPublicInputs.publicCallStackHashes, mapFieldToNoir),
379
+ new_l2_to_l1_msgs: mapTuple(privateCircuitPublicInputs.newL2ToL1Msgs, mapFieldToNoir),
380
+ end_side_effect_counter: mapFieldToNoir(privateCircuitPublicInputs.endSideEffectCounter),
381
+ encrypted_logs_hash: mapTuple(privateCircuitPublicInputs.encryptedLogsHash, mapFieldToNoir),
382
+ unencrypted_logs_hash: mapTuple(privateCircuitPublicInputs.unencryptedLogsHash, mapFieldToNoir),
383
+ encrypted_log_preimages_length: mapFieldToNoir(privateCircuitPublicInputs.encryptedLogPreimagesLength),
384
+ unencrypted_log_preimages_length: mapFieldToNoir(privateCircuitPublicInputs.unencryptedLogPreimagesLength),
385
+ historical_header: mapHeaderToNoir(privateCircuitPublicInputs.historicalHeader),
386
+ contract_deployment_data: mapContractDeploymentDataToNoir(privateCircuitPublicInputs.contractDeploymentData),
387
+ chain_id: mapFieldToNoir(privateCircuitPublicInputs.chainId),
388
+ version: mapFieldToNoir(privateCircuitPublicInputs.version),
389
+ max_non_revertible_side_effect_counter: mapFieldToNoir(privateCircuitPublicInputs.maxNonRevertibleSideEffectCounter),
390
+ };
391
+ }
392
+ /**
393
+ * Maps a private call stack item to a noir private call stack item.
394
+ * @param privateCallStackItem - The private call stack item.
395
+ * @returns The noir private call stack item.
396
+ */
397
+ export function mapPrivateCallStackItemToNoir(privateCallStackItem) {
398
+ return {
399
+ contract_address: mapAztecAddressToNoir(privateCallStackItem.contractAddress),
400
+ function_data: mapFunctionDataToNoir(privateCallStackItem.functionData),
401
+ public_inputs: mapPrivateCircuitPublicInputsToNoir(privateCallStackItem.publicInputs),
402
+ };
403
+ }
404
+ /**
405
+ * Maps a function leaf membership witness to a noir function leaf membership witness.
406
+ * @param membershipWitness - The membership witness.
407
+ * @returns The noir function leaf membership witness.
408
+ */
409
+ function mapFunctionLeafMembershipWitnessToNoir(membershipWitness) {
410
+ return {
411
+ leaf_index: membershipWitness.leafIndex.toString(),
412
+ sibling_path: mapTuple(membershipWitness.siblingPath, mapFieldToNoir),
413
+ };
414
+ }
415
+ /**
416
+ * Maps a read request membership witness to a noir read request membership witness.
417
+ * @param readRequestMembershipWitness - The read request membership witness.
418
+ * @returns The noir read request membership witness.
419
+ */
420
+ export function mapReadRequestMembershipWitnessToNoir(readRequestMembershipWitness) {
421
+ return {
422
+ leaf_index: mapFieldToNoir(readRequestMembershipWitness.leafIndex),
423
+ sibling_path: mapTuple(readRequestMembershipWitness.siblingPath, mapFieldToNoir),
424
+ is_transient: readRequestMembershipWitness.isTransient,
425
+ hint_to_commitment: mapFieldToNoir(readRequestMembershipWitness.hintToCommitment),
426
+ };
427
+ }
428
+ /**
429
+ * Maps a private call data to a noir private call data.
430
+ * @param privateCallData - The private call data.
431
+ * @returns The noir private call data.
432
+ */
433
+ export function mapPrivateCallDataToNoir(privateCallData) {
434
+ return {
435
+ call_stack_item: mapPrivateCallStackItemToNoir(privateCallData.callStackItem),
436
+ private_call_stack: mapTuple(privateCallData.privateCallStack, mapCallRequestToNoir),
437
+ public_call_stack: mapTuple(privateCallData.publicCallStack, mapCallRequestToNoir),
438
+ proof: {},
439
+ vk: {},
440
+ function_leaf_membership_witness: mapFunctionLeafMembershipWitnessToNoir(privateCallData.functionLeafMembershipWitness),
441
+ read_request_membership_witnesses: mapTuple(privateCallData.readRequestMembershipWitnesses, mapReadRequestMembershipWitnessToNoir),
442
+ contract_class_artifact_hash: mapFieldToNoir(privateCallData.contractClassArtifactHash),
443
+ contract_class_public_bytecode_commitment: mapFieldToNoir(privateCallData.contractClassPublicBytecodeCommitment),
444
+ public_keys_hash: mapWrappedFieldToNoir(privateCallData.publicKeysHash),
445
+ salted_initialization_hash: mapWrappedFieldToNoir(privateCallData.saltedInitializationHash),
446
+ //TODO this seems like the wrong type in circuits.js
447
+ portal_contract_address: mapEthAddressToNoir(EthAddress.fromField(privateCallData.portalContractAddress)),
448
+ acir_hash: mapFieldToNoir(privateCallData.acirHash),
449
+ };
450
+ }
451
+ /**
452
+ * Maps an array from noir types to a tuple of parsed types.
453
+ * @param noirArray - The noir array.
454
+ * @param length - The length of the tuple.
455
+ * @param mapper - The mapper function applied to each element.
456
+ * @returns The tuple.
457
+ */
458
+ export function mapTupleFromNoir(noirArray, length, mapper) {
459
+ if (noirArray.length != length) {
460
+ throw new Error(`Expected ${length} items, got ${noirArray.length}`);
461
+ }
462
+ return Array.from({ length }, (_, idx) => mapper(noirArray[idx]));
463
+ }
464
+ /**
465
+ * Maps a SHA256 hash from noir to the parsed type.
466
+ * @param hash - The hash as it is represented in Noir (2 fields).
467
+ * @returns The hash represented as a 32 bytes long buffer.
468
+ */
469
+ export function mapSha256HashFromNoir(hash) {
470
+ return from2Fields(mapFieldFromNoir(hash[0]), mapFieldFromNoir(hash[1]));
471
+ }
472
+ /**
473
+ * Maps a sha256 to the representation used in noir.
474
+ * @param hash - The hash represented as a 32 bytes long buffer.
475
+ * @returns The hash as it is represented in Noir (2 fields).
476
+ */
477
+ export function mapSha256HashToNoir(hash) {
478
+ return to2Fields(hash).map(mapFieldToNoir);
479
+ }
480
+ /**
481
+ * Maps new contract data from noir to the parsed type.
482
+ * @param newContractData - The noir new contract data.
483
+ * @returns The parsed new contract data.
484
+ */
485
+ export function mapNewContractDataFromNoir(newContractData) {
486
+ return new NewContractData(mapAztecAddressFromNoir(newContractData.contract_address), mapEthAddressFromNoir(newContractData.portal_contract_address), mapContractClassIdFromNoir(newContractData.contract_class_id));
487
+ }
488
+ /**
489
+ * Maps new contract data to noir new contract data.
490
+ * @param newContractData - The new contract data.
491
+ * @returns The noir new contract data.
492
+ */
493
+ export function mapNewContractDataToNoir(newContractData) {
494
+ return {
495
+ contract_address: mapAztecAddressToNoir(newContractData.contractAddress),
496
+ portal_contract_address: mapEthAddressToNoir(newContractData.portalContractAddress),
497
+ contract_class_id: mapContractClassIdToNoir(newContractData.contractClassId),
498
+ };
499
+ }
500
+ /**
501
+ * Maps public data update request from noir to the parsed type.
502
+ * @param publicDataUpdateRequest - The noir public data update request.
503
+ * @returns The parsed public data update request.
504
+ */
505
+ export function mapPublicDataUpdateRequestFromNoir(publicDataUpdateRequest) {
506
+ return new PublicDataUpdateRequest(mapFieldFromNoir(publicDataUpdateRequest.leaf_slot), mapFieldFromNoir(publicDataUpdateRequest.new_value));
507
+ }
508
+ /**
509
+ * Maps public data update request to noir public data update request.
510
+ * @param publicDataUpdateRequest - The public data update request.
511
+ * @returns The noir public data update request.
512
+ */
513
+ export function mapPublicDataUpdateRequestToNoir(publicDataUpdateRequest) {
514
+ return {
515
+ leaf_slot: mapFieldToNoir(publicDataUpdateRequest.leafSlot),
516
+ new_value: mapFieldToNoir(publicDataUpdateRequest.newValue),
517
+ };
518
+ }
519
+ /**
520
+ * Maps public data read from noir to the parsed type.
521
+ * @param publicDataRead - The noir public data read.
522
+ * @returns The parsed public data read.
523
+ */
524
+ export function mapPublicDataReadFromNoir(publicDataRead) {
525
+ return new PublicDataRead(mapFieldFromNoir(publicDataRead.leaf_slot), mapFieldFromNoir(publicDataRead.value));
526
+ }
527
+ /**
528
+ * Maps public data read to noir public data read.
529
+ * @param publicDataRead - The public data read.
530
+ * @returns The noir public data read.
531
+ */
532
+ export function mapPublicDataReadToNoir(publicDataRead) {
533
+ return {
534
+ leaf_slot: mapFieldToNoir(publicDataRead.leafSlot),
535
+ value: mapFieldToNoir(publicDataRead.value),
536
+ };
537
+ }
538
+ /**
539
+ * Maps combined accumulated data from noir to the parsed type.
540
+ * @param combinedAccumulatedData - The noir combined accumulated data.
541
+ * @returns The parsed combined accumulated data.
542
+ */
543
+ export function mapCombinedAccumulatedDataFromNoir(combinedAccumulatedData) {
544
+ return new CombinedAccumulatedData(mapTupleFromNoir(combinedAccumulatedData.read_requests, MAX_READ_REQUESTS_PER_TX, mapSideEffectFromNoir), mapTupleFromNoir(combinedAccumulatedData.nullifier_key_validation_requests, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX, mapNullifierKeyValidationRequestContextFromNoir), mapTupleFromNoir(combinedAccumulatedData.new_commitments, MAX_NEW_COMMITMENTS_PER_TX, mapSideEffectFromNoir), mapTupleFromNoir(combinedAccumulatedData.new_nullifiers, MAX_NEW_NULLIFIERS_PER_TX, mapSideEffectLinkedFromNoir), mapTupleFromNoir(combinedAccumulatedData.private_call_stack, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, mapCallRequestFromNoir), mapTupleFromNoir(combinedAccumulatedData.public_call_stack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, mapCallRequestFromNoir), mapTupleFromNoir(combinedAccumulatedData.new_l2_to_l1_msgs, MAX_NEW_L2_TO_L1_MSGS_PER_TX, mapFieldFromNoir), mapTupleFromNoir(combinedAccumulatedData.encrypted_logs_hash, NUM_FIELDS_PER_SHA256, mapFieldFromNoir), mapTupleFromNoir(combinedAccumulatedData.unencrypted_logs_hash, NUM_FIELDS_PER_SHA256, mapFieldFromNoir), mapFieldFromNoir(combinedAccumulatedData.encrypted_log_preimages_length), mapFieldFromNoir(combinedAccumulatedData.unencrypted_log_preimages_length), mapTupleFromNoir(combinedAccumulatedData.new_contracts, MAX_NEW_CONTRACTS_PER_TX, mapNewContractDataFromNoir), mapTupleFromNoir(combinedAccumulatedData.public_data_update_requests, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, mapPublicDataUpdateRequestFromNoir), mapTupleFromNoir(combinedAccumulatedData.public_data_reads, MAX_PUBLIC_DATA_READS_PER_TX, mapPublicDataReadFromNoir));
545
+ }
546
+ /**
547
+ * Maps final accumulated data from noir to the parsed type.
548
+ * @param finalAccumulatedData - The noir final accumulated data.
549
+ * @returns The parsed final accumulated data.
550
+ */
551
+ export function mapFinalAccumulatedDataFromNoir(finalAccumulatedData) {
552
+ return new FinalAccumulatedData(mapTupleFromNoir(finalAccumulatedData.new_commitments, MAX_NEW_COMMITMENTS_PER_TX, mapSideEffectFromNoir), mapTupleFromNoir(finalAccumulatedData.new_nullifiers, MAX_NEW_NULLIFIERS_PER_TX, mapSideEffectLinkedFromNoir), mapTupleFromNoir(finalAccumulatedData.private_call_stack, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, mapCallRequestFromNoir), mapTupleFromNoir(finalAccumulatedData.public_call_stack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, mapCallRequestFromNoir), mapTupleFromNoir(finalAccumulatedData.new_l2_to_l1_msgs, MAX_NEW_L2_TO_L1_MSGS_PER_TX, mapFieldFromNoir), mapTupleFromNoir(finalAccumulatedData.encrypted_logs_hash, NUM_FIELDS_PER_SHA256, mapFieldFromNoir), mapTupleFromNoir(finalAccumulatedData.unencrypted_logs_hash, NUM_FIELDS_PER_SHA256, mapFieldFromNoir), mapFieldFromNoir(finalAccumulatedData.encrypted_log_preimages_length), mapFieldFromNoir(finalAccumulatedData.unencrypted_log_preimages_length), mapTupleFromNoir(finalAccumulatedData.new_contracts, MAX_NEW_CONTRACTS_PER_TX, mapNewContractDataFromNoir));
553
+ }
554
+ /**
555
+ * Maps accumulated data in the Tx's meta phase to the parsed type.
556
+ * @param accumulatedMetaData - The noir accumulated meta data.
557
+ * @returns The parsed accumulated meta data.
558
+ */
559
+ export function mapAccumulatedMetaDataFromNoir(accumulatedMetaData) {
560
+ return new AccumulatedNonRevertibleData(mapTupleFromNoir(accumulatedMetaData.new_commitments, MAX_NEW_COMMITMENTS_PER_TX_META, mapSideEffectFromNoir), mapTupleFromNoir(accumulatedMetaData.new_nullifiers, MAX_NEW_NULLIFIERS_PER_TX_META, mapSideEffectLinkedFromNoir), mapTupleFromNoir(accumulatedMetaData.public_call_stack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX_META, mapCallRequestFromNoir));
561
+ }
562
+ /**
563
+ * Maps accumulated data in the Tx's meta phase to the parsed type.
564
+ * @param accumulatedMetaData - The noir accumulated meta data.
565
+ * @returns The parsed accumulated meta data.
566
+ */
567
+ export function mapAccumulatedMetaDataToNoir(accumulatedMetaData) {
568
+ return {
569
+ new_commitments: mapTuple(accumulatedMetaData.newCommitments, mapSideEffectToNoir),
570
+ new_nullifiers: mapTuple(accumulatedMetaData.newNullifiers, mapSideEffectLinkedToNoir),
571
+ public_call_stack: mapTuple(accumulatedMetaData.publicCallStack, mapCallRequestToNoir),
572
+ };
573
+ }
574
+ /**
575
+ * Maps combined accumulated data to noir combined accumulated data.
576
+ * @param combinedAccumulatedData - The combined accumulated data.
577
+ * @returns The noir combined accumulated data.
578
+ */
579
+ export function mapCombinedAccumulatedDataToNoir(combinedAccumulatedData) {
580
+ return {
581
+ read_requests: mapTuple(combinedAccumulatedData.readRequests, mapSideEffectToNoir),
582
+ nullifier_key_validation_requests: mapTuple(combinedAccumulatedData.nullifierKeyValidationRequests, mapNullifierKeyValidationRequestContextToNoir),
583
+ new_commitments: mapTuple(combinedAccumulatedData.newCommitments, mapSideEffectToNoir),
584
+ new_nullifiers: mapTuple(combinedAccumulatedData.newNullifiers, mapSideEffectLinkedToNoir),
585
+ private_call_stack: mapTuple(combinedAccumulatedData.privateCallStack, mapCallRequestToNoir),
586
+ public_call_stack: mapTuple(combinedAccumulatedData.publicCallStack, mapCallRequestToNoir),
587
+ new_l2_to_l1_msgs: mapTuple(combinedAccumulatedData.newL2ToL1Msgs, mapFieldToNoir),
588
+ encrypted_logs_hash: mapTuple(combinedAccumulatedData.encryptedLogsHash, mapFieldToNoir),
589
+ unencrypted_logs_hash: mapTuple(combinedAccumulatedData.unencryptedLogsHash, mapFieldToNoir),
590
+ encrypted_log_preimages_length: mapFieldToNoir(combinedAccumulatedData.encryptedLogPreimagesLength),
591
+ unencrypted_log_preimages_length: mapFieldToNoir(combinedAccumulatedData.unencryptedLogPreimagesLength),
592
+ new_contracts: mapTuple(combinedAccumulatedData.newContracts, mapNewContractDataToNoir),
593
+ public_data_update_requests: mapTuple(combinedAccumulatedData.publicDataUpdateRequests, mapPublicDataUpdateRequestToNoir),
594
+ public_data_reads: mapTuple(combinedAccumulatedData.publicDataReads, mapPublicDataReadToNoir),
595
+ };
596
+ }
597
+ /**
598
+ * Maps combined constant data from noir to the parsed type.
599
+ * @param combinedConstantData - The noir combined constant data.
600
+ * @returns The parsed combined constant data.
601
+ */
602
+ export function mapCombinedConstantDataFromNoir(combinedConstantData) {
603
+ return new CombinedConstantData(mapHeaderFromNoir(combinedConstantData.historical_header), mapTxContextFromNoir(combinedConstantData.tx_context));
604
+ }
605
+ /**
606
+ * Maps combined constant data to noir combined constant data.
607
+ * @param combinedConstantData - The combined constant data.
608
+ * @returns The noir combined constant data.
609
+ */
610
+ export function mapCombinedConstantDataToNoir(combinedConstantData) {
611
+ return {
612
+ historical_header: mapHeaderToNoir(combinedConstantData.historicalHeader),
613
+ tx_context: mapTxContextToNoir(combinedConstantData.txContext),
614
+ };
615
+ }
616
+ /**
617
+ * Maps the inputs to the private kernel init to the noir representation.
618
+ * @param privateKernelInputsInit - The inputs to the private kernel init.
619
+ * @returns The noir representation of those inputs.
620
+ */
621
+ export function mapPrivateKernelInitCircuitPrivateInputsToNoir(privateKernelInputsInit) {
622
+ return {
623
+ tx_request: mapTxRequestToNoir(privateKernelInputsInit.txRequest),
624
+ private_call: mapPrivateCallDataToNoir(privateKernelInputsInit.privateCall),
625
+ };
626
+ }
627
+ export function mapPublicKernelCircuitPublicInputsToNoir(inputs) {
628
+ return {
629
+ aggregation_object: {},
630
+ constants: mapCombinedConstantDataToNoir(inputs.constants),
631
+ end: mapCombinedAccumulatedDataToNoir(inputs.end),
632
+ end_non_revertible: mapAccumulatedMetaDataToNoir(inputs.endNonRevertibleData),
633
+ is_private: inputs.isPrivate,
634
+ };
635
+ }
636
+ /**
637
+ * Maps a public kernel inner data to a noir public kernel data.
638
+ * @param publicKernelData - The public kernel inner data.
639
+ * @returns The noir public kernel data.
640
+ */
641
+ export function mapPublicKernelDataToNoir(publicKernelData) {
642
+ return {
643
+ public_inputs: mapPublicKernelCircuitPublicInputsToNoir(publicKernelData.publicInputs),
644
+ proof: {},
645
+ vk: {},
646
+ vk_index: mapFieldToNoir(new Fr(publicKernelData.vkIndex)),
647
+ vk_path: mapTuple(publicKernelData.vkPath, mapFieldToNoir),
648
+ };
649
+ }
650
+ export function mapPrivateKernelInnerCircuitPublicInputsFromNoir(inputs) {
651
+ return new PrivateKernelInnerCircuitPublicInputs(AggregationObject.makeFake(), mapFieldFromNoir(inputs.max_non_revertible_side_effect_counter), mapCombinedAccumulatedDataFromNoir(inputs.end), mapCombinedConstantDataFromNoir(inputs.constants), inputs.is_private);
652
+ }
653
+ export function mapPrivateKernelInnerCircuitPublicInputsToNoir(inputs) {
654
+ return {
655
+ aggregation_object: {},
656
+ constants: mapCombinedConstantDataToNoir(inputs.constants),
657
+ end: mapCombinedAccumulatedDataToNoir(inputs.end),
658
+ max_non_revertible_side_effect_counter: mapFieldToNoir(inputs.maxNonRevertibleSideEffectCounter),
659
+ is_private: inputs.isPrivate,
660
+ };
661
+ }
662
+ /**
663
+ * Maps a private kernel inner data to a noir private kernel inner data.
664
+ * @param privateKernelInnerData - The private kernel inner data.
665
+ * @returns The noir private kernel inner data.
666
+ */
667
+ export function mapPrivateKernelInnerDataToNoir(privateKernelInnerData) {
668
+ return {
669
+ public_inputs: mapPrivateKernelInnerCircuitPublicInputsToNoir(privateKernelInnerData.publicInputs),
670
+ proof: {},
671
+ vk: {},
672
+ vk_index: mapFieldToNoir(new Fr(privateKernelInnerData.vkIndex)),
673
+ vk_path: mapTuple(privateKernelInnerData.vkPath, mapFieldToNoir),
674
+ };
675
+ }
676
+ /**
677
+ * Maps final accumulated data to noir final accumulated data.
678
+ * @param finalAccumulatedData - The final accumulated data.
679
+ * @returns The noir final accumulated data.
680
+ */
681
+ export function mapFinalAccumulatedDataToNoir(finalAccumulatedData) {
682
+ return {
683
+ new_commitments: mapTuple(finalAccumulatedData.newCommitments, mapSideEffectToNoir),
684
+ new_nullifiers: mapTuple(finalAccumulatedData.newNullifiers, mapSideEffectLinkedToNoir),
685
+ private_call_stack: mapTuple(finalAccumulatedData.privateCallStack, mapCallRequestToNoir),
686
+ public_call_stack: mapTuple(finalAccumulatedData.publicCallStack, mapCallRequestToNoir),
687
+ new_l2_to_l1_msgs: mapTuple(finalAccumulatedData.newL2ToL1Msgs, mapFieldToNoir),
688
+ encrypted_logs_hash: mapTuple(finalAccumulatedData.encryptedLogsHash, mapFieldToNoir),
689
+ unencrypted_logs_hash: mapTuple(finalAccumulatedData.unencryptedLogsHash, mapFieldToNoir),
690
+ encrypted_log_preimages_length: mapFieldToNoir(finalAccumulatedData.encryptedLogPreimagesLength),
691
+ unencrypted_log_preimages_length: mapFieldToNoir(finalAccumulatedData.unencryptedLogPreimagesLength),
692
+ new_contracts: mapTuple(finalAccumulatedData.newContracts, mapNewContractDataToNoir),
693
+ };
694
+ }
695
+ export function mapPrivateKernelTailCircuitPublicInputsFromNoir(inputs) {
696
+ return new PrivateKernelTailCircuitPublicInputs(AggregationObject.makeFake(), mapAccumulatedMetaDataFromNoir(inputs.end_non_revertible), mapFinalAccumulatedDataFromNoir(inputs.end), mapCombinedConstantDataFromNoir(inputs.constants), inputs.is_private);
697
+ }
698
+ export function mapPrivateKernelTailCircuitPublicInputsToNoir(inputs) {
699
+ return {
700
+ aggregation_object: {},
701
+ constants: mapCombinedConstantDataToNoir(inputs.constants),
702
+ end: mapFinalAccumulatedDataToNoir(inputs.end),
703
+ end_non_revertible: mapAccumulatedMetaDataToNoir(inputs.endNonRevertibleData),
704
+ is_private: inputs.isPrivate,
705
+ };
706
+ }
707
+ /**
708
+ * Maps the private inputs to the private kernel inner to the noir representation.
709
+ * @param privateKernelInnerCircuitPrivateInputs - The private inputs to the private kernel inner.
710
+ * @returns The noir representation of those inputs.
711
+ */
712
+ export function mapPrivateKernelInnerCircuitPrivateInputsToNoir(privateKernelInnerCircuitPrivateInputs) {
713
+ return {
714
+ previous_kernel: mapPrivateKernelInnerDataToNoir(privateKernelInnerCircuitPrivateInputs.previousKernel),
715
+ private_call: mapPrivateCallDataToNoir(privateKernelInnerCircuitPrivateInputs.privateCall),
716
+ };
717
+ }
718
+ /**
719
+ * Maps a private kernel inputs ordering from the circuits.js type to noir.
720
+ * @param inputs - The circuits.js private kernel inputs ordering.
721
+ * @returns The noir private kernel inputs ordering.
722
+ */
723
+ export function mapPrivateKernelTailCircuitPrivateInputsToNoir(inputs) {
724
+ return {
725
+ previous_kernel: mapPrivateKernelInnerDataToNoir(inputs.previousKernel),
726
+ sorted_new_commitments: mapTuple(inputs.sortedNewCommitments, mapSideEffectToNoir),
727
+ sorted_new_commitments_indexes: mapTuple(inputs.sortedNewCommitmentsIndexes, mapNumberToNoir),
728
+ read_commitment_hints: mapTuple(inputs.readCommitmentHints, mapFieldToNoir),
729
+ sorted_new_nullifiers: mapTuple(inputs.sortedNewNullifiers, mapSideEffectLinkedToNoir),
730
+ sorted_new_nullifiers_indexes: mapTuple(inputs.sortedNewNullifiersIndexes, mapNumberToNoir),
731
+ nullifier_commitment_hints: mapTuple(inputs.nullifierCommitmentHints, mapFieldToNoir),
732
+ master_nullifier_secret_keys: mapTuple(inputs.masterNullifierSecretKeys, mapGrumpkinPrivateKeyToNoir),
733
+ };
734
+ }
735
+ export function mapPublicKernelCircuitPrivateInputsToNoir(inputs) {
736
+ return {
737
+ previous_kernel: mapPublicKernelDataToNoir(inputs.previousKernel),
738
+ public_call: mapPublicCallDataToNoir(inputs.publicCall),
739
+ };
740
+ }
741
+ export function mapPublicKernelCircuitPublicInputsFromNoir(inputs) {
742
+ return new PublicKernelCircuitPublicInputs(AggregationObject.makeFake(), mapAccumulatedMetaDataFromNoir(inputs.end_non_revertible), mapCombinedAccumulatedDataFromNoir(inputs.end), mapCombinedConstantDataFromNoir(inputs.constants), inputs.is_private);
743
+ }
744
+ /**
745
+ * Maps a private kernel inputs final to noir.
746
+ * @param storageUpdateRequest - The storage update request.
747
+ * @returns The noir storage update request.
748
+ */
749
+ export function mapStorageUpdateRequestToNoir(storageUpdateRequest) {
750
+ return {
751
+ storage_slot: mapFieldToNoir(storageUpdateRequest.storageSlot),
752
+ new_value: mapFieldToNoir(storageUpdateRequest.newValue),
753
+ };
754
+ }
755
+ /**
756
+ * Maps global variables to the noir type.
757
+ * @param globalVariables - The global variables.
758
+ * @returns The noir global variables.
759
+ */
760
+ export function mapGlobalVariablesToNoir(globalVariables) {
761
+ return {
762
+ chain_id: mapFieldToNoir(globalVariables.chainId),
763
+ version: mapFieldToNoir(globalVariables.version),
764
+ block_number: mapFieldToNoir(globalVariables.blockNumber),
765
+ timestamp: mapFieldToNoir(globalVariables.timestamp),
766
+ coinbase: mapEthAddressToNoir(globalVariables.coinbase),
767
+ fee_recipient: mapAztecAddressToNoir(globalVariables.feeRecipient),
768
+ };
769
+ }
770
+ /**
771
+ * Maps a storage read to noir.
772
+ * @param storageRead - The storage read.
773
+ * @returns The noir storage read.
774
+ */
775
+ export function mapStorageReadToNoir(storageRead) {
776
+ return {
777
+ storage_slot: mapFieldToNoir(storageRead.storageSlot),
778
+ current_value: mapFieldToNoir(storageRead.currentValue),
779
+ };
780
+ }
781
+ /**
782
+ * Maps global variables from the noir type.
783
+ * @param globalVariables - The noir global variables.
784
+ * @returns The global variables.
785
+ */
786
+ export function mapGlobalVariablesFromNoir(globalVariables) {
787
+ return new GlobalVariables(mapFieldFromNoir(globalVariables.chain_id), mapFieldFromNoir(globalVariables.version), mapFieldFromNoir(globalVariables.block_number), mapFieldFromNoir(globalVariables.timestamp), mapEthAddressFromNoir(globalVariables.coinbase), mapAztecAddressFromNoir(globalVariables.fee_recipient));
788
+ }
789
+ /**
790
+ * Maps a constant rollup data to a noir constant rollup data.
791
+ * @param constantRollupData - The circuits.js constant rollup data.
792
+ * @returns The noir constant rollup data.
793
+ */
794
+ export function mapConstantRollupDataToNoir(constantRollupData) {
795
+ return {
796
+ last_archive: mapAppendOnlyTreeSnapshotToNoir(constantRollupData.lastArchive),
797
+ private_kernel_vk_tree_root: mapFieldToNoir(constantRollupData.privateKernelVkTreeRoot),
798
+ public_kernel_vk_tree_root: mapFieldToNoir(constantRollupData.publicKernelVkTreeRoot),
799
+ base_rollup_vk_hash: mapFieldToNoir(constantRollupData.baseRollupVkHash),
800
+ merge_rollup_vk_hash: mapFieldToNoir(constantRollupData.mergeRollupVkHash),
801
+ global_variables: mapGlobalVariablesToNoir(constantRollupData.globalVariables),
802
+ };
803
+ }
804
+ /**
805
+ * Maps a public circuit public inputs to noir.
806
+ * @param publicInputs - The public circuit public inputs.
807
+ * @returns The noir public circuit public inputs.
808
+ */
809
+ export function mapPublicCircuitPublicInputsToNoir(publicInputs) {
810
+ return {
811
+ call_context: mapCallContextToNoir(publicInputs.callContext),
812
+ args_hash: mapFieldToNoir(publicInputs.argsHash),
813
+ return_values: mapTuple(publicInputs.returnValues, mapFieldToNoir),
814
+ contract_storage_update_requests: mapTuple(publicInputs.contractStorageUpdateRequests, mapStorageUpdateRequestToNoir),
815
+ contract_storage_reads: mapTuple(publicInputs.contractStorageReads, mapStorageReadToNoir),
816
+ public_call_stack_hashes: mapTuple(publicInputs.publicCallStackHashes, mapFieldToNoir),
817
+ new_commitments: mapTuple(publicInputs.newCommitments, mapSideEffectToNoir),
818
+ new_nullifiers: mapTuple(publicInputs.newNullifiers, mapSideEffectLinkedToNoir),
819
+ new_l2_to_l1_msgs: mapTuple(publicInputs.newL2ToL1Msgs, mapFieldToNoir),
820
+ unencrypted_logs_hash: mapTuple(publicInputs.unencryptedLogsHash, mapFieldToNoir),
821
+ unencrypted_log_preimages_length: mapFieldToNoir(publicInputs.unencryptedLogPreimagesLength),
822
+ historical_header: mapHeaderToNoir(publicInputs.historicalHeader),
823
+ prover_address: mapAztecAddressToNoir(publicInputs.proverAddress),
824
+ };
825
+ }
826
+ /**
827
+ * Maps a constant rollup data from noir to the circuits.js type.
828
+ * @param constantRollupData - The noir constant rollup data.
829
+ * @returns The circuits.js constant rollup data.
830
+ */
831
+ export function mapConstantRollupDataFromNoir(constantRollupData) {
832
+ return new ConstantRollupData(mapAppendOnlyTreeSnapshotFromNoir(constantRollupData.last_archive), mapFieldFromNoir(constantRollupData.private_kernel_vk_tree_root), mapFieldFromNoir(constantRollupData.public_kernel_vk_tree_root), mapFieldFromNoir(constantRollupData.base_rollup_vk_hash), mapFieldFromNoir(constantRollupData.merge_rollup_vk_hash), mapGlobalVariablesFromNoir(constantRollupData.global_variables));
833
+ }
834
+ /**
835
+ * Maps a base or merge rollup public inputs to a noir base or merge rollup public inputs.
836
+ * @param baseOrMergeRollupPublicInputs - The base or merge rollup public inputs.
837
+ * @returns The noir base or merge rollup public inputs.
838
+ */
839
+ export function mapBaseOrMergeRollupPublicInputsToNoir(baseOrMergeRollupPublicInputs) {
840
+ return {
841
+ rollup_type: mapFieldToNoir(new Fr(baseOrMergeRollupPublicInputs.rollupType)),
842
+ height_in_block_tree: mapFieldToNoir(new Fr(baseOrMergeRollupPublicInputs.rollupSubtreeHeight)),
843
+ aggregation_object: {},
844
+ constants: mapConstantRollupDataToNoir(baseOrMergeRollupPublicInputs.constants),
845
+ start: mapPartialStateReferenceToNoir(baseOrMergeRollupPublicInputs.start),
846
+ end: mapPartialStateReferenceToNoir(baseOrMergeRollupPublicInputs.end),
847
+ calldata_hash: mapTuple(baseOrMergeRollupPublicInputs.calldataHash, mapFieldToNoir),
848
+ };
849
+ }
850
+ /**
851
+ * Maps a public call stack item to noir.
852
+ * @param publicCallStackItem - The public call stack item.
853
+ * @returns The noir public call stack item.
854
+ */
855
+ export function mapPublicCallStackItemToNoir(publicCallStackItem) {
856
+ return {
857
+ contract_address: mapAztecAddressToNoir(publicCallStackItem.contractAddress),
858
+ public_inputs: mapPublicCircuitPublicInputsToNoir(publicCallStackItem.publicInputs),
859
+ is_execution_request: publicCallStackItem.isExecutionRequest,
860
+ function_data: mapFunctionDataToNoir(publicCallStackItem.functionData),
861
+ };
862
+ }
863
+ /**
864
+ * Maps a public call data to noir.
865
+ * @param publicCall - The public call data.
866
+ * @returns The noir public call data.
867
+ */
868
+ export function mapPublicCallDataToNoir(publicCall) {
869
+ return {
870
+ call_stack_item: mapPublicCallStackItemToNoir(publicCall.callStackItem),
871
+ public_call_stack: mapTuple(publicCall.publicCallStack, mapCallRequestToNoir),
872
+ proof: {},
873
+ portal_contract_address: mapEthAddressToNoir(EthAddress.fromField(publicCall.portalContractAddress)),
874
+ bytecode_hash: mapFieldToNoir(publicCall.bytecodeHash),
875
+ };
876
+ }
877
+ /**
878
+ * Maps a base or merge rollup public inputs from noir to the circuits.js type.
879
+ * @param baseOrMergeRollupPublicInputs - The noir base or merge rollup public inputs.
880
+ * @returns The circuits.js base or merge rollup public inputs.
881
+ */
882
+ export function mapBaseOrMergeRollupPublicInputsFromNoir(baseOrMergeRollupPublicInputs) {
883
+ return new BaseOrMergeRollupPublicInputs(mapNumberFromNoir(baseOrMergeRollupPublicInputs.rollup_type), mapFieldFromNoir(baseOrMergeRollupPublicInputs.height_in_block_tree), AggregationObject.makeFake(), mapConstantRollupDataFromNoir(baseOrMergeRollupPublicInputs.constants), mapPartialStateReferenceFromNoir(baseOrMergeRollupPublicInputs.start), mapPartialStateReferenceFromNoir(baseOrMergeRollupPublicInputs.end), mapTupleFromNoir(baseOrMergeRollupPublicInputs.calldata_hash, 2, mapFieldFromNoir));
884
+ }
885
+ /**
886
+ * Maps a previous rollup data from the circuits.js type to noir.
887
+ * @param previousRollupData - The circuits.js previous rollup data.
888
+ * @returns The noir previous rollup data.
889
+ */
890
+ export function mapPreviousRollupDataToNoir(previousRollupData) {
891
+ return {
892
+ base_or_merge_rollup_public_inputs: mapBaseOrMergeRollupPublicInputsToNoir(previousRollupData.baseOrMergeRollupPublicInputs),
893
+ proof: {},
894
+ vk: {},
895
+ vk_index: mapFieldToNoir(new Fr(previousRollupData.vkIndex)),
896
+ vk_sibling_path: {
897
+ leaf_index: mapFieldToNoir(new Fr(previousRollupData.vkSiblingPath.leafIndex)),
898
+ sibling_path: mapTuple(previousRollupData.vkSiblingPath.siblingPath, mapFieldToNoir),
899
+ },
900
+ };
901
+ }
902
+ /**
903
+ * Maps a AOT snapshot to noir.
904
+ * @param snapshot - The circuits.js AOT snapshot.
905
+ * @returns The noir AOT snapshot.
906
+ */
907
+ export function mapAppendOnlyTreeSnapshotFromNoir(snapshot) {
908
+ return new AppendOnlyTreeSnapshot(mapFieldFromNoir(snapshot.root), mapNumberFromNoir(snapshot.next_available_leaf_index));
909
+ }
910
+ /**
911
+ * Maps a AOT snapshot from noir to the circuits.js type.
912
+ * @param snapshot - The noir AOT snapshot.
913
+ * @returns The circuits.js AOT snapshot.
914
+ */
915
+ export function mapAppendOnlyTreeSnapshotToNoir(snapshot) {
916
+ return {
917
+ root: mapFieldToNoir(snapshot.root),
918
+ next_available_leaf_index: mapFieldToNoir(new Fr(snapshot.nextAvailableLeafIndex)),
919
+ };
920
+ }
921
+ /**
922
+ * Naos the root rollup inputs to noir.
923
+ * @param rootRollupInputs - The circuits.js root rollup inputs.
924
+ * @returns The noir root rollup inputs.
925
+ */
926
+ export function mapRootRollupInputsToNoir(rootRollupInputs) {
927
+ return {
928
+ previous_rollup_data: mapTuple(rootRollupInputs.previousRollupData, mapPreviousRollupDataToNoir),
929
+ new_l1_to_l2_messages: mapTuple(rootRollupInputs.newL1ToL2Messages, mapFieldToNoir),
930
+ new_l1_to_l2_message_tree_root_sibling_path: mapTuple(rootRollupInputs.newL1ToL2MessageTreeRootSiblingPath, mapFieldToNoir),
931
+ start_l1_to_l2_message_tree_snapshot: mapAppendOnlyTreeSnapshotToNoir(rootRollupInputs.startL1ToL2MessageTreeSnapshot),
932
+ start_archive_snapshot: mapAppendOnlyTreeSnapshotToNoir(rootRollupInputs.startArchiveSnapshot),
933
+ new_archive_sibling_path: mapTuple(rootRollupInputs.newArchiveSiblingPath, mapFieldToNoir),
934
+ };
935
+ }
936
+ /**
937
+ * Maps a root rollup public inputs from noir.
938
+ * @param rootRollupPublicInputs - The noir root rollup public inputs.
939
+ * @returns The circuits.js root rollup public inputs.
940
+ */
941
+ export function mapRootRollupPublicInputsFromNoir(rootRollupPublicInputs) {
942
+ return new RootRollupPublicInputs(AggregationObject.makeFake(), mapAppendOnlyTreeSnapshotFromNoir(rootRollupPublicInputs.archive), mapHeaderFromNoir(rootRollupPublicInputs.header), mapTupleFromNoir(rootRollupPublicInputs.l1_to_l2_messages_hash, 2, mapFieldFromNoir));
943
+ }
944
+ /**
945
+ * Maps header to Noir
946
+ * @param header - The header.
947
+ * @returns Header.
948
+ */
949
+ export function mapHeaderToNoir(header) {
950
+ return {
951
+ last_archive: mapAppendOnlyTreeSnapshotToNoir(header.lastArchive),
952
+ body_hash: mapSha256HashToNoir(header.bodyHash),
953
+ state: mapStateReferenceToNoir(header.state),
954
+ global_variables: mapGlobalVariablesToNoir(header.globalVariables),
955
+ };
956
+ }
957
+ /**
958
+ * Maps header from Noir.
959
+ * @param header - The header.
960
+ * @returns Header.
961
+ */
962
+ export function mapHeaderFromNoir(header) {
963
+ return new Header(mapAppendOnlyTreeSnapshotFromNoir(header.last_archive), mapSha256HashFromNoir(header.body_hash), mapStateReferenceFromNoir(header.state), mapGlobalVariablesFromNoir(header.global_variables));
964
+ }
965
+ /**
966
+ * Maps state reference to Noir.
967
+ * @param stateReference - The state reference.
968
+ * @returns Noir representation of state reference.
969
+ */
970
+ export function mapStateReferenceToNoir(stateReference) {
971
+ return {
972
+ l1_to_l2_message_tree: mapAppendOnlyTreeSnapshotToNoir(stateReference.l1ToL2MessageTree),
973
+ partial: mapPartialStateReferenceToNoir(stateReference.partial),
974
+ };
975
+ }
976
+ /**
977
+ * Maps state reference from Noir.
978
+ * @param stateReference - The state reference.
979
+ * @returns State reference
980
+ */
981
+ export function mapStateReferenceFromNoir(stateReference) {
982
+ return new StateReference(mapAppendOnlyTreeSnapshotFromNoir(stateReference.l1_to_l2_message_tree), mapPartialStateReferenceFromNoir(stateReference.partial));
983
+ }
984
+ /**
985
+ * Maps partial state reference from Noir.
986
+ * @param partialStateReference - The state reference.
987
+ * @returns Partial state reference
988
+ */
989
+ export function mapPartialStateReferenceFromNoir(partialStateReference) {
990
+ return new PartialStateReference(mapAppendOnlyTreeSnapshotFromNoir(partialStateReference.note_hash_tree), mapAppendOnlyTreeSnapshotFromNoir(partialStateReference.nullifier_tree), mapAppendOnlyTreeSnapshotFromNoir(partialStateReference.contract_tree), mapAppendOnlyTreeSnapshotFromNoir(partialStateReference.public_data_tree));
991
+ }
992
+ /**
993
+ * Maps the merge rollup inputs to noir.
994
+ * @param mergeRollupInputs - The circuits.js merge rollup inputs.
995
+ * @returns The noir merge rollup inputs.
996
+ */
997
+ export function mapMergeRollupInputsToNoir(mergeRollupInputs) {
998
+ return {
999
+ previous_rollup_data: mapTuple(mergeRollupInputs.previousRollupData, mapPreviousRollupDataToNoir),
1000
+ };
1001
+ }
1002
+ /**
1003
+ * Maps a nullifier leaf preimage to noir
1004
+ * @param nullifierLeafPreimage - The nullifier leaf preimage.
1005
+ * @returns The noir nullifier leaf preimage.
1006
+ */
1007
+ export function mapNullifierLeafPreimageToNoir(nullifierLeafPreimage) {
1008
+ return {
1009
+ nullifier: mapFieldToNoir(nullifierLeafPreimage.nullifier),
1010
+ next_nullifier: mapFieldToNoir(nullifierLeafPreimage.nextNullifier),
1011
+ next_index: mapNumberToNoir(Number(nullifierLeafPreimage.nextIndex)),
1012
+ };
1013
+ }
1014
+ /**
1015
+ * Maps a nullifier membership witness to noir.
1016
+ * @param membershipWitness - The nullifier membership witness.
1017
+ * @returns The noir nullifier membership witness.
1018
+ */
1019
+ export function mapNullifierMembershipWitnessToNoir(membershipWitness) {
1020
+ return {
1021
+ leaf_index: membershipWitness.leafIndex.toString(),
1022
+ sibling_path: mapTuple(membershipWitness.siblingPath, mapFieldToNoir),
1023
+ };
1024
+ }
1025
+ /**
1026
+ * Maps a membership witness of the public data tree to noir.
1027
+ */
1028
+ export function mapPublicDataMembershipWitnessToNoir(membershipWitness) {
1029
+ return {
1030
+ leaf_index: membershipWitness.leafIndex.toString(),
1031
+ sibling_path: mapTuple(membershipWitness.siblingPath, mapFieldToNoir),
1032
+ };
1033
+ }
1034
+ /**
1035
+ * Maps a membership witness of the blocks tree to noir.
1036
+ * @param membershipWitness - The membership witness.
1037
+ * @returns The noir membership witness.
1038
+ */
1039
+ export function mapArchiveRootMembershipWitnessToNoir(membershipWitness) {
1040
+ return {
1041
+ leaf_index: membershipWitness.leafIndex.toString(),
1042
+ sibling_path: mapTuple(membershipWitness.siblingPath, mapFieldToNoir),
1043
+ };
1044
+ }
1045
+ /**
1046
+ * Maps a leaf of the public data tree to noir.
1047
+ */
1048
+ export function mapPublicDataTreeLeafToNoir(leaf) {
1049
+ return {
1050
+ slot: mapFieldToNoir(leaf.slot),
1051
+ value: mapFieldToNoir(leaf.value),
1052
+ };
1053
+ }
1054
+ /**
1055
+ * Maps a leaf preimage of the public data tree to noir.
1056
+ */
1057
+ export function mapPublicDataTreePreimageToNoir(preimage) {
1058
+ return {
1059
+ slot: mapFieldToNoir(preimage.slot),
1060
+ value: mapFieldToNoir(preimage.value),
1061
+ next_slot: mapFieldToNoir(preimage.nextSlot),
1062
+ next_index: mapNumberToNoir(Number(preimage.nextIndex)),
1063
+ };
1064
+ }
1065
+ /**
1066
+ * Maps a partial state reference to a noir partial state reference.
1067
+ * @param partialStateReference - The partial state reference.
1068
+ * @returns The noir partial state reference.
1069
+ */
1070
+ export function mapPartialStateReferenceToNoir(partialStateReference) {
1071
+ return {
1072
+ note_hash_tree: mapAppendOnlyTreeSnapshotToNoir(partialStateReference.noteHashTree),
1073
+ nullifier_tree: mapAppendOnlyTreeSnapshotToNoir(partialStateReference.nullifierTree),
1074
+ contract_tree: mapAppendOnlyTreeSnapshotToNoir(partialStateReference.contractTree),
1075
+ public_data_tree: mapAppendOnlyTreeSnapshotToNoir(partialStateReference.publicDataTree),
1076
+ };
1077
+ }
1078
+ /**
1079
+ * Maps state diff hints to a noir state diff hints.
1080
+ * @param hints - The state diff hints.
1081
+ * @returns The noir state diff hints.
1082
+ */
1083
+ export function mapStateDiffHintsToNoir(hints) {
1084
+ return {
1085
+ nullifier_predecessor_preimages: mapTuple(hints.nullifierPredecessorPreimages, mapNullifierLeafPreimageToNoir),
1086
+ nullifier_predecessor_membership_witnesses: mapTuple(hints.nullifierPredecessorMembershipWitnesses, mapNullifierMembershipWitnessToNoir),
1087
+ sorted_nullifiers: mapTuple(hints.sortedNullifiers, mapFieldToNoir),
1088
+ sorted_nullifier_indexes: mapTuple(hints.sortedNullifierIndexes, (index) => mapNumberToNoir(index)),
1089
+ note_hash_subtree_sibling_path: mapTuple(hints.noteHashSubtreeSiblingPath, mapFieldToNoir),
1090
+ nullifier_subtree_sibling_path: mapTuple(hints.nullifierSubtreeSiblingPath, mapFieldToNoir),
1091
+ contract_subtree_sibling_path: mapTuple(hints.contractSubtreeSiblingPath, mapFieldToNoir),
1092
+ public_data_sibling_path: mapTuple(hints.publicDataSiblingPath, mapFieldToNoir),
1093
+ };
1094
+ }
1095
+ /**
1096
+ * Maps the inputs to the base rollup to noir.
1097
+ * @param input - The circuits.js base rollup inputs.
1098
+ * @returns The noir base rollup inputs.
1099
+ */
1100
+ export function mapBaseRollupInputsToNoir(inputs) {
1101
+ return {
1102
+ kernel_data: mapPublicKernelDataToNoir(inputs.kernelData),
1103
+ start: mapPartialStateReferenceToNoir(inputs.start),
1104
+ state_diff_hints: mapStateDiffHintsToNoir(inputs.stateDiffHints),
1105
+ sorted_public_data_writes: mapTuple(inputs.sortedPublicDataWrites, mapPublicDataTreeLeafToNoir),
1106
+ sorted_public_data_writes_indexes: mapTuple(inputs.sortedPublicDataWritesIndexes, mapNumberToNoir),
1107
+ low_public_data_writes_preimages: mapTuple(inputs.lowPublicDataWritesPreimages, mapPublicDataTreePreimageToNoir),
1108
+ low_public_data_writes_witnesses: mapTuple(inputs.lowPublicDataWritesMembershipWitnesses, mapPublicDataMembershipWitnessToNoir),
1109
+ public_data_reads_preimages: mapTuple(inputs.publicDataReadsPreimages, mapPublicDataTreePreimageToNoir),
1110
+ public_data_reads_witnesses: mapTuple(inputs.publicDataReadsMembershipWitnesses, mapPublicDataMembershipWitnessToNoir),
1111
+ archive_root_membership_witness: mapArchiveRootMembershipWitnessToNoir(inputs.archiveRootMembershipWitness),
1112
+ constants: mapConstantRollupDataToNoir(inputs.constants),
1113
+ };
1114
+ }
1115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9jb252ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVfY29udmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLDZCQUE2QixFQUU3QixXQUFXLEVBQ1gsV0FBVyxFQUNYLGFBQWEsRUFDYix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFHdEIsVUFBVSxFQUVWLG9CQUFvQixFQUNwQixFQUFFLEVBQ0YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixlQUFlLEVBRWYsY0FBYyxFQUNkLE1BQU0sRUFDTiwwQkFBMEIsRUFDMUIsK0JBQStCLEVBQy9CLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDhCQUE4QixFQUM5Qiw0Q0FBNEMsRUFDNUMsb0NBQW9DLEVBQ3BDLG1DQUFtQyxFQUNuQyx3Q0FBd0MsRUFDeEMsNEJBQTRCLEVBQzVCLHNDQUFzQyxFQUN0Qyx3QkFBd0IsRUFJeEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZiw2QkFBNkIsRUFDN0Isb0NBQW9DLEVBR3BDLHFCQUFxQixFQUNyQixLQUFLLEVBT0wscUNBQXFDLEVBR3JDLG9DQUFvQyxFQUlwQyxjQUFjLEVBR2QsdUJBQXVCLEVBRXZCLCtCQUErQixFQUkvQixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLDBCQUEwQixFQUUxQixjQUFjLEVBQ2QsU0FBUyxHQUVWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFTLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFnRnRGLDhCQUE4QjtBQUU5Qjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFTO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FB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