@aztec/protocol-contracts 0.23.0 → 0.26.1

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.
@@ -1,2605 +1 @@
1
- {
2
- "noir_version": "0.23.0+9a70040211d205f472aa31924649c2fef999eb49",
3
- "name": "ContractClassRegisterer",
4
- "functions": [
5
- {
6
- "name": "constructor",
7
- "function_type": "Secret",
8
- "is_internal": false,
9
- "abi": {
10
- "parameters": [
11
- {
12
- "name": "inputs",
13
- "type": {
14
- "kind": "struct",
15
- "path": "aztec::abi::PrivateContextInputs",
16
- "fields": [
17
- {
18
- "name": "call_context",
19
- "type": {
20
- "kind": "struct",
21
- "path": "aztec::protocol_types::abis::call_context::CallContext",
22
- "fields": [
23
- {
24
- "name": "msg_sender",
25
- "type": {
26
- "kind": "struct",
27
- "path": "aztec::protocol_types::address::AztecAddress",
28
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
29
- }
30
- },
31
- {
32
- "name": "storage_contract_address",
33
- "type": {
34
- "kind": "struct",
35
- "path": "aztec::protocol_types::address::AztecAddress",
36
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
37
- }
38
- },
39
- {
40
- "name": "portal_contract_address",
41
- "type": {
42
- "kind": "struct",
43
- "path": "aztec::protocol_types::address::EthAddress",
44
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
45
- }
46
- },
47
- {
48
- "name": "function_selector",
49
- "type": {
50
- "kind": "struct",
51
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
52
- "fields": [
53
- { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
54
- ]
55
- }
56
- },
57
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
58
- { "name": "is_static_call", "type": { "kind": "boolean" } },
59
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
60
- {
61
- "name": "start_side_effect_counter",
62
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
63
- }
64
- ]
65
- }
66
- },
67
- {
68
- "name": "historical_header",
69
- "type": {
70
- "kind": "struct",
71
- "path": "aztec::protocol_types::header::Header",
72
- "fields": [
73
- {
74
- "name": "last_archive",
75
- "type": {
76
- "kind": "struct",
77
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
78
- "fields": [
79
- { "name": "root", "type": { "kind": "field" } },
80
- {
81
- "name": "next_available_leaf_index",
82
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
83
- }
84
- ]
85
- }
86
- },
87
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
88
- {
89
- "name": "state",
90
- "type": {
91
- "kind": "struct",
92
- "path": "aztec::protocol_types::state_reference::StateReference",
93
- "fields": [
94
- {
95
- "name": "l1_to_l2_message_tree",
96
- "type": {
97
- "kind": "struct",
98
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
99
- "fields": [
100
- { "name": "root", "type": { "kind": "field" } },
101
- {
102
- "name": "next_available_leaf_index",
103
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
104
- }
105
- ]
106
- }
107
- },
108
- {
109
- "name": "partial",
110
- "type": {
111
- "kind": "struct",
112
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
113
- "fields": [
114
- {
115
- "name": "note_hash_tree",
116
- "type": {
117
- "kind": "struct",
118
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
119
- "fields": [
120
- { "name": "root", "type": { "kind": "field" } },
121
- {
122
- "name": "next_available_leaf_index",
123
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
124
- }
125
- ]
126
- }
127
- },
128
- {
129
- "name": "nullifier_tree",
130
- "type": {
131
- "kind": "struct",
132
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
133
- "fields": [
134
- { "name": "root", "type": { "kind": "field" } },
135
- {
136
- "name": "next_available_leaf_index",
137
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
138
- }
139
- ]
140
- }
141
- },
142
- {
143
- "name": "contract_tree",
144
- "type": {
145
- "kind": "struct",
146
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
147
- "fields": [
148
- { "name": "root", "type": { "kind": "field" } },
149
- {
150
- "name": "next_available_leaf_index",
151
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
152
- }
153
- ]
154
- }
155
- },
156
- {
157
- "name": "public_data_tree",
158
- "type": {
159
- "kind": "struct",
160
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
161
- "fields": [
162
- { "name": "root", "type": { "kind": "field" } },
163
- {
164
- "name": "next_available_leaf_index",
165
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
166
- }
167
- ]
168
- }
169
- }
170
- ]
171
- }
172
- }
173
- ]
174
- }
175
- },
176
- {
177
- "name": "global_variables",
178
- "type": {
179
- "kind": "struct",
180
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
181
- "fields": [
182
- { "name": "chain_id", "type": { "kind": "field" } },
183
- { "name": "version", "type": { "kind": "field" } },
184
- { "name": "block_number", "type": { "kind": "field" } },
185
- { "name": "timestamp", "type": { "kind": "field" } },
186
- {
187
- "name": "coinbase",
188
- "type": {
189
- "kind": "struct",
190
- "path": "aztec::protocol_types::address::EthAddress",
191
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
192
- }
193
- },
194
- {
195
- "name": "fee_recipient",
196
- "type": {
197
- "kind": "struct",
198
- "path": "aztec::protocol_types::address::AztecAddress",
199
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
200
- }
201
- }
202
- ]
203
- }
204
- }
205
- ]
206
- }
207
- },
208
- {
209
- "name": "contract_deployment_data",
210
- "type": {
211
- "kind": "struct",
212
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
213
- "fields": [
214
- {
215
- "name": "public_key",
216
- "type": {
217
- "kind": "struct",
218
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
219
- "fields": [
220
- { "name": "x", "type": { "kind": "field" } },
221
- { "name": "y", "type": { "kind": "field" } }
222
- ]
223
- }
224
- },
225
- { "name": "initialization_hash", "type": { "kind": "field" } },
226
- {
227
- "name": "contract_class_id",
228
- "type": {
229
- "kind": "struct",
230
- "path": "aztec::protocol_types::contract_class::ContractClassId",
231
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
232
- }
233
- },
234
- { "name": "contract_address_salt", "type": { "kind": "field" } },
235
- {
236
- "name": "portal_contract_address",
237
- "type": {
238
- "kind": "struct",
239
- "path": "aztec::protocol_types::address::EthAddress",
240
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
241
- }
242
- }
243
- ]
244
- }
245
- },
246
- {
247
- "name": "private_global_variables",
248
- "type": {
249
- "kind": "struct",
250
- "path": "aztec::abi::PrivateGlobalVariables",
251
- "fields": [
252
- { "name": "chain_id", "type": { "kind": "field" } },
253
- { "name": "version", "type": { "kind": "field" } }
254
- ]
255
- }
256
- }
257
- ]
258
- },
259
- "visibility": "private"
260
- }
261
- ],
262
- "param_witnesses": { "inputs": [{ "start": 0, "end": 36 }] },
263
- "return_type": {
264
- "abi_type": {
265
- "kind": "struct",
266
- "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
267
- "fields": [
268
- {
269
- "name": "call_context",
270
- "type": {
271
- "kind": "struct",
272
- "path": "aztec::protocol_types::abis::call_context::CallContext",
273
- "fields": [
274
- {
275
- "name": "msg_sender",
276
- "type": {
277
- "kind": "struct",
278
- "path": "aztec::protocol_types::address::AztecAddress",
279
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
280
- }
281
- },
282
- {
283
- "name": "storage_contract_address",
284
- "type": {
285
- "kind": "struct",
286
- "path": "aztec::protocol_types::address::AztecAddress",
287
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
288
- }
289
- },
290
- {
291
- "name": "portal_contract_address",
292
- "type": {
293
- "kind": "struct",
294
- "path": "aztec::protocol_types::address::EthAddress",
295
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
296
- }
297
- },
298
- {
299
- "name": "function_selector",
300
- "type": {
301
- "kind": "struct",
302
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
303
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
304
- }
305
- },
306
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
307
- { "name": "is_static_call", "type": { "kind": "boolean" } },
308
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
309
- {
310
- "name": "start_side_effect_counter",
311
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
312
- }
313
- ]
314
- }
315
- },
316
- { "name": "args_hash", "type": { "kind": "field" } },
317
- { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
318
- { "name": "meta_hwm", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
319
- {
320
- "name": "read_requests",
321
- "type": {
322
- "kind": "array",
323
- "length": 32,
324
- "type": {
325
- "kind": "struct",
326
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
327
- "fields": [
328
- { "name": "value", "type": { "kind": "field" } },
329
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
330
- ]
331
- }
332
- }
333
- },
334
- {
335
- "name": "nullifier_key_validation_requests",
336
- "type": {
337
- "kind": "array",
338
- "length": 1,
339
- "type": {
340
- "kind": "struct",
341
- "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
342
- "fields": [
343
- {
344
- "name": "public_key",
345
- "type": {
346
- "kind": "struct",
347
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
348
- "fields": [
349
- { "name": "x", "type": { "kind": "field" } },
350
- { "name": "y", "type": { "kind": "field" } }
351
- ]
352
- }
353
- },
354
- {
355
- "name": "secret_key",
356
- "type": {
357
- "kind": "struct",
358
- "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
359
- "fields": [
360
- { "name": "high", "type": { "kind": "field" } },
361
- { "name": "low", "type": { "kind": "field" } }
362
- ]
363
- }
364
- }
365
- ]
366
- }
367
- }
368
- },
369
- {
370
- "name": "new_commitments",
371
- "type": {
372
- "kind": "array",
373
- "length": 16,
374
- "type": {
375
- "kind": "struct",
376
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
377
- "fields": [
378
- { "name": "value", "type": { "kind": "field" } },
379
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
380
- ]
381
- }
382
- }
383
- },
384
- {
385
- "name": "new_nullifiers",
386
- "type": {
387
- "kind": "array",
388
- "length": 16,
389
- "type": {
390
- "kind": "struct",
391
- "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
392
- "fields": [
393
- { "name": "value", "type": { "kind": "field" } },
394
- { "name": "note_hash", "type": { "kind": "field" } },
395
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
396
- ]
397
- }
398
- }
399
- },
400
- {
401
- "name": "private_call_stack_hashes",
402
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
403
- },
404
- {
405
- "name": "public_call_stack_hashes",
406
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
407
- },
408
- { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
409
- { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
410
- { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
411
- {
412
- "name": "unencrypted_logs_hash",
413
- "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
414
- },
415
- { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
416
- { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
417
- {
418
- "name": "historical_header",
419
- "type": {
420
- "kind": "struct",
421
- "path": "aztec::protocol_types::header::Header",
422
- "fields": [
423
- {
424
- "name": "last_archive",
425
- "type": {
426
- "kind": "struct",
427
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
428
- "fields": [
429
- { "name": "root", "type": { "kind": "field" } },
430
- {
431
- "name": "next_available_leaf_index",
432
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
433
- }
434
- ]
435
- }
436
- },
437
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
438
- {
439
- "name": "state",
440
- "type": {
441
- "kind": "struct",
442
- "path": "aztec::protocol_types::state_reference::StateReference",
443
- "fields": [
444
- {
445
- "name": "l1_to_l2_message_tree",
446
- "type": {
447
- "kind": "struct",
448
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
449
- "fields": [
450
- { "name": "root", "type": { "kind": "field" } },
451
- {
452
- "name": "next_available_leaf_index",
453
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
454
- }
455
- ]
456
- }
457
- },
458
- {
459
- "name": "partial",
460
- "type": {
461
- "kind": "struct",
462
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
463
- "fields": [
464
- {
465
- "name": "note_hash_tree",
466
- "type": {
467
- "kind": "struct",
468
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
469
- "fields": [
470
- { "name": "root", "type": { "kind": "field" } },
471
- {
472
- "name": "next_available_leaf_index",
473
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
474
- }
475
- ]
476
- }
477
- },
478
- {
479
- "name": "nullifier_tree",
480
- "type": {
481
- "kind": "struct",
482
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
483
- "fields": [
484
- { "name": "root", "type": { "kind": "field" } },
485
- {
486
- "name": "next_available_leaf_index",
487
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
488
- }
489
- ]
490
- }
491
- },
492
- {
493
- "name": "contract_tree",
494
- "type": {
495
- "kind": "struct",
496
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
497
- "fields": [
498
- { "name": "root", "type": { "kind": "field" } },
499
- {
500
- "name": "next_available_leaf_index",
501
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
502
- }
503
- ]
504
- }
505
- },
506
- {
507
- "name": "public_data_tree",
508
- "type": {
509
- "kind": "struct",
510
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
511
- "fields": [
512
- { "name": "root", "type": { "kind": "field" } },
513
- {
514
- "name": "next_available_leaf_index",
515
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
516
- }
517
- ]
518
- }
519
- }
520
- ]
521
- }
522
- }
523
- ]
524
- }
525
- },
526
- {
527
- "name": "global_variables",
528
- "type": {
529
- "kind": "struct",
530
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
531
- "fields": [
532
- { "name": "chain_id", "type": { "kind": "field" } },
533
- { "name": "version", "type": { "kind": "field" } },
534
- { "name": "block_number", "type": { "kind": "field" } },
535
- { "name": "timestamp", "type": { "kind": "field" } },
536
- {
537
- "name": "coinbase",
538
- "type": {
539
- "kind": "struct",
540
- "path": "aztec::protocol_types::address::EthAddress",
541
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
542
- }
543
- },
544
- {
545
- "name": "fee_recipient",
546
- "type": {
547
- "kind": "struct",
548
- "path": "aztec::protocol_types::address::AztecAddress",
549
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
550
- }
551
- }
552
- ]
553
- }
554
- }
555
- ]
556
- }
557
- },
558
- {
559
- "name": "contract_deployment_data",
560
- "type": {
561
- "kind": "struct",
562
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
563
- "fields": [
564
- {
565
- "name": "public_key",
566
- "type": {
567
- "kind": "struct",
568
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
569
- "fields": [
570
- { "name": "x", "type": { "kind": "field" } },
571
- { "name": "y", "type": { "kind": "field" } }
572
- ]
573
- }
574
- },
575
- { "name": "initialization_hash", "type": { "kind": "field" } },
576
- {
577
- "name": "contract_class_id",
578
- "type": {
579
- "kind": "struct",
580
- "path": "aztec::protocol_types::contract_class::ContractClassId",
581
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
582
- }
583
- },
584
- { "name": "contract_address_salt", "type": { "kind": "field" } },
585
- {
586
- "name": "portal_contract_address",
587
- "type": {
588
- "kind": "struct",
589
- "path": "aztec::protocol_types::address::EthAddress",
590
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
591
- }
592
- }
593
- ]
594
- }
595
- },
596
- { "name": "chain_id", "type": { "kind": "field" } },
597
- { "name": "version", "type": { "kind": "field" } }
598
- ]
599
- },
600
- "visibility": "public"
601
- },
602
- "return_witnesses": [
603
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
604
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
605
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
606
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
607
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
608
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
609
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
610
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
611
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243
612
- ]
613
- },
614
- "bytecode": "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",
615
- "debug_symbols": "q1bKyU9OLMnMzytWsqqurQUA"
616
- },
617
- {
618
- "name": "broadcast_unconstrained_function",
619
- "function_type": "Secret",
620
- "is_internal": false,
621
- "abi": {
622
- "parameters": [
623
- {
624
- "name": "inputs",
625
- "type": {
626
- "kind": "struct",
627
- "path": "aztec::abi::PrivateContextInputs",
628
- "fields": [
629
- {
630
- "name": "call_context",
631
- "type": {
632
- "kind": "struct",
633
- "path": "aztec::protocol_types::abis::call_context::CallContext",
634
- "fields": [
635
- {
636
- "name": "msg_sender",
637
- "type": {
638
- "kind": "struct",
639
- "path": "aztec::protocol_types::address::AztecAddress",
640
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
641
- }
642
- },
643
- {
644
- "name": "storage_contract_address",
645
- "type": {
646
- "kind": "struct",
647
- "path": "aztec::protocol_types::address::AztecAddress",
648
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
649
- }
650
- },
651
- {
652
- "name": "portal_contract_address",
653
- "type": {
654
- "kind": "struct",
655
- "path": "aztec::protocol_types::address::EthAddress",
656
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
657
- }
658
- },
659
- {
660
- "name": "function_selector",
661
- "type": {
662
- "kind": "struct",
663
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
664
- "fields": [
665
- { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
666
- ]
667
- }
668
- },
669
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
670
- { "name": "is_static_call", "type": { "kind": "boolean" } },
671
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
672
- {
673
- "name": "start_side_effect_counter",
674
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
675
- }
676
- ]
677
- }
678
- },
679
- {
680
- "name": "historical_header",
681
- "type": {
682
- "kind": "struct",
683
- "path": "aztec::protocol_types::header::Header",
684
- "fields": [
685
- {
686
- "name": "last_archive",
687
- "type": {
688
- "kind": "struct",
689
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
690
- "fields": [
691
- { "name": "root", "type": { "kind": "field" } },
692
- {
693
- "name": "next_available_leaf_index",
694
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
695
- }
696
- ]
697
- }
698
- },
699
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
700
- {
701
- "name": "state",
702
- "type": {
703
- "kind": "struct",
704
- "path": "aztec::protocol_types::state_reference::StateReference",
705
- "fields": [
706
- {
707
- "name": "l1_to_l2_message_tree",
708
- "type": {
709
- "kind": "struct",
710
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
711
- "fields": [
712
- { "name": "root", "type": { "kind": "field" } },
713
- {
714
- "name": "next_available_leaf_index",
715
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
716
- }
717
- ]
718
- }
719
- },
720
- {
721
- "name": "partial",
722
- "type": {
723
- "kind": "struct",
724
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
725
- "fields": [
726
- {
727
- "name": "note_hash_tree",
728
- "type": {
729
- "kind": "struct",
730
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
731
- "fields": [
732
- { "name": "root", "type": { "kind": "field" } },
733
- {
734
- "name": "next_available_leaf_index",
735
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
736
- }
737
- ]
738
- }
739
- },
740
- {
741
- "name": "nullifier_tree",
742
- "type": {
743
- "kind": "struct",
744
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
745
- "fields": [
746
- { "name": "root", "type": { "kind": "field" } },
747
- {
748
- "name": "next_available_leaf_index",
749
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
750
- }
751
- ]
752
- }
753
- },
754
- {
755
- "name": "contract_tree",
756
- "type": {
757
- "kind": "struct",
758
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
759
- "fields": [
760
- { "name": "root", "type": { "kind": "field" } },
761
- {
762
- "name": "next_available_leaf_index",
763
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
764
- }
765
- ]
766
- }
767
- },
768
- {
769
- "name": "public_data_tree",
770
- "type": {
771
- "kind": "struct",
772
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
773
- "fields": [
774
- { "name": "root", "type": { "kind": "field" } },
775
- {
776
- "name": "next_available_leaf_index",
777
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
778
- }
779
- ]
780
- }
781
- }
782
- ]
783
- }
784
- }
785
- ]
786
- }
787
- },
788
- {
789
- "name": "global_variables",
790
- "type": {
791
- "kind": "struct",
792
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
793
- "fields": [
794
- { "name": "chain_id", "type": { "kind": "field" } },
795
- { "name": "version", "type": { "kind": "field" } },
796
- { "name": "block_number", "type": { "kind": "field" } },
797
- { "name": "timestamp", "type": { "kind": "field" } },
798
- {
799
- "name": "coinbase",
800
- "type": {
801
- "kind": "struct",
802
- "path": "aztec::protocol_types::address::EthAddress",
803
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
804
- }
805
- },
806
- {
807
- "name": "fee_recipient",
808
- "type": {
809
- "kind": "struct",
810
- "path": "aztec::protocol_types::address::AztecAddress",
811
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
812
- }
813
- }
814
- ]
815
- }
816
- }
817
- ]
818
- }
819
- },
820
- {
821
- "name": "contract_deployment_data",
822
- "type": {
823
- "kind": "struct",
824
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
825
- "fields": [
826
- {
827
- "name": "public_key",
828
- "type": {
829
- "kind": "struct",
830
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
831
- "fields": [
832
- { "name": "x", "type": { "kind": "field" } },
833
- { "name": "y", "type": { "kind": "field" } }
834
- ]
835
- }
836
- },
837
- { "name": "initialization_hash", "type": { "kind": "field" } },
838
- {
839
- "name": "contract_class_id",
840
- "type": {
841
- "kind": "struct",
842
- "path": "aztec::protocol_types::contract_class::ContractClassId",
843
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
844
- }
845
- },
846
- { "name": "contract_address_salt", "type": { "kind": "field" } },
847
- {
848
- "name": "portal_contract_address",
849
- "type": {
850
- "kind": "struct",
851
- "path": "aztec::protocol_types::address::EthAddress",
852
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
853
- }
854
- }
855
- ]
856
- }
857
- },
858
- {
859
- "name": "private_global_variables",
860
- "type": {
861
- "kind": "struct",
862
- "path": "aztec::abi::PrivateGlobalVariables",
863
- "fields": [
864
- { "name": "chain_id", "type": { "kind": "field" } },
865
- { "name": "version", "type": { "kind": "field" } }
866
- ]
867
- }
868
- }
869
- ]
870
- },
871
- "visibility": "private"
872
- },
873
- {
874
- "name": "contract_class_id",
875
- "type": {
876
- "kind": "struct",
877
- "path": "aztec::protocol_types::contract_class::ContractClassId",
878
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
879
- },
880
- "visibility": "private"
881
- },
882
- { "name": "artifact_metadata_hash", "type": { "kind": "field" }, "visibility": "private" },
883
- { "name": "private_functions_artifact_tree_root", "type": { "kind": "field" }, "visibility": "private" },
884
- {
885
- "name": "artifact_function_tree_sibling_path",
886
- "type": { "kind": "array", "length": 5, "type": { "kind": "field" } },
887
- "visibility": "private"
888
- },
889
- {
890
- "name": "function_data",
891
- "type": {
892
- "kind": "struct",
893
- "path": "events::unconstrained_function_broadcasted::UnconstrainedFunction",
894
- "fields": [
895
- {
896
- "name": "selector",
897
- "type": {
898
- "kind": "struct",
899
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
900
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
901
- }
902
- },
903
- { "name": "metadata_hash", "type": { "kind": "field" } },
904
- { "name": "bytecode", "type": { "kind": "array", "length": 500, "type": { "kind": "field" } } }
905
- ]
906
- },
907
- "visibility": "private"
908
- }
909
- ],
910
- "param_witnesses": {
911
- "artifact_function_tree_sibling_path": [{ "start": 39, "end": 44 }],
912
- "artifact_metadata_hash": [{ "start": 37, "end": 38 }],
913
- "contract_class_id": [{ "start": 36, "end": 37 }],
914
- "function_data": [{ "start": 44, "end": 546 }],
915
- "inputs": [{ "start": 0, "end": 36 }],
916
- "private_functions_artifact_tree_root": [{ "start": 38, "end": 39 }]
917
- },
918
- "return_type": {
919
- "abi_type": {
920
- "kind": "struct",
921
- "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
922
- "fields": [
923
- {
924
- "name": "call_context",
925
- "type": {
926
- "kind": "struct",
927
- "path": "aztec::protocol_types::abis::call_context::CallContext",
928
- "fields": [
929
- {
930
- "name": "msg_sender",
931
- "type": {
932
- "kind": "struct",
933
- "path": "aztec::protocol_types::address::AztecAddress",
934
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
935
- }
936
- },
937
- {
938
- "name": "storage_contract_address",
939
- "type": {
940
- "kind": "struct",
941
- "path": "aztec::protocol_types::address::AztecAddress",
942
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
943
- }
944
- },
945
- {
946
- "name": "portal_contract_address",
947
- "type": {
948
- "kind": "struct",
949
- "path": "aztec::protocol_types::address::EthAddress",
950
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
951
- }
952
- },
953
- {
954
- "name": "function_selector",
955
- "type": {
956
- "kind": "struct",
957
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
958
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
959
- }
960
- },
961
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
962
- { "name": "is_static_call", "type": { "kind": "boolean" } },
963
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
964
- {
965
- "name": "start_side_effect_counter",
966
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
967
- }
968
- ]
969
- }
970
- },
971
- { "name": "args_hash", "type": { "kind": "field" } },
972
- { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
973
- { "name": "meta_hwm", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
974
- {
975
- "name": "read_requests",
976
- "type": {
977
- "kind": "array",
978
- "length": 32,
979
- "type": {
980
- "kind": "struct",
981
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
982
- "fields": [
983
- { "name": "value", "type": { "kind": "field" } },
984
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
985
- ]
986
- }
987
- }
988
- },
989
- {
990
- "name": "nullifier_key_validation_requests",
991
- "type": {
992
- "kind": "array",
993
- "length": 1,
994
- "type": {
995
- "kind": "struct",
996
- "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
997
- "fields": [
998
- {
999
- "name": "public_key",
1000
- "type": {
1001
- "kind": "struct",
1002
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1003
- "fields": [
1004
- { "name": "x", "type": { "kind": "field" } },
1005
- { "name": "y", "type": { "kind": "field" } }
1006
- ]
1007
- }
1008
- },
1009
- {
1010
- "name": "secret_key",
1011
- "type": {
1012
- "kind": "struct",
1013
- "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
1014
- "fields": [
1015
- { "name": "high", "type": { "kind": "field" } },
1016
- { "name": "low", "type": { "kind": "field" } }
1017
- ]
1018
- }
1019
- }
1020
- ]
1021
- }
1022
- }
1023
- },
1024
- {
1025
- "name": "new_commitments",
1026
- "type": {
1027
- "kind": "array",
1028
- "length": 16,
1029
- "type": {
1030
- "kind": "struct",
1031
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
1032
- "fields": [
1033
- { "name": "value", "type": { "kind": "field" } },
1034
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1035
- ]
1036
- }
1037
- }
1038
- },
1039
- {
1040
- "name": "new_nullifiers",
1041
- "type": {
1042
- "kind": "array",
1043
- "length": 16,
1044
- "type": {
1045
- "kind": "struct",
1046
- "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
1047
- "fields": [
1048
- { "name": "value", "type": { "kind": "field" } },
1049
- { "name": "note_hash", "type": { "kind": "field" } },
1050
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1051
- ]
1052
- }
1053
- }
1054
- },
1055
- {
1056
- "name": "private_call_stack_hashes",
1057
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1058
- },
1059
- {
1060
- "name": "public_call_stack_hashes",
1061
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1062
- },
1063
- { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1064
- { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
1065
- { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1066
- {
1067
- "name": "unencrypted_logs_hash",
1068
- "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1069
- },
1070
- { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
1071
- { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1072
- {
1073
- "name": "historical_header",
1074
- "type": {
1075
- "kind": "struct",
1076
- "path": "aztec::protocol_types::header::Header",
1077
- "fields": [
1078
- {
1079
- "name": "last_archive",
1080
- "type": {
1081
- "kind": "struct",
1082
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1083
- "fields": [
1084
- { "name": "root", "type": { "kind": "field" } },
1085
- {
1086
- "name": "next_available_leaf_index",
1087
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1088
- }
1089
- ]
1090
- }
1091
- },
1092
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1093
- {
1094
- "name": "state",
1095
- "type": {
1096
- "kind": "struct",
1097
- "path": "aztec::protocol_types::state_reference::StateReference",
1098
- "fields": [
1099
- {
1100
- "name": "l1_to_l2_message_tree",
1101
- "type": {
1102
- "kind": "struct",
1103
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1104
- "fields": [
1105
- { "name": "root", "type": { "kind": "field" } },
1106
- {
1107
- "name": "next_available_leaf_index",
1108
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1109
- }
1110
- ]
1111
- }
1112
- },
1113
- {
1114
- "name": "partial",
1115
- "type": {
1116
- "kind": "struct",
1117
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
1118
- "fields": [
1119
- {
1120
- "name": "note_hash_tree",
1121
- "type": {
1122
- "kind": "struct",
1123
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1124
- "fields": [
1125
- { "name": "root", "type": { "kind": "field" } },
1126
- {
1127
- "name": "next_available_leaf_index",
1128
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1129
- }
1130
- ]
1131
- }
1132
- },
1133
- {
1134
- "name": "nullifier_tree",
1135
- "type": {
1136
- "kind": "struct",
1137
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1138
- "fields": [
1139
- { "name": "root", "type": { "kind": "field" } },
1140
- {
1141
- "name": "next_available_leaf_index",
1142
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1143
- }
1144
- ]
1145
- }
1146
- },
1147
- {
1148
- "name": "contract_tree",
1149
- "type": {
1150
- "kind": "struct",
1151
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1152
- "fields": [
1153
- { "name": "root", "type": { "kind": "field" } },
1154
- {
1155
- "name": "next_available_leaf_index",
1156
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1157
- }
1158
- ]
1159
- }
1160
- },
1161
- {
1162
- "name": "public_data_tree",
1163
- "type": {
1164
- "kind": "struct",
1165
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1166
- "fields": [
1167
- { "name": "root", "type": { "kind": "field" } },
1168
- {
1169
- "name": "next_available_leaf_index",
1170
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1171
- }
1172
- ]
1173
- }
1174
- }
1175
- ]
1176
- }
1177
- }
1178
- ]
1179
- }
1180
- },
1181
- {
1182
- "name": "global_variables",
1183
- "type": {
1184
- "kind": "struct",
1185
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
1186
- "fields": [
1187
- { "name": "chain_id", "type": { "kind": "field" } },
1188
- { "name": "version", "type": { "kind": "field" } },
1189
- { "name": "block_number", "type": { "kind": "field" } },
1190
- { "name": "timestamp", "type": { "kind": "field" } },
1191
- {
1192
- "name": "coinbase",
1193
- "type": {
1194
- "kind": "struct",
1195
- "path": "aztec::protocol_types::address::EthAddress",
1196
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1197
- }
1198
- },
1199
- {
1200
- "name": "fee_recipient",
1201
- "type": {
1202
- "kind": "struct",
1203
- "path": "aztec::protocol_types::address::AztecAddress",
1204
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1205
- }
1206
- }
1207
- ]
1208
- }
1209
- }
1210
- ]
1211
- }
1212
- },
1213
- {
1214
- "name": "contract_deployment_data",
1215
- "type": {
1216
- "kind": "struct",
1217
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1218
- "fields": [
1219
- {
1220
- "name": "public_key",
1221
- "type": {
1222
- "kind": "struct",
1223
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1224
- "fields": [
1225
- { "name": "x", "type": { "kind": "field" } },
1226
- { "name": "y", "type": { "kind": "field" } }
1227
- ]
1228
- }
1229
- },
1230
- { "name": "initialization_hash", "type": { "kind": "field" } },
1231
- {
1232
- "name": "contract_class_id",
1233
- "type": {
1234
- "kind": "struct",
1235
- "path": "aztec::protocol_types::contract_class::ContractClassId",
1236
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1237
- }
1238
- },
1239
- { "name": "contract_address_salt", "type": { "kind": "field" } },
1240
- {
1241
- "name": "portal_contract_address",
1242
- "type": {
1243
- "kind": "struct",
1244
- "path": "aztec::protocol_types::address::EthAddress",
1245
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1246
- }
1247
- }
1248
- ]
1249
- }
1250
- },
1251
- { "name": "chain_id", "type": { "kind": "field" } },
1252
- { "name": "version", "type": { "kind": "field" } }
1253
- ]
1254
- },
1255
- "visibility": "public"
1256
- },
1257
- "return_witnesses": [
1258
- 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587,
1259
- 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609,
1260
- 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631,
1261
- 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653,
1262
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675,
1263
- 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697,
1264
- 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
1265
- 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741,
1266
- 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763,
1267
- 764, 765, 766, 767, 768, 769, 770, 771, 772
1268
- ]
1269
- },
1270
- "bytecode": "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",
1271
- "debug_symbols": "1ZfdaoNAEIXfZa5Fdmb2b3yV0gtpUwgEU6p34rs3oW4W6UBgC4W5EuF8+s3uwtEVLte3cTlfpxmGFZBgeFlh/hyn++28jF8LDK6D0/R+u24dfJwvJxgw5a37lUNJaY+iiDzS3ith4kx7mDzXMDr10eijL8/GQPmQf+0A2ay5N2sezJpHs+bJrHk2ay5WzcmZNUez5mY7lMx2KJntUDLboWS2Q8lsh5LZDqV/7NCAsZiHFP9qzmqHcmLZKc6BD/53SK0vzpELJBSeDe1DeQUGpjo0/2j16mFAZHqMw1VM9mF6aaLQtWHYhqkdirkuiGDdqFwWRP8JPGDECubbsNCGxQYMe/2z4skZuWHchulL4qKr++YO+7Zt3w=="
1272
- },
1273
- {
1274
- "name": "broadcast_private_function",
1275
- "function_type": "Secret",
1276
- "is_internal": false,
1277
- "abi": {
1278
- "parameters": [
1279
- {
1280
- "name": "inputs",
1281
- "type": {
1282
- "kind": "struct",
1283
- "path": "aztec::abi::PrivateContextInputs",
1284
- "fields": [
1285
- {
1286
- "name": "call_context",
1287
- "type": {
1288
- "kind": "struct",
1289
- "path": "aztec::protocol_types::abis::call_context::CallContext",
1290
- "fields": [
1291
- {
1292
- "name": "msg_sender",
1293
- "type": {
1294
- "kind": "struct",
1295
- "path": "aztec::protocol_types::address::AztecAddress",
1296
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1297
- }
1298
- },
1299
- {
1300
- "name": "storage_contract_address",
1301
- "type": {
1302
- "kind": "struct",
1303
- "path": "aztec::protocol_types::address::AztecAddress",
1304
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1305
- }
1306
- },
1307
- {
1308
- "name": "portal_contract_address",
1309
- "type": {
1310
- "kind": "struct",
1311
- "path": "aztec::protocol_types::address::EthAddress",
1312
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1313
- }
1314
- },
1315
- {
1316
- "name": "function_selector",
1317
- "type": {
1318
- "kind": "struct",
1319
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
1320
- "fields": [
1321
- { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1322
- ]
1323
- }
1324
- },
1325
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1326
- { "name": "is_static_call", "type": { "kind": "boolean" } },
1327
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1328
- {
1329
- "name": "start_side_effect_counter",
1330
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1331
- }
1332
- ]
1333
- }
1334
- },
1335
- {
1336
- "name": "historical_header",
1337
- "type": {
1338
- "kind": "struct",
1339
- "path": "aztec::protocol_types::header::Header",
1340
- "fields": [
1341
- {
1342
- "name": "last_archive",
1343
- "type": {
1344
- "kind": "struct",
1345
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1346
- "fields": [
1347
- { "name": "root", "type": { "kind": "field" } },
1348
- {
1349
- "name": "next_available_leaf_index",
1350
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1351
- }
1352
- ]
1353
- }
1354
- },
1355
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1356
- {
1357
- "name": "state",
1358
- "type": {
1359
- "kind": "struct",
1360
- "path": "aztec::protocol_types::state_reference::StateReference",
1361
- "fields": [
1362
- {
1363
- "name": "l1_to_l2_message_tree",
1364
- "type": {
1365
- "kind": "struct",
1366
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1367
- "fields": [
1368
- { "name": "root", "type": { "kind": "field" } },
1369
- {
1370
- "name": "next_available_leaf_index",
1371
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1372
- }
1373
- ]
1374
- }
1375
- },
1376
- {
1377
- "name": "partial",
1378
- "type": {
1379
- "kind": "struct",
1380
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
1381
- "fields": [
1382
- {
1383
- "name": "note_hash_tree",
1384
- "type": {
1385
- "kind": "struct",
1386
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1387
- "fields": [
1388
- { "name": "root", "type": { "kind": "field" } },
1389
- {
1390
- "name": "next_available_leaf_index",
1391
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1392
- }
1393
- ]
1394
- }
1395
- },
1396
- {
1397
- "name": "nullifier_tree",
1398
- "type": {
1399
- "kind": "struct",
1400
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1401
- "fields": [
1402
- { "name": "root", "type": { "kind": "field" } },
1403
- {
1404
- "name": "next_available_leaf_index",
1405
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1406
- }
1407
- ]
1408
- }
1409
- },
1410
- {
1411
- "name": "contract_tree",
1412
- "type": {
1413
- "kind": "struct",
1414
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1415
- "fields": [
1416
- { "name": "root", "type": { "kind": "field" } },
1417
- {
1418
- "name": "next_available_leaf_index",
1419
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1420
- }
1421
- ]
1422
- }
1423
- },
1424
- {
1425
- "name": "public_data_tree",
1426
- "type": {
1427
- "kind": "struct",
1428
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1429
- "fields": [
1430
- { "name": "root", "type": { "kind": "field" } },
1431
- {
1432
- "name": "next_available_leaf_index",
1433
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1434
- }
1435
- ]
1436
- }
1437
- }
1438
- ]
1439
- }
1440
- }
1441
- ]
1442
- }
1443
- },
1444
- {
1445
- "name": "global_variables",
1446
- "type": {
1447
- "kind": "struct",
1448
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
1449
- "fields": [
1450
- { "name": "chain_id", "type": { "kind": "field" } },
1451
- { "name": "version", "type": { "kind": "field" } },
1452
- { "name": "block_number", "type": { "kind": "field" } },
1453
- { "name": "timestamp", "type": { "kind": "field" } },
1454
- {
1455
- "name": "coinbase",
1456
- "type": {
1457
- "kind": "struct",
1458
- "path": "aztec::protocol_types::address::EthAddress",
1459
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1460
- }
1461
- },
1462
- {
1463
- "name": "fee_recipient",
1464
- "type": {
1465
- "kind": "struct",
1466
- "path": "aztec::protocol_types::address::AztecAddress",
1467
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1468
- }
1469
- }
1470
- ]
1471
- }
1472
- }
1473
- ]
1474
- }
1475
- },
1476
- {
1477
- "name": "contract_deployment_data",
1478
- "type": {
1479
- "kind": "struct",
1480
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1481
- "fields": [
1482
- {
1483
- "name": "public_key",
1484
- "type": {
1485
- "kind": "struct",
1486
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1487
- "fields": [
1488
- { "name": "x", "type": { "kind": "field" } },
1489
- { "name": "y", "type": { "kind": "field" } }
1490
- ]
1491
- }
1492
- },
1493
- { "name": "initialization_hash", "type": { "kind": "field" } },
1494
- {
1495
- "name": "contract_class_id",
1496
- "type": {
1497
- "kind": "struct",
1498
- "path": "aztec::protocol_types::contract_class::ContractClassId",
1499
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1500
- }
1501
- },
1502
- { "name": "contract_address_salt", "type": { "kind": "field" } },
1503
- {
1504
- "name": "portal_contract_address",
1505
- "type": {
1506
- "kind": "struct",
1507
- "path": "aztec::protocol_types::address::EthAddress",
1508
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1509
- }
1510
- }
1511
- ]
1512
- }
1513
- },
1514
- {
1515
- "name": "private_global_variables",
1516
- "type": {
1517
- "kind": "struct",
1518
- "path": "aztec::abi::PrivateGlobalVariables",
1519
- "fields": [
1520
- { "name": "chain_id", "type": { "kind": "field" } },
1521
- { "name": "version", "type": { "kind": "field" } }
1522
- ]
1523
- }
1524
- }
1525
- ]
1526
- },
1527
- "visibility": "private"
1528
- },
1529
- {
1530
- "name": "contract_class_id",
1531
- "type": {
1532
- "kind": "struct",
1533
- "path": "aztec::protocol_types::contract_class::ContractClassId",
1534
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1535
- },
1536
- "visibility": "private"
1537
- },
1538
- { "name": "artifact_metadata_hash", "type": { "kind": "field" }, "visibility": "private" },
1539
- {
1540
- "name": "unconstrained_functions_artifact_tree_root",
1541
- "type": { "kind": "field" },
1542
- "visibility": "private"
1543
- },
1544
- {
1545
- "name": "private_function_tree_sibling_path",
1546
- "type": { "kind": "array", "length": 5, "type": { "kind": "field" } },
1547
- "visibility": "private"
1548
- },
1549
- {
1550
- "name": "artifact_function_tree_sibling_path",
1551
- "type": { "kind": "array", "length": 5, "type": { "kind": "field" } },
1552
- "visibility": "private"
1553
- },
1554
- {
1555
- "name": "function_data",
1556
- "type": {
1557
- "kind": "struct",
1558
- "path": "events::private_function_broadcasted::PrivateFunction",
1559
- "fields": [
1560
- {
1561
- "name": "selector",
1562
- "type": {
1563
- "kind": "struct",
1564
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
1565
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
1566
- }
1567
- },
1568
- { "name": "metadata_hash", "type": { "kind": "field" } },
1569
- { "name": "vk_hash", "type": { "kind": "field" } },
1570
- { "name": "bytecode", "type": { "kind": "array", "length": 500, "type": { "kind": "field" } } }
1571
- ]
1572
- },
1573
- "visibility": "private"
1574
- }
1575
- ],
1576
- "param_witnesses": {
1577
- "artifact_function_tree_sibling_path": [{ "start": 44, "end": 49 }],
1578
- "artifact_metadata_hash": [{ "start": 37, "end": 38 }],
1579
- "contract_class_id": [{ "start": 36, "end": 37 }],
1580
- "function_data": [{ "start": 49, "end": 552 }],
1581
- "inputs": [{ "start": 0, "end": 36 }],
1582
- "private_function_tree_sibling_path": [{ "start": 39, "end": 44 }],
1583
- "unconstrained_functions_artifact_tree_root": [{ "start": 38, "end": 39 }]
1584
- },
1585
- "return_type": {
1586
- "abi_type": {
1587
- "kind": "struct",
1588
- "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
1589
- "fields": [
1590
- {
1591
- "name": "call_context",
1592
- "type": {
1593
- "kind": "struct",
1594
- "path": "aztec::protocol_types::abis::call_context::CallContext",
1595
- "fields": [
1596
- {
1597
- "name": "msg_sender",
1598
- "type": {
1599
- "kind": "struct",
1600
- "path": "aztec::protocol_types::address::AztecAddress",
1601
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1602
- }
1603
- },
1604
- {
1605
- "name": "storage_contract_address",
1606
- "type": {
1607
- "kind": "struct",
1608
- "path": "aztec::protocol_types::address::AztecAddress",
1609
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1610
- }
1611
- },
1612
- {
1613
- "name": "portal_contract_address",
1614
- "type": {
1615
- "kind": "struct",
1616
- "path": "aztec::protocol_types::address::EthAddress",
1617
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1618
- }
1619
- },
1620
- {
1621
- "name": "function_selector",
1622
- "type": {
1623
- "kind": "struct",
1624
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
1625
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
1626
- }
1627
- },
1628
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1629
- { "name": "is_static_call", "type": { "kind": "boolean" } },
1630
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1631
- {
1632
- "name": "start_side_effect_counter",
1633
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1634
- }
1635
- ]
1636
- }
1637
- },
1638
- { "name": "args_hash", "type": { "kind": "field" } },
1639
- { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
1640
- { "name": "meta_hwm", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
1641
- {
1642
- "name": "read_requests",
1643
- "type": {
1644
- "kind": "array",
1645
- "length": 32,
1646
- "type": {
1647
- "kind": "struct",
1648
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
1649
- "fields": [
1650
- { "name": "value", "type": { "kind": "field" } },
1651
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1652
- ]
1653
- }
1654
- }
1655
- },
1656
- {
1657
- "name": "nullifier_key_validation_requests",
1658
- "type": {
1659
- "kind": "array",
1660
- "length": 1,
1661
- "type": {
1662
- "kind": "struct",
1663
- "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
1664
- "fields": [
1665
- {
1666
- "name": "public_key",
1667
- "type": {
1668
- "kind": "struct",
1669
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1670
- "fields": [
1671
- { "name": "x", "type": { "kind": "field" } },
1672
- { "name": "y", "type": { "kind": "field" } }
1673
- ]
1674
- }
1675
- },
1676
- {
1677
- "name": "secret_key",
1678
- "type": {
1679
- "kind": "struct",
1680
- "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
1681
- "fields": [
1682
- { "name": "high", "type": { "kind": "field" } },
1683
- { "name": "low", "type": { "kind": "field" } }
1684
- ]
1685
- }
1686
- }
1687
- ]
1688
- }
1689
- }
1690
- },
1691
- {
1692
- "name": "new_commitments",
1693
- "type": {
1694
- "kind": "array",
1695
- "length": 16,
1696
- "type": {
1697
- "kind": "struct",
1698
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
1699
- "fields": [
1700
- { "name": "value", "type": { "kind": "field" } },
1701
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1702
- ]
1703
- }
1704
- }
1705
- },
1706
- {
1707
- "name": "new_nullifiers",
1708
- "type": {
1709
- "kind": "array",
1710
- "length": 16,
1711
- "type": {
1712
- "kind": "struct",
1713
- "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
1714
- "fields": [
1715
- { "name": "value", "type": { "kind": "field" } },
1716
- { "name": "note_hash", "type": { "kind": "field" } },
1717
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1718
- ]
1719
- }
1720
- }
1721
- },
1722
- {
1723
- "name": "private_call_stack_hashes",
1724
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1725
- },
1726
- {
1727
- "name": "public_call_stack_hashes",
1728
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1729
- },
1730
- { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1731
- { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
1732
- { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1733
- {
1734
- "name": "unencrypted_logs_hash",
1735
- "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1736
- },
1737
- { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
1738
- { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1739
- {
1740
- "name": "historical_header",
1741
- "type": {
1742
- "kind": "struct",
1743
- "path": "aztec::protocol_types::header::Header",
1744
- "fields": [
1745
- {
1746
- "name": "last_archive",
1747
- "type": {
1748
- "kind": "struct",
1749
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1750
- "fields": [
1751
- { "name": "root", "type": { "kind": "field" } },
1752
- {
1753
- "name": "next_available_leaf_index",
1754
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1755
- }
1756
- ]
1757
- }
1758
- },
1759
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1760
- {
1761
- "name": "state",
1762
- "type": {
1763
- "kind": "struct",
1764
- "path": "aztec::protocol_types::state_reference::StateReference",
1765
- "fields": [
1766
- {
1767
- "name": "l1_to_l2_message_tree",
1768
- "type": {
1769
- "kind": "struct",
1770
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1771
- "fields": [
1772
- { "name": "root", "type": { "kind": "field" } },
1773
- {
1774
- "name": "next_available_leaf_index",
1775
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1776
- }
1777
- ]
1778
- }
1779
- },
1780
- {
1781
- "name": "partial",
1782
- "type": {
1783
- "kind": "struct",
1784
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
1785
- "fields": [
1786
- {
1787
- "name": "note_hash_tree",
1788
- "type": {
1789
- "kind": "struct",
1790
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1791
- "fields": [
1792
- { "name": "root", "type": { "kind": "field" } },
1793
- {
1794
- "name": "next_available_leaf_index",
1795
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1796
- }
1797
- ]
1798
- }
1799
- },
1800
- {
1801
- "name": "nullifier_tree",
1802
- "type": {
1803
- "kind": "struct",
1804
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1805
- "fields": [
1806
- { "name": "root", "type": { "kind": "field" } },
1807
- {
1808
- "name": "next_available_leaf_index",
1809
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1810
- }
1811
- ]
1812
- }
1813
- },
1814
- {
1815
- "name": "contract_tree",
1816
- "type": {
1817
- "kind": "struct",
1818
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1819
- "fields": [
1820
- { "name": "root", "type": { "kind": "field" } },
1821
- {
1822
- "name": "next_available_leaf_index",
1823
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1824
- }
1825
- ]
1826
- }
1827
- },
1828
- {
1829
- "name": "public_data_tree",
1830
- "type": {
1831
- "kind": "struct",
1832
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
1833
- "fields": [
1834
- { "name": "root", "type": { "kind": "field" } },
1835
- {
1836
- "name": "next_available_leaf_index",
1837
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1838
- }
1839
- ]
1840
- }
1841
- }
1842
- ]
1843
- }
1844
- }
1845
- ]
1846
- }
1847
- },
1848
- {
1849
- "name": "global_variables",
1850
- "type": {
1851
- "kind": "struct",
1852
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
1853
- "fields": [
1854
- { "name": "chain_id", "type": { "kind": "field" } },
1855
- { "name": "version", "type": { "kind": "field" } },
1856
- { "name": "block_number", "type": { "kind": "field" } },
1857
- { "name": "timestamp", "type": { "kind": "field" } },
1858
- {
1859
- "name": "coinbase",
1860
- "type": {
1861
- "kind": "struct",
1862
- "path": "aztec::protocol_types::address::EthAddress",
1863
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1864
- }
1865
- },
1866
- {
1867
- "name": "fee_recipient",
1868
- "type": {
1869
- "kind": "struct",
1870
- "path": "aztec::protocol_types::address::AztecAddress",
1871
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1872
- }
1873
- }
1874
- ]
1875
- }
1876
- }
1877
- ]
1878
- }
1879
- },
1880
- {
1881
- "name": "contract_deployment_data",
1882
- "type": {
1883
- "kind": "struct",
1884
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1885
- "fields": [
1886
- {
1887
- "name": "public_key",
1888
- "type": {
1889
- "kind": "struct",
1890
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1891
- "fields": [
1892
- { "name": "x", "type": { "kind": "field" } },
1893
- { "name": "y", "type": { "kind": "field" } }
1894
- ]
1895
- }
1896
- },
1897
- { "name": "initialization_hash", "type": { "kind": "field" } },
1898
- {
1899
- "name": "contract_class_id",
1900
- "type": {
1901
- "kind": "struct",
1902
- "path": "aztec::protocol_types::contract_class::ContractClassId",
1903
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1904
- }
1905
- },
1906
- { "name": "contract_address_salt", "type": { "kind": "field" } },
1907
- {
1908
- "name": "portal_contract_address",
1909
- "type": {
1910
- "kind": "struct",
1911
- "path": "aztec::protocol_types::address::EthAddress",
1912
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1913
- }
1914
- }
1915
- ]
1916
- }
1917
- },
1918
- { "name": "chain_id", "type": { "kind": "field" } },
1919
- { "name": "version", "type": { "kind": "field" } }
1920
- ]
1921
- },
1922
- "visibility": "public"
1923
- },
1924
- "return_witnesses": [
1925
- 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594,
1926
- 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616,
1927
- 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638,
1928
- 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660,
1929
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682,
1930
- 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704,
1931
- 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726,
1932
- 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748,
1933
- 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770,
1934
- 771, 772, 773, 774, 775, 776, 777, 778, 779
1935
- ]
1936
- },
1937
- "bytecode": "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",
1938
- "debug_symbols": "1ZfRaoQwEEX/ZZ5FMjNJzPgrpQ/SbmFhcUv1Tfz3utQYpAMLKRTmSYR79GQSuLrA7f42zNf7OEG/ABL0LwtMn8P4uJ3m4WuG3jVwGd+369rAx/V2gR67tDa/cihdt0dRRI6090qYONEeJs8ljE59NPro87MxUDrlXxtANmvuzZoHs+bRrHln1jyZNRer5uTMmqNZc7MdSmY7lMx2KJntUDLboWS2Q8lsh5LZDuV/7NCAMZuHLv7ZXO1QSgnzSyTJyf8BqfVFm/sOsYv4bNE+5DQGprJo/tFq1WOMyHQsh/mgZF9MK1UUujoM6zB1fJjKQATLRqU8EP339YQRK5ivw0IdFiswavUPoidnZMO4DtNH4qIr++ZO+7au3w=="
1939
- },
1940
- {
1941
- "name": "register",
1942
- "function_type": "Secret",
1943
- "is_internal": false,
1944
- "abi": {
1945
- "parameters": [
1946
- {
1947
- "name": "inputs",
1948
- "type": {
1949
- "kind": "struct",
1950
- "path": "aztec::abi::PrivateContextInputs",
1951
- "fields": [
1952
- {
1953
- "name": "call_context",
1954
- "type": {
1955
- "kind": "struct",
1956
- "path": "aztec::protocol_types::abis::call_context::CallContext",
1957
- "fields": [
1958
- {
1959
- "name": "msg_sender",
1960
- "type": {
1961
- "kind": "struct",
1962
- "path": "aztec::protocol_types::address::AztecAddress",
1963
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1964
- }
1965
- },
1966
- {
1967
- "name": "storage_contract_address",
1968
- "type": {
1969
- "kind": "struct",
1970
- "path": "aztec::protocol_types::address::AztecAddress",
1971
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1972
- }
1973
- },
1974
- {
1975
- "name": "portal_contract_address",
1976
- "type": {
1977
- "kind": "struct",
1978
- "path": "aztec::protocol_types::address::EthAddress",
1979
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1980
- }
1981
- },
1982
- {
1983
- "name": "function_selector",
1984
- "type": {
1985
- "kind": "struct",
1986
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
1987
- "fields": [
1988
- { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1989
- ]
1990
- }
1991
- },
1992
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1993
- { "name": "is_static_call", "type": { "kind": "boolean" } },
1994
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1995
- {
1996
- "name": "start_side_effect_counter",
1997
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1998
- }
1999
- ]
2000
- }
2001
- },
2002
- {
2003
- "name": "historical_header",
2004
- "type": {
2005
- "kind": "struct",
2006
- "path": "aztec::protocol_types::header::Header",
2007
- "fields": [
2008
- {
2009
- "name": "last_archive",
2010
- "type": {
2011
- "kind": "struct",
2012
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2013
- "fields": [
2014
- { "name": "root", "type": { "kind": "field" } },
2015
- {
2016
- "name": "next_available_leaf_index",
2017
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2018
- }
2019
- ]
2020
- }
2021
- },
2022
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2023
- {
2024
- "name": "state",
2025
- "type": {
2026
- "kind": "struct",
2027
- "path": "aztec::protocol_types::state_reference::StateReference",
2028
- "fields": [
2029
- {
2030
- "name": "l1_to_l2_message_tree",
2031
- "type": {
2032
- "kind": "struct",
2033
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2034
- "fields": [
2035
- { "name": "root", "type": { "kind": "field" } },
2036
- {
2037
- "name": "next_available_leaf_index",
2038
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2039
- }
2040
- ]
2041
- }
2042
- },
2043
- {
2044
- "name": "partial",
2045
- "type": {
2046
- "kind": "struct",
2047
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
2048
- "fields": [
2049
- {
2050
- "name": "note_hash_tree",
2051
- "type": {
2052
- "kind": "struct",
2053
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2054
- "fields": [
2055
- { "name": "root", "type": { "kind": "field" } },
2056
- {
2057
- "name": "next_available_leaf_index",
2058
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2059
- }
2060
- ]
2061
- }
2062
- },
2063
- {
2064
- "name": "nullifier_tree",
2065
- "type": {
2066
- "kind": "struct",
2067
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2068
- "fields": [
2069
- { "name": "root", "type": { "kind": "field" } },
2070
- {
2071
- "name": "next_available_leaf_index",
2072
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2073
- }
2074
- ]
2075
- }
2076
- },
2077
- {
2078
- "name": "contract_tree",
2079
- "type": {
2080
- "kind": "struct",
2081
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2082
- "fields": [
2083
- { "name": "root", "type": { "kind": "field" } },
2084
- {
2085
- "name": "next_available_leaf_index",
2086
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2087
- }
2088
- ]
2089
- }
2090
- },
2091
- {
2092
- "name": "public_data_tree",
2093
- "type": {
2094
- "kind": "struct",
2095
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2096
- "fields": [
2097
- { "name": "root", "type": { "kind": "field" } },
2098
- {
2099
- "name": "next_available_leaf_index",
2100
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2101
- }
2102
- ]
2103
- }
2104
- }
2105
- ]
2106
- }
2107
- }
2108
- ]
2109
- }
2110
- },
2111
- {
2112
- "name": "global_variables",
2113
- "type": {
2114
- "kind": "struct",
2115
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
2116
- "fields": [
2117
- { "name": "chain_id", "type": { "kind": "field" } },
2118
- { "name": "version", "type": { "kind": "field" } },
2119
- { "name": "block_number", "type": { "kind": "field" } },
2120
- { "name": "timestamp", "type": { "kind": "field" } },
2121
- {
2122
- "name": "coinbase",
2123
- "type": {
2124
- "kind": "struct",
2125
- "path": "aztec::protocol_types::address::EthAddress",
2126
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2127
- }
2128
- },
2129
- {
2130
- "name": "fee_recipient",
2131
- "type": {
2132
- "kind": "struct",
2133
- "path": "aztec::protocol_types::address::AztecAddress",
2134
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2135
- }
2136
- }
2137
- ]
2138
- }
2139
- }
2140
- ]
2141
- }
2142
- },
2143
- {
2144
- "name": "contract_deployment_data",
2145
- "type": {
2146
- "kind": "struct",
2147
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
2148
- "fields": [
2149
- {
2150
- "name": "public_key",
2151
- "type": {
2152
- "kind": "struct",
2153
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2154
- "fields": [
2155
- { "name": "x", "type": { "kind": "field" } },
2156
- { "name": "y", "type": { "kind": "field" } }
2157
- ]
2158
- }
2159
- },
2160
- { "name": "initialization_hash", "type": { "kind": "field" } },
2161
- {
2162
- "name": "contract_class_id",
2163
- "type": {
2164
- "kind": "struct",
2165
- "path": "aztec::protocol_types::contract_class::ContractClassId",
2166
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2167
- }
2168
- },
2169
- { "name": "contract_address_salt", "type": { "kind": "field" } },
2170
- {
2171
- "name": "portal_contract_address",
2172
- "type": {
2173
- "kind": "struct",
2174
- "path": "aztec::protocol_types::address::EthAddress",
2175
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2176
- }
2177
- }
2178
- ]
2179
- }
2180
- },
2181
- {
2182
- "name": "private_global_variables",
2183
- "type": {
2184
- "kind": "struct",
2185
- "path": "aztec::abi::PrivateGlobalVariables",
2186
- "fields": [
2187
- { "name": "chain_id", "type": { "kind": "field" } },
2188
- { "name": "version", "type": { "kind": "field" } }
2189
- ]
2190
- }
2191
- }
2192
- ]
2193
- },
2194
- "visibility": "private"
2195
- },
2196
- { "name": "artifact_hash", "type": { "kind": "field" }, "visibility": "private" },
2197
- { "name": "private_functions_root", "type": { "kind": "field" }, "visibility": "private" },
2198
- { "name": "public_bytecode_commitment", "type": { "kind": "field" }, "visibility": "private" },
2199
- {
2200
- "name": "packed_public_bytecode",
2201
- "type": { "kind": "array", "length": 1000, "type": { "kind": "field" } },
2202
- "visibility": "private"
2203
- }
2204
- ],
2205
- "param_witnesses": {
2206
- "artifact_hash": [{ "start": 36, "end": 37 }],
2207
- "inputs": [{ "start": 0, "end": 36 }],
2208
- "packed_public_bytecode": [{ "start": 39, "end": 1039 }],
2209
- "private_functions_root": [{ "start": 37, "end": 38 }],
2210
- "public_bytecode_commitment": [{ "start": 38, "end": 39 }]
2211
- },
2212
- "return_type": {
2213
- "abi_type": {
2214
- "kind": "struct",
2215
- "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
2216
- "fields": [
2217
- {
2218
- "name": "call_context",
2219
- "type": {
2220
- "kind": "struct",
2221
- "path": "aztec::protocol_types::abis::call_context::CallContext",
2222
- "fields": [
2223
- {
2224
- "name": "msg_sender",
2225
- "type": {
2226
- "kind": "struct",
2227
- "path": "aztec::protocol_types::address::AztecAddress",
2228
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2229
- }
2230
- },
2231
- {
2232
- "name": "storage_contract_address",
2233
- "type": {
2234
- "kind": "struct",
2235
- "path": "aztec::protocol_types::address::AztecAddress",
2236
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2237
- }
2238
- },
2239
- {
2240
- "name": "portal_contract_address",
2241
- "type": {
2242
- "kind": "struct",
2243
- "path": "aztec::protocol_types::address::EthAddress",
2244
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2245
- }
2246
- },
2247
- {
2248
- "name": "function_selector",
2249
- "type": {
2250
- "kind": "struct",
2251
- "path": "aztec::protocol_types::abis::function_selector::FunctionSelector",
2252
- "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
2253
- }
2254
- },
2255
- { "name": "is_delegate_call", "type": { "kind": "boolean" } },
2256
- { "name": "is_static_call", "type": { "kind": "boolean" } },
2257
- { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
2258
- {
2259
- "name": "start_side_effect_counter",
2260
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2261
- }
2262
- ]
2263
- }
2264
- },
2265
- { "name": "args_hash", "type": { "kind": "field" } },
2266
- { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
2267
- { "name": "meta_hwm", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
2268
- {
2269
- "name": "read_requests",
2270
- "type": {
2271
- "kind": "array",
2272
- "length": 32,
2273
- "type": {
2274
- "kind": "struct",
2275
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
2276
- "fields": [
2277
- { "name": "value", "type": { "kind": "field" } },
2278
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
2279
- ]
2280
- }
2281
- }
2282
- },
2283
- {
2284
- "name": "nullifier_key_validation_requests",
2285
- "type": {
2286
- "kind": "array",
2287
- "length": 1,
2288
- "type": {
2289
- "kind": "struct",
2290
- "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
2291
- "fields": [
2292
- {
2293
- "name": "public_key",
2294
- "type": {
2295
- "kind": "struct",
2296
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2297
- "fields": [
2298
- { "name": "x", "type": { "kind": "field" } },
2299
- { "name": "y", "type": { "kind": "field" } }
2300
- ]
2301
- }
2302
- },
2303
- {
2304
- "name": "secret_key",
2305
- "type": {
2306
- "kind": "struct",
2307
- "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
2308
- "fields": [
2309
- { "name": "high", "type": { "kind": "field" } },
2310
- { "name": "low", "type": { "kind": "field" } }
2311
- ]
2312
- }
2313
- }
2314
- ]
2315
- }
2316
- }
2317
- },
2318
- {
2319
- "name": "new_commitments",
2320
- "type": {
2321
- "kind": "array",
2322
- "length": 16,
2323
- "type": {
2324
- "kind": "struct",
2325
- "path": "aztec::protocol_types::abis::side_effect::SideEffect",
2326
- "fields": [
2327
- { "name": "value", "type": { "kind": "field" } },
2328
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
2329
- ]
2330
- }
2331
- }
2332
- },
2333
- {
2334
- "name": "new_nullifiers",
2335
- "type": {
2336
- "kind": "array",
2337
- "length": 16,
2338
- "type": {
2339
- "kind": "struct",
2340
- "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
2341
- "fields": [
2342
- { "name": "value", "type": { "kind": "field" } },
2343
- { "name": "note_hash", "type": { "kind": "field" } },
2344
- { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
2345
- ]
2346
- }
2347
- }
2348
- },
2349
- {
2350
- "name": "private_call_stack_hashes",
2351
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
2352
- },
2353
- {
2354
- "name": "public_call_stack_hashes",
2355
- "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
2356
- },
2357
- { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2358
- { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
2359
- { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2360
- {
2361
- "name": "unencrypted_logs_hash",
2362
- "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
2363
- },
2364
- { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
2365
- { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
2366
- {
2367
- "name": "historical_header",
2368
- "type": {
2369
- "kind": "struct",
2370
- "path": "aztec::protocol_types::header::Header",
2371
- "fields": [
2372
- {
2373
- "name": "last_archive",
2374
- "type": {
2375
- "kind": "struct",
2376
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2377
- "fields": [
2378
- { "name": "root", "type": { "kind": "field" } },
2379
- {
2380
- "name": "next_available_leaf_index",
2381
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2382
- }
2383
- ]
2384
- }
2385
- },
2386
- { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
2387
- {
2388
- "name": "state",
2389
- "type": {
2390
- "kind": "struct",
2391
- "path": "aztec::protocol_types::state_reference::StateReference",
2392
- "fields": [
2393
- {
2394
- "name": "l1_to_l2_message_tree",
2395
- "type": {
2396
- "kind": "struct",
2397
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2398
- "fields": [
2399
- { "name": "root", "type": { "kind": "field" } },
2400
- {
2401
- "name": "next_available_leaf_index",
2402
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2403
- }
2404
- ]
2405
- }
2406
- },
2407
- {
2408
- "name": "partial",
2409
- "type": {
2410
- "kind": "struct",
2411
- "path": "aztec::protocol_types::partial_state_reference::PartialStateReference",
2412
- "fields": [
2413
- {
2414
- "name": "note_hash_tree",
2415
- "type": {
2416
- "kind": "struct",
2417
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2418
- "fields": [
2419
- { "name": "root", "type": { "kind": "field" } },
2420
- {
2421
- "name": "next_available_leaf_index",
2422
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2423
- }
2424
- ]
2425
- }
2426
- },
2427
- {
2428
- "name": "nullifier_tree",
2429
- "type": {
2430
- "kind": "struct",
2431
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2432
- "fields": [
2433
- { "name": "root", "type": { "kind": "field" } },
2434
- {
2435
- "name": "next_available_leaf_index",
2436
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2437
- }
2438
- ]
2439
- }
2440
- },
2441
- {
2442
- "name": "contract_tree",
2443
- "type": {
2444
- "kind": "struct",
2445
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2446
- "fields": [
2447
- { "name": "root", "type": { "kind": "field" } },
2448
- {
2449
- "name": "next_available_leaf_index",
2450
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2451
- }
2452
- ]
2453
- }
2454
- },
2455
- {
2456
- "name": "public_data_tree",
2457
- "type": {
2458
- "kind": "struct",
2459
- "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
2460
- "fields": [
2461
- { "name": "root", "type": { "kind": "field" } },
2462
- {
2463
- "name": "next_available_leaf_index",
2464
- "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
2465
- }
2466
- ]
2467
- }
2468
- }
2469
- ]
2470
- }
2471
- }
2472
- ]
2473
- }
2474
- },
2475
- {
2476
- "name": "global_variables",
2477
- "type": {
2478
- "kind": "struct",
2479
- "path": "aztec::protocol_types::abis::global_variables::GlobalVariables",
2480
- "fields": [
2481
- { "name": "chain_id", "type": { "kind": "field" } },
2482
- { "name": "version", "type": { "kind": "field" } },
2483
- { "name": "block_number", "type": { "kind": "field" } },
2484
- { "name": "timestamp", "type": { "kind": "field" } },
2485
- {
2486
- "name": "coinbase",
2487
- "type": {
2488
- "kind": "struct",
2489
- "path": "aztec::protocol_types::address::EthAddress",
2490
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2491
- }
2492
- },
2493
- {
2494
- "name": "fee_recipient",
2495
- "type": {
2496
- "kind": "struct",
2497
- "path": "aztec::protocol_types::address::AztecAddress",
2498
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2499
- }
2500
- }
2501
- ]
2502
- }
2503
- }
2504
- ]
2505
- }
2506
- },
2507
- {
2508
- "name": "contract_deployment_data",
2509
- "type": {
2510
- "kind": "struct",
2511
- "path": "aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
2512
- "fields": [
2513
- {
2514
- "name": "public_key",
2515
- "type": {
2516
- "kind": "struct",
2517
- "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint",
2518
- "fields": [
2519
- { "name": "x", "type": { "kind": "field" } },
2520
- { "name": "y", "type": { "kind": "field" } }
2521
- ]
2522
- }
2523
- },
2524
- { "name": "initialization_hash", "type": { "kind": "field" } },
2525
- {
2526
- "name": "contract_class_id",
2527
- "type": {
2528
- "kind": "struct",
2529
- "path": "aztec::protocol_types::contract_class::ContractClassId",
2530
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2531
- }
2532
- },
2533
- { "name": "contract_address_salt", "type": { "kind": "field" } },
2534
- {
2535
- "name": "portal_contract_address",
2536
- "type": {
2537
- "kind": "struct",
2538
- "path": "aztec::protocol_types::address::EthAddress",
2539
- "fields": [{ "name": "inner", "type": { "kind": "field" } }]
2540
- }
2541
- }
2542
- ]
2543
- }
2544
- },
2545
- { "name": "chain_id", "type": { "kind": "field" } },
2546
- { "name": "version", "type": { "kind": "field" } }
2547
- ]
2548
- },
2549
- "visibility": "public"
2550
- },
2551
- "return_witnesses": [
2552
- 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094,
2553
- 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
2554
- 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
2555
- 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
2556
- 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
2557
- 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
2558
- 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202,
2559
- 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
2560
- 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238,
2561
- 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256,
2562
- 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274,
2563
- 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283
2564
- ]
2565
- },
2566
- "bytecode": "H4sIAAAAAAAA/+XdBXCUd9/2/QR3Ci2lXtriFEhIQhJciru7E9zdtbi7e3F39+Lu7sXdHd7j7P1juhdX3rlnnmd5pt85M/OdA9iy+fxPoN2GZDdiZB8fX1+fv9+ciaAiqkQe349k3/7w/cgffT/KR9+P+tHPj/7R92N/9P24H30/3kff//yj7yfw+H40+7bzlli9U0lsk9oms01um8I2pW0q219tU9umsU1r62frb5vONsA20DbINr1tsG2IbahtBtuMtplsM9tmsc1qm802u20O25we/riR/vu6/Ga357LNbZvHNq9tPtv8tgVsC9oWsi1sW8S2qG0x2+K2JWxL2payLW1bxrasbTnb8rYVbCvaVrKtbFvFtqptNdvqtjU8rstn4VyXmnZ7mG0t29q2dWzr2tazrW/bwLahbSPbxrZNbJvaNrNtbtvCtqVtK9vWtm1s29q2s21v28G2o20n2862XWy72naz7e5xXeKFc11+t9t72Pa07WXb27aPbV/bfrb9bQfYDrQdZDvYdojtUNthtsNtR9iOtB1lO9p2jO1Y23G2420n2E60nWQ72XaK7VTbaR7XJX441+UPu3267QzbmbazbGfbzrGdazvPdr7tAtuFtotsF9susV1qu8x2ue0K25W2q2xX266xXWu7zna97QbbjbabbDfbbrHd6nFdPg/nuvxpt2+z3W67w3an7S7b3bZ7bPfa7rPdb3vA9qDtIdvDtkdsj9oesz1ue8L2pO0p29O2Z2zP2p6zPW97wfai7SXby7ZXPK7LF+Fcl7/s9qu212yv296wvWl7y/a27R3bu7b3bO/bPrB9aPvI9rHtE9unts9sn9u+sH1p+8r2te0b27e2H3pv6xzYWV/bCLYRff+5LgnCuS6R7PbItlFso9pGs41uG8M2pm0s29i2cWzj2n5mG882vu3ntl/YJrD90jah7Ve2X9t+Y/ut7Xe239v+YPujbSLbn2x/tv3F47p8Gc51SWy3J7FNapvMNrltCtuUtqk+3K9tats0tmlt/Wz9bdPZBtgG2gbZprcNtg2xDbXNYJvRNpNtZtsstllts9lmt81hm9PjuiQM7/GL3Z7LNrdtHtu8tvls89sWsC1oW8i2sG0R26K2xWyL25awLWlbyra0bRnbsrblbMvbVrCtaFvJtrJtFduqttVsq9vW8LguX4X3+MVuD7OtZVvbto5tXdt6tvVtG9g2tG1k29i2iW1T22a2zW1b2La0bWXb2raNbVvbdrbtbTvYdrTtZNvZtottV9tutt09rsvX4T1+sdt72Pa07WXb27aPbV/bfrb9bQfYDrQdZDvYdojtUNthtsNtR9iOtB1lO9p2jO1Y23G2420n2E60nWQ72XaK7VTbaR7X5ZvwHr/Y7dNtZ9jOtJ1lO9t2ju1c23m2820X2C60XWS72HaJ7VLbZbbLbVfYrrRdZbvado3tWtt1tuttN9hutN1ku9l2i+1Wj+vybXiPX+z2bbbbbXfY7rTdZbvbdo/tXtt9tvttD9getD1ke9j2iO1R22O2x21P2J60PWV72vaM7Vnbc7bnbS/YXrS9ZHvZ9orHdfkuvMcvdvtV22u2121v2N60vWV72/aO7V3be7b3bR/YPrR9ZPvY9ontU9tnts9tX9i+tH1l+9r2je1b23e2722dDyY462sbwTZihH+uy/fhPX6x2yPbRrGNahvNNrptDNuYtrFsY9vGsY1r+5ltPNv4tp/bfmGbwPZL24S2X9l+bfuN7be239l+b/uD7Y+2iWx/sv3Z9heP6/JDeI9f7PYktkltk9kmt01hm9I21Yf7tU1tm8Y2ra2frb9tOtsA20DbINv0tsG2IbahthlsM9pmss1sm8U2q2022+y2OWxzelyXH8N7/GK357LNbZvHNq9tPtv8tgVsC9oWsi1sW8S2qG0x2+K2JWxL2payLW1bxrasbTnb8rYVbCvaVrKtbFvFtqptNdvqtjU8rkui8B6/2O1htrVsa9vWsa1rW8+2vm0D24a2jWwb2zaxbWrbzLa5bQvblratbFvbtrFta9vOtr1tB9uOtp1sO9t2se1q2822u8d1+Sm8xy92ew/bnra9bHvb9rHta9vPtr/tANuBtoNsB9sOsR1qO8x2uO0I25G2o2xH246xHWs7zna87QTbibaTbCfbTrGdajvN47r8HN7jF7t9uu0M25m2s2xn286xnWs7z3a+7QLbhbaLbBfbLrFdarvMdrntCtuVtqtsV9uusV1ru852ve0G2422m2w3226x3epxXX4J7/GL3b7NdrvtDtudtrtsd9vusd1ru892v+0B24O2h2wP2x6xPWp7zPa47Qnbk7anbE/bnrE9a3vO9rztBduLtpdsL9te8bguicN7/GK3X7W9Znvd9obtTdtbtrdt79jetb1ne9/2ge1D20e2j22f2D61fWb73PaF7UvbV7avbd/YvrV9Z/ve1vmLGmd9bSPYRoz4z3VJEt7jF7s9sm0U26i20Wyj28awjWkbyza2bRzbuLaf2cazjW/7ue0Xtglsv7RNaPuV7de239h+a/ud7fe2P9j+aJvI9ifbn21/8bguScN7/GK3J7FNapvMNrltCtuUtqk+3K9tats0tmlt/Wz9bdPZBtgG2gbZprcNtg2xDbXNYJvRNpNtZtsstllts9lmt81hm9PjuiQL7/GL3Z7LNrdtHtu8tvls89sWsC1oW8i2sG0R26K2xWyL25awLWlbyra0bRnbsrblbMvbVrCtaFvJtrJtFduqttVsq9vW8LguycN7/GK3h9nWsq1tW8e2rm092/q2DWwb2jaybWzbxLapbTPb5rYtbFvatrJtbdvGtq1tO9v2th1sO9p2su1s28W2q2032+4e1yVFeI9f7PYetj1te9n2tu1j29e2n21/2wG2A20H2Q62HWI71HaY7XDbEbYjbUfZjrYdYzvWdpzteNsJthNtJ9lOtp1iO9V2msd1SRne4xe7fbrtDNuZtrNsZ9vOsZ1rO892vu0C24W2i2wX2y6xXWq7zHa57QrblbarbFfbrrFda7vOdr3tBtuNtptsN9tusd3qcV1Shff4xW7fZrvddoftTttdtrtt99jutd1nu9/2gO1B20O2h22P2B61PWZ73PaE7UnbU7anbc/YnrU9Z3ve9oLtRdtLtpdtr3hcl1/De/xit1+1vWZ73faG7U3bW7a3be/Y3rW9Z3vf9oHtQ9tHto9tn9g+tX1m+9z2he1L21e2r23f2L61fWf73tb5xBJnfW0j2EaM9M91SR3J5z/efG2z2Qb4pQ8MDAtOF+Yf4F/NL11o9ZAgv8Cg6ulD/EP8g0KCaqYLCQgICwkMCQ6tHhrsF+ofGBDmXysoNKCW3/+8pYn0z335/V++/dfjLDtHZNsotlFto9lGt41hG9M2lm1s2zi2aSDr/PqlDef3dVy7/TPbeLbxbT+3/cI2ge2Xtgltv7L92vYb229tv7P93vYH2x9tE9n+ZPuz7S+2iW2T2Ca1TWab3DaFbUrbVB/Ob5vaNq3HdfHzuC4R7bok9rH3Z/vh85c+U/4f/TmI4POffw78/u/e/KP6eO/PVDrv/Zly/qry77M695nIrtWHszu3JfQJ/8077z8w4NPcb/pan+h+wz7N/QYHfqL7TfeJroP/J7rfT/T74VNd30/2+7fGJ7rfT/TrFhzAut+gT/XnIugT3W/wJ7rfUNav26f6c/ypft2Cab/PnE9R+vv/Z8J7+/h9pA8NDa3pH+aXrrpfSLXAwOBqgekDgtIHBAYF1KgekD7UP7RGaM2awf5BfgEB6WvVCK4RWDNd9aB0tUI+3J+vV+1+/v5e/H+N/+3s/6fGT3X2xD7eP7u3jUkAxmQAY3KAMQXAmBJgTAUw/gowpgYY0wCMaQFGP4DRH2BMBzAGAIyBAGMQwJgeYAwGGEMAxlCAMQPAmBFgzAQwZgYYswCMWQHGbABjdoAxB8CYE2D8DWDMBTDmBhjzAIx5AcZ8AGN+gLEAwFgQYCwEMBYGGIsAjEUBxmIAY3GAsQTAWBJgLAUwlgYYywCMZQHGcgBjeYCxAsBYEWCsBDBWBhirAIxVAcZqAGN1gLEGwFgTYAwDGGsBjLUBxjoAY12AsR7AWB9gbAAwNgQYGwGMjQHGJgBjU4CxGcDYHGBsATC2BBhbAYytAcY2AGNbgLEdwNgeYOwAMHYEGDsBjJ0Bxi4AY1eAsRvA2B1g/B1g7AEw9gQYewGMvQHGPgBjX4CxH8DYH2AcADAOBBgHAYyDAcYhAONQgHEYwDgcYBwBMI4EGEcBjKMBxjEA41iAcRzAOB5gnAAwTgQYJwGMkwHGKQDjVIBxGsD4B8A4HWCcATDOBBhnAYyzAcY5AONcgHEewDgfYFwAMC4EGBcBjIsBxiUA41KAcRnAuBxgXAEwrgQYVwGMqwHGNQDjWoBxHcC4HmDcADBuBBg3AYybAcYtAONWgPFPgHEbwLgdYNwBMO4EGHcBjLsBxj0A416AcR/AuB9gPAAwHgQYDwGMhwHGIwDjUYDxGMB4HGA8ATCeBBhPAYynAcYzAONZgPEcwHgeYLwAMF4EGC8BjJcBxisA418A41WA8RrAeB1gvAEw3gQYbwGMtwHGOwDjXYDxHsB4H2B8ADA+BBgfAYyPAcYnAONTgPEZwPgcYHwBML4EGF8BjK8BxjcA41uA8R3A+B5gdO7w3270BRgjAIwRAcZIAGNkgDEKwBgVYIwGMEYHGGMAjDEBxlgAY2yAMQ7AGBdg/AxgjAcwxgcYPwcYvwAYEwCMXwKMCQHGrwDGrwHGbwDGbwHG7wDG7wHGHwDGHwHGRADjTwDjzwDjLwBjYoAxCcCYFGBMBjAmBxhTAIwpAcZUAOOvAGNqgDENwJgWYPQDGP0BxnQAYwDAGAgwBgGM6QHGYIAxBGAMBRgzAIwZAcZMAGNmgDELwJgVYMwGMGYHGHMAjDkBxt8AxlwAY26AMQ/AmBdgzAcw5gcYCwCMBQHGQgBjYYCxCMBYFGAsBjAWBxhLAIwlAcZSAGNpgLEMwFgWYCwHMJYHGCsAjBUBxkoAY2WAsQrAWBVgrAYwVgcYawCMNQHGMICxFsBYG2CsAzDWBRjrAYz1AcYGAGNDgLERwNgYYGwCMDYFGJsBjM0BxhYAY0uAsRXA2BpgbAMwtgUY2wGM7QHGDgBjR4CxE8DYGWDsAjB2BRi7AYzdAcbfAcYeAGNPgLEXwNgbYOwDMPYFGPsBjP0BxgEA40CAcRDAOBhgHAIwDgUYhwGMwwHGEQDjSIBxFMA4GmAcAzCOBRjHAYzjAcYJAONEgHESwDgZYJwCME4FGKcBjH8AjNMBxhkA40yAcRbAOBtgnAMwzgUY5wGM8wHGBQDjQoBxEcC4GGBcAjAuBRiXAYzLAcYVAONKgHEVwLgaYFwDMK4FGNcBjOsBxg0A40aAcRPAuBlg3AIwbgUY/wQYtwGM2wHGHQDjToBxF8C4G2DcAzDuBRj3AYz7AcYDAONBgPEQwHgYYDwCMB4FGI8BjMcBxhMA40mA8RTAeBpgPAMwngUYzwGM5wHGCwDjRYDxEsB4GWC8AjD+BTBeBRivAYzXAcYbAONNgPEWwHgbYLwDMN4FGO8BjPcBxgcA40OA8RHA+BhgfAIwPgUYnwGMzwHGFwDjS4DxFcD4GmB8AzC+BRjfAYzvAUafCP9+oy/AGAFgjAgwRgIYIwOMUQDGqABjNIAxOsAYA2CMCTDGAhhjA4xxAMa4AONnAGM8gDE+wPg5wPgFwJgAYPwSYEwIMH4FMH4NMH4DMH4LMH4HMH4PMP4AMP4IMCYCGH8CGH8GGH8BGBMDjEkAxqQAYzKAMTnAmAJgTAkwpgIYfwUYUwOMaQDGtACjH8DoDzCmAxgDAMZAgDEIYEwPMAYDjCEAYyjAmAFgzAgwZgIYMwOMWQDGrABjNoAxO8CYA2DMCTD+BjDmAhhzA4x5AMa8AGM+gDE/wFgAYCwIMBYCGAsDjEUAxqIAYzGAsTjAWAJgLAkwlgIYSwOMZQDGsgBjOYCxPMBYAWCsCDBWAhgrA4xVAMaqAGM1gLE6wFgDYKwJMIYBjLUAxtoAYx2AsS7AWA9grA8wNgAYGwKMjQDGxgBjE4CxKcDYDGBsDjC2ABhbAoytAMbWAGMbgLEtwNgOYGwPMHYAGDsCjJ0Axs4AYxeAsSvA2A1g7A4w/g4w9gAYewKMvQDG3gBjH4CxL8DYD2DsDzAOABgHAoyDAMbBAOMQgHEowDgMYBwOMI4AGEcCjKMAxtEA4xiAcSzAOA5gHA8wTgAYJwKMkwDGyQDjFIBxKsA4DWD8A2CcDjDOABhnAoyzAMbZAOMcgHEuwDgPYJwPMC4AGBcCjIsAxsUA4xKAcSnAuAxgXA4wrgAYVwKMqwDG1QDjGoBxLcC4DmBcDzBuABg3AoybAMbNAOMWgHErwPgnwLgNYNwOMO4AGHcCjLsAxt0A4x6AcS/AuA9g3A8wHgAYDwKMhwDGwwDjEYDxKMB4DGA8DjCeABhPAoynAMbTAOMZgPEswHgOYDwPMF4AGC8CjJcAxssA4xWA8S+A8SrAeA1gvA4w3gAYbwKMtwDG2wDjHYDxLsB4D2C8DzA+ABgfAoyPAMbHAOMTgPEpwPgMYHwOML4AGF8CjK8AxtcA4xuA8S3A+A5gfA8w+kT89xt9AcYIAGNEgDESwBgZYIwCMEYFGKMBjNEBxhgAY0yAMRbAGBtgjAMwxgUYPwMY4wGM8QHGzwHGLwDGBADjlwBjQoDxK4Dxa4DxG4DxW4DxO4Dxe4DxB4DxR4AxEcD4E8D4M8D4C8CYGGBMAjAmBRiTAYzJAcYUAGNKgDEVwPgrwJgaYEwDMKYFGP0ARn+AMR3AGAAwBgKMQQBjeoAxGGAMARhDAcYMAGNGgDETwJgZYMwCMGYFGLMBjNkBxhwAY06A8TeAMRfAmBtgzAMw5gUY8wGM+QHGAgBjQYCxEMBYGGAsAjAWBRiLAYzFAcYSAGNJgLEUwFgaYCwDMJYFGMsBjOUBxgoAY0WAsRLAWBlgrAIwVgUYqwGM1QHGGgBjTYAxDGCsBTDWBhjrAIx1AcZ6AGN9gLEBwNgQYGwEMDYGGJsAjE0BxmYAY3OAsQXA2BJgbAUwtgYY2wCMbQHGdgBje4CxA8DYEWDsBDB2Bhi7AIxdAcZuAGN3gPF3gLEHwNgTYOwFMPYGGPsAjH0Bxn4AY3+AcQDAOBBgHAQwDgYYhwCMQwHGYQDjcIBxBMA4EmAcBTCOBhjHAIxjAcZxAON4gHECwDgRYJwEME4GGKcAjFMBxmkA4x8A43SAcQbAOBNgnAUwzgYY5wCMcwHGeQDjfIBxAcC4EGBcBDAuBhiXAIxLAcZlAONygHEFwLgSYFwFMK4GGNcAjGsBxnUA43qAcQPAuBFg3AQwbgYYtwCMWwHGPwHGbQDjdoBxB8C4E2DcBTDuBhj3AIx7AcZ9AON+gPEAwHgQYDwEMB4GGI8AjEcBxmMA43GA8QTAeBJgPAUwngYYzwCMZwHGcwDjeYDxAsB4EWC8BDBeBhivAIx/AYxXAcZrAON1gPEGwHgTYLwFMN4GGO8AjHcBxnsA432A8QHA+BBgfAQwPgYYnwCMTwHGZwDjc4DxBcD4EmB8BTC+BhjfAIxvAcZ3AON7gNEn0r/f6AswRgAYIwKMkQDGyABjFIAxKsAYDWCMDjDGABhjAoyxAMbYAGOcT2CMbxvV55+3RN4yh/gFRnbuJNL/3FekSD7/8ea8zwjefp+Bfn7O/Ub09v06/+7/5yhe9PoHO/cb+RN4o+g+otl9xXXs0f77+kf5BO/X1+P6f7jvD9+P8v/gfUf+6H1H/uh9R/f55/d9zbDqLWsXbFy7TN0WdYo2C6tVt42vx8/+8DM8fyyCx499+HZCjx/78DvkbsT//uc97yfh/8+Pf/h5zhX68Av2zse7f/I//GmP5HHGD+8rosft8Wzj2O2ezr/fsnkH5R/R5z9/y/h4XBxvvh9fH+//K/QTXI8gX4/fCP/b+0gfGhpa0z/ML111v5BqgYHB1QLTBwSlDwgMCqhRPSB9qH9ojdCaNYP9g/wCAtLXqhFcI7BmuupB6WqFfKpr7B/p011jbxk/1dkT+/z7H0YkARiTAYzJAcYUAGNKgDEVwPgrwJgaYEwDMKYFGP0ARn+AMR3AGAAwBgKMQQBjeoAxGGAMARhDAcYMAGNGgDETwJgZYMwCMGYFGLMBjNkBxhwAY06A8TeAMRfAmBtgzAMw5gUY8wGM+QHGAgBjQYCxEMBYGGAsAjAWBRiLAYzFAcYSAGNJgLEUwFgaYCwDMJYFGMsBjOUBxgoAY0WAsRLAWBlgrAIwVgUYqwGM1QHGGgBjTYAxDGCsBTDWBhjrAIx1AcZ6AGN9gLEBwNgQYGwEMDYGGJsAjE0BxmYAY3OAsQXA2BJgbAUwtgYY2wCMbQHGdgBje4CxA8DYEWDsBDB2Bhi7AIxdAcZuAGN3gPF3gLEHwNgTYOwFMPYGGPsAjH0Bxn4AY3+AcQDAOBBgHAQwDgYYhwCMQwHGYQDjcIBxBMA4EmAcBTCOBhjHAIxjAcZxAON4gHECwDgRYJwEME4GGKcAjFMBxmkA4x8A43SAcQbAOBNgnAUwzgYY5wCMcwHGeQDjfIBxAcC4EGBcBDAuBhiXAIxLAcZlAONygHEFwLgSYFwFMK4GGNcAjGsBxnUA43qAcQPAuBFg3AQwbgYYtwCMWwHGPwHGbQDjdoBxB8C4E2DcBTDuBhj3AIx7AcZ9AON+gPEAwHgQYDwEMB4GGI8AjEcBxmMA43GA8QTAeBJgPAUwngYYzwCMZwHGcwDjeYDxAsB4EWC8BDBeBhivAIx/AYxXAcZrAON1gPEGwHgTYLwFMN4GGO8AjHcBxnsA432A8QHA+BBgfAQwPgYYnwCMTwHGZwDjc4DxBcD4EmB8BTC+BhjfAIxvAcZ3AON7gNG5w3+70RdgjAAwRgQYIwGMkQHGKABjVIAxGsAYHWCMATDGBBhjAYyxAcY4AGNcgPEzgDEewBgfYPwcYPwCYEwAMH4JMCYEGL8CGL8GGL8BGL8FGL8DGL8HGH8AGH8EGBMBjD8BjD8DjL8AjIkBxiQAY1KAMRnAmBxgTAEwpgQYUwGMvwKMqQHGNABjWoDRD2D0BxjTAYwBAGMgwBgEMKYHGIMBxhCAMRRgzAAwZgQYMwGMmQHGLABjVoAxG8CYHWDMATDmBBh/AxhzAYy5AcY8AGNegDEfwJgfYCwAMBYEGAsBjIUBxiIAY1GAsRjAWBxgLAEwlgQYSwGMpQHGMgBjWYCxHMBYHmCsADBWBBgrAYyVAcYqAGNVgLEawFgdYKwBMNYEGMMAxloAY22AsQ7AWBdgrAcw1gcYGwCMDQHGRgBjY4CxCcDYFGBsBjA2BxhbAIwtAcZWAGNrgLENwNgWYGwHMLYHGDsAjB0Bxk4AY2eAsQvA2BVg7AYwdgcYfwcYewCMPQHGXgBjb4CxD8DYF2DsBzD2BxgHAIwDAcZBAONggHEIwDgUYBwGMA4HGEcAjCMBxlEA42iAcQzAOBZgHAcwjgcYJwCMEwHGSQDjZIBxCsA4FWCcBjD+ATBOBxhnAIwzAcZZAONsgHEOwDgXYJwHMM4HGBcAjAsBxkUA42KAcQnAuBRgXAYwLgcYVwCMKwHGVQDjaoBxDcC4FmBcBzCuBxg3AIwbAcZNAONmgHELwLgVYPwTYNwGMG4HGHcAjDsBxl0A426AcQ/AuBdg3Acw7gcYDwCMBwHGQwDjYYDxCMB4FGA8BjAeBxhPAIwnAcZTAONpgPEMwHgWYDwHMJ4HGC8AjBcBxksA42WA8QrA+BfAeBVgvAYwXgcYbwCMNwHGWwDjbYDxDsB4F2C8BzDeBxgfAIwPAcZHAONjgPEJwPgUYHwGMD4HGF8AjC8BxlcA42uA8Q3A+BZgfAcwvgcYfSL8+42+AGMEgDEiwBgJYIwMMEYBGKMCjNEAxugAYwyAMSbAGAtgjA0wxgEY4wKMnwGM8QDG+ADj5wDjFwBjAoDxS4AxIcD4FcD4NcD4DcD4LcD4HcD4PcD4A8D4I8CYCGD8CWD8GWD8BWBMDDAmARiTAozJAMbkAGMKgDElwJgKYPwVYEwNMKYBGNMCjH4Aoz/AmA5gDAAYAwHGIIAxPcAYDDCGAIyhAGMGgDEjwJgJYMwMMGYBGLMCjNkAxuwAYw6AMSfA+BvAmAtgzA0w5gEY8wKM+QDG/ABjAYCxIMBYCGAsDDAWARiLAozFAMbiAGMJgLEkwFgKYCwNMJYBGMsCjOUAxvIAYwWAsSLAWAlgrAwwVgEYqwKM1QDG6gBjDYCxJsAYBjDWAhhrA4x1AMa6AGM9gLE+wNgAYGwIMDYCGBsDjE0AxqYAYzOAsTnA2AJgbAkwtgIYWwOMbQDGtgBjO4CxPcDYAWDsCDB2Ahg7A4xdAMauAGM3gLE7wPg7wNgDYOwJMPYCGHsDjH0Axr4AYz+AsT/AOABgHAgwDgIYBwOMQwDGoQDjMIBxOMA4AmAcCTCOAhhHA4xjAMaxAOM4gHE8wDgBYJwIME4CGCcDjFMAxqkA4zSA8Q+AcTrAOANgnAkwzgIYZwOMcwDGuQDjPIBxPsC4AGBcCDAuAhgXA4xLAMalAOMygHE5wLgCYFwJMK4CGFcDjGsAxrUA4zqAcT3AuAFg3AgwbgIYNwOMWwDGrQDjnwDjNoBxO8C4A2DcCTDuAhh3A4x7AMa9AOM+gHE/wHgAYDwIMB4CGA8DjEcAxqMA4zGA8TjAeAJgPAkwngIYTwOMZwDGswDjOYDxPMB4AWC8CDBeAhgvA4xXAMa/AMarAOM1gPE6wHgDYLwJMN4CGG8DjHcAxrsA4z2A8T7A+ABgfAgwPgIYHwOMTwDGpwDjM4DxOcD4AmB8CTC+AhhfA4xvAMa3AOM7gPE9wOgT8d9v9AUYIwCMEQHGSABjZIAxCsAYFWCMBjBGBxhjAIwxAcZYAGNsgDEOwBgXYPwMYIwHMMYHGD8HGL8AGBMAjF8CjAkBxq8Axq8Bxm8Axm8Bxu8Axu8Bxh8Axh8BxkQA408A488A4y8AY2KAMQnAmBRgTAYwJgcYUwCMKQHGVADjrwBjaoAxDcCYFmD0Axj9AcZ0AGMAwBgIMAYBjOkBxmCAMQRgDAUYMwCMGQHGTABjZoAxC8CYFWDMBjBmBxhzAIw5AcbfAMZcAGNugDEPwJgXYMwHMOYHGAsAjAUBxkIAY2GAsQjAWBRgLAYwFgcYSwCMJQHGUgBjaYCxDMBYFmAsBzCWBxgrAIwVAcZKAGNlgLEKwFgVYKwGMFYHGGsAjDUBxjCAsRbAWBtgrAMw1gUY6wGM9QHGBgBjQ4CxEcDYGGBsAjA2BRibAYzNAcYWAGNLgLEVwNgaYGwDMLYFGNsBjO0Bxg4AY0eAsRPA2Blg7AIwdgUYuwGM3QHG3wHGHgBjT4CxF8DYG2DsAzD2BRj7AYz9AcYBAONAgHEQwDgYYBwCMA4FGIcBjMMBxhEA40iAcRTAOBpgHAMwjgUYxwGM4wHGCQDjRIBxEsA4GWCcAjBOBRinAYx/AIzTAcYZAONMgHEWwDgbYJwDMM4FGOcBjPMBxgUA40KAcRHAuBhgXAIwLgUYlwGMywHGFQDjSoBxFcC4GmBcAzCuBRjXAYzrAcYNAONGgHETwLgZYNwCMG4FGP8EGLcBjNsBxh0A406AcRfAuBtg3AMw7gUY9wGM+wHGAwDjQYDxEMB4GGA8AjAeBRiPAYzHAcYTAONJgPEUwHgaYDwDMJ4FGM8BjOcBxgsA40WA8RLAeBlgvAIw/gUwXgUYrwGM1wHGGwDjTYDxFsB4G2C8AzDeBRjvAYz3AcYHAONDgPERwPgYYHwCMD4FGJ8BjM8BxhcA40uA8RXA+BpgfAMwvgUY3wGM7wFGn0j/fqMvwBgBYIwIMEYCGCMDjFEAxqgAYzSAMTrAGANgjAkwxgIYYwOMcbxo9PUwRrBvB+j+A9Wv9v2oPv+8JfLWOYJr+Ud27iTS/9yX8/FKz7cYHp4P/4zzYx/+Md9I/9giedsW6JfOud/I3r5f579tuo8vfT6hPTis1iey/31Nonr/fv/+PRjN7iuK3feH9xPZ41pF//Br78VfD8/37Wt9eD8ffjyix7cT+PzzFt3j2xE8nM5bTDvLx/+c57cjffRzYnncHiWccyfy8rk//nMd9SOj44th346r7kf977NG+US2yB/ZIn90XRxjfPt2WMO6LUo1CmtUo1nbJi3CahZsXNvX42d/+BmeP+b5L5sI4fy4r88/vzp3I/73z/nwz3je54d/7hP9iqWL4fOfv2I+H73/D+/vw9sHg/Nzonnf4/+Jzvn3fzVjeJzj49+VsTxu9/xTEuMTnNHz3wYf7vvD92OE877f+Xj3OsT8X65DzHAsMf8fXwdPQ/SPrDE8bo/m8WMRPjqL53/ZPf/5j39/e+9DRx5vET7BfX+4rwC/9IGBYcHpwvwD/Kv5pQutHhLkFxhUPX2If4h/UEhQzXQhAQFhIYEhwaHVQ4P9Qv0DA8L8awWFBtSyOwv6BA9HP8WZfb145vSQM0fw4pmDIWeO6MUzh0DOHMmLZw6FnDmyF8+cAXLmKF48c0bImaN68cyZIGf2i+S9M2eGnDmNF8+cxYVnzurCM2dz4Zmzu/DMOVx45pwuPPNvLjxzLheeObcLz5zHhWfO68Iz53PhmfO78MwFXHjmgi48cyEXnrmwC89cxIVnLurCMxdz4ZmLu/DMJVx45pIuPHMpF565tAvPXMaFZy7rwjOXc+GZy7vwzBVceOaKLjxzJReeubILz1zFhWeu6sIzV3Phmau78Mw1XHjmmi48c5gLz1zLhWeu7cIz13Hhmeu68Mz1XHjm+i48cwMXnrmhC8/cyIVnbuzCMzdx4ZmbuvDMzVx45uYuPHMLF565pQvP3MqFZ27twjO3ceGZ27rwzO1ceOb2LjxzBxeeuaMLz9zJhWfu7MIzd3Hhmbu68MzdXHjm7i488+8uPHMPF565pwvP3MuFZ+7twjP3ceGZ+7rwzP1ceOb+LjzzABeeeaALzzzIhWce7MIzD3HhmYe68MzDXHjm4S488wgXnnmkC888yoVnHu3CM49x4ZnHuvDM41x45vEuPPMEF555ogvPPMmFZ57swjNPceGZp7rwzNNceOY/XHjm6S488wzImf29eOaZLvx1ngU5szdf42e2C3+d57jwzHNdeOZ5LjzzfBeeeYELz7zQhWde5MIzL3bhmZe48MxLXXjmZS4883IXnnmFC8+80oVnXuXCM6924ZnXuPDMa1145nUuPPN6F555gwvPvNGFZ97kwjNvduGZt7jwzFtdeOY/XXjmbS4883YXnnmHC8+804Vn3uXCM+924Zn3uPDMe1145n0uPPN+F575gAvPfNCFZz7kwjMfduGZj7jwzEddeOZjLjzzcRee+YQLz3zShWc+5cIzn3bhmc+48MxnXXjmcy4883kXnvmCC898EXLmdF488yUX/jpfduGZr7jwzH+58MxXXXjmay4883XImaP5eO/MNyBnju7FM9+EnDmGF898C3LmmF48823ImWN58cx3IGeO7cUz34WcOY4Xz3wPcua4XjzzfciZP/PimR9AzhzPi2d+CDlzfC+e+RHkzJ978cyPIWf+wotnfgI5cwIvnvkp5MxfevHMzyBnTujFMz+HnPkrL575BeTMX3vxzC8hZ/7Gi2d+BTnzt14882vImb/z4pnfQM78vRfP/BZy5h+8eOZ3kDP/6MUzv4ecOZEXz+wTmXHmn7x4Zl/ImX/24pkjQM78ixfPHNGLZ/bVfUS0+4ob6Z/z+9o1cG5zfljv0ieKcp6P1vl7KOfvZZy/p3A+bu98HNv5uK7zcU7n437Ox8Gcjws5HydxPm7g/H+08/+Vzv9nOf/f4TwOdx6XOo/TnMctzn/Hnf+uOf+ed/69l0g5fy6c3yfOdUuskqikKplKrlKolCqV+lWlVmlUWueaKH+VzrnWKlAFqfQqWIWoUJVBZVSZVGaVRWW1X6fsKofKqX5TuVRulUflVflUflVAFVSFVGFVRBVVxVRxVUKVVKVUaVVGlVXlVHlVQVVUlVRlVUVVVdVUdVVD1VRhqpaqreqouqqeqq8aqIaqkWqsmqimqplqrlqolqqVaq3aqLaqnWqvOqiOqpPqrLqorqqb6q5+Vz1UT9VL9VZ9VF/VT/VXA9RANUgNVkPUUDVMDVcj1Eg1So1WY9RYNU6NVxPURDVJTVZT1FQ1Tf2hpqsZaqaapWarOWqumqfmqwVqoVqkFqslaqlapparFWqlWqVWqzVqrVqn1qsNaqPapDarLWqr+lNtU9vVDrVT7VK71R61V+1T+9UBdVAdUofVEXVUHVPH1Ql1Up1Sp9UZdVadU+fVBXVRXVKX1RX1l7qqrqnr6oa6qW6p2+qOuqvuqfvqgXqoHqnH6ol6qp6p5+qFeqleqdfqjXqr3qn3yvnD76siqIgqkoqsoqioKpqKrmKomCqWiq3iqLjqMxVPxVefqy9UAvWlSqi+Ul+rb9S36jv1vfpB/agSqZ/Uz+oXlVglUUlVMpVcpVApVSr1q0qt0qi0yvmXmr9KpwJUoApS6VWwClGhKoPKqDKpzCqLyqqyqewqh8qpflO5VG6VR+VV+VR+VUAVVIVUYVVEFVXFVHFVQpVUpVRpVUaVVeVUeVVBVVSVVGVVRVVV1VR1VUPVVGGqlqqt6qi6qp6qrxqohqqRaqyaqKaqmWquWqiWqpVqrdqotqqdaq86qI6qk+qsuqiuqpvqrn5XPVRP1Uv1Vn1UX9VP9VcD1EA1SA1WQ9RQNUwNVyPUSDVKjVZj1Fg1To1XE9RENUlNVlPUVDVN/aGmqxlqppqlZqs5aq6ap+arBWqhWqQWqyVqqVqmlqsVaqVapVarNWqtWqfWqw1qo9qkNqstaqv6U21T29UOtVPtUrvVHrVX7VP71QF1UB1Sh9URdVQdU8fVCXVSnVKn1Rl1Vp1T59UFdVFdUpfVFfWXuqquqevqhrqpbqnb6o66q+6p++qBeqgeqcfqiXqqnqnn6oV6qV6p1+qNeqveqffK+Q+/r4qgIqpIKrKKoqKqaCq6iqFiqlgqtoqj4qrPVDwVX32uvlAJ1JcqofpKfa2+Ud+q79T36gf1o0qkflI/q19UYpVEJVXJVHKVQqVUqdSvKrVKo9IqP+Wv0qkAFaiCVHoVrEJUqMqgMqpMKrPKorKqbCq7yqFyqt9ULpVb5VF5VT6VXxVQBVUhVVgVUUVVMVVclVAlVSlVWpVRZVU5VV5VUBVVJVVZVVFVVTVVXdVQNVWYqqVqqzqqrqqn6qsGqqFqpBqrJqqpaqaaqxaqpWqlWqs2qq1qp9qrDqqj6qQ6qy6qq+qmuqvfVQ/VU/VSvVUf1Vf1U/3VADVQDVKD1RA1VA1Tw9UINVKNUqPVGDVWjVPj1QQ1UU1Sk9UUNVVNU3+o6WqGmqlmqdlqjpqr5qn5aoFaqBapxWqJWqqWqeVqhVqpVqnVao1aq9ap9WqD2qg2qc1qi9qq/lTb1Ha1Q+1Uu9RutUftVfvUfnVAHVSH1GF1RB1Vx9RxdUKdVKfUaXVGnVXn1Hl1QV1Ul9RldUX9pa6qa+q6uqFuqlvqtrqj7qp76r56oB6qR+qxeqKeqmfquXqhXqpX6rV6o96qd+q9ch70+6oIKqKKpCKrKCqqiqaiqxgqpoqlYqs4Kq76TMVT8dXn6guVQH2pEqqv1NfqG/Wt+k59r35QP6pE6if1s/pFJVZJVFKVTCVXKVRKlUr9qlKrNCqt8lP+Kp0KUIEqSKVXwSpEhaoMKqPKpDKrLCqryqayqxwqp/pN5VK5VR6VV+VT+VUBVVAVUoVVEVVUFVPFVQlVUpVSpVUZVVaVU+VVBVVRVVKVVRVVVVVT1VUNVVOFqVqqtqqj6qp6qr5qoBqqRqqxaqKaqmaquWqhWqpWqrVqo9qqdqq96qA6qk6qs+qiuqpuqrv6XfVQPVUv1Vv1UX1VP9VfDVAD1SA1WA1RQ9UwNVyNUCPVKDVajVFj1Tg1Xk1QE9UkNVlNUVPVNPWHmq5mqJlqlpqt5qi5ap6arxaohWqRWqyWqKVqmVquVqiVapVardaotWqdWq82qI1qk9qstqit6k+1TW1XO9ROtUvtVnvUXrVP7VcH1EF1SB1WR9RRdUwdVyfUSXVKnVZn1Fl1Tp1XF9RFdUldVlfUX+qquqauqxvqprqlbqs76q66p+6rB+qheqQeqyfqqXqmnqsX6qV6pV6rN+qteqfeK+d/+H1VBBVRRVKRVRQVVUVT0VUMFVPFUrFVHI+PHxywDdKPpVfBKkSFqgwqo8qkMqssKqvzMUqVXeVQOdVvKpfKrfKovCqfyq8KqIKqkCqsiqiiqpgqrkqokqqUKq3KqLKqnCqvKqiKqpKqrKqoqqqaqq5qqJoqTNVStVUdVVfVU/VVA9VQNVKNVRPVVDVTzVUL1VK1Uq1VG9VWtVPtVQfVUXVSnVUX1VV1U93V76qH6ql6qd6qj+qr+qn+aoAaqAapwcp5DXvnNd2d1zh3XvPbeQ1s5zWhnddIdl4z2HkNXec1ZZ3XWHVec9R5DU7nNSmd12h0XrPQeQ0/5zXtnNd4c17zzHkNMOc1sZzXiHJeM8l5DSHnNXWc15hxXnPFeQ2SBcp5jQrnNRuc1zBwntPfeY575znfnedAd54T3HmObOc5o53nUHaeU9h5jl3nOWed52B1npPUeY5O5zkrnedwdJ7T0HmOP+c575zngHOeE815jjDnObOc55BynlPJeY4h5zl3nOegcZ6TxXmOEuc5O5znsHCe08F5jgPna/6dr4F3vibc+Rpp52uGna+hdb6m1PkaS+drDp2vwXO+Js35Gi3na5acr+FxvqbF+RoP52senK8BcD4n3vkccedzpp3PIXY+p9b5HFPncy6dz0F0PifP+Rw153O2nM9hcj6nx/kcF+dzPpzPgXA+J8D5O3Ln74ydv0N1/k7R+Ts25++cnL+Dcf5OwvkYvfNBNudjuM7HNJ2P8fn+88fp749rOW/f2VZr0SKsYZMWiVo0TlStZs1Ereu2qJOocauwZrUaNG7t8/8BDtcd4PccBgA=",
2567
- "debug_symbols": "1ZnNaoNAFIXfZdYS5v7Mn69SughtCoGQlMad+O7V1tFIB4QpLZyVCufMPd47zAfam8vt5didb9e7aXtDZNqn3tzfj9fp8d4dPzrT2sacrq/jdWjM2/lyMi2FODQ/dJRCmKWUUlrUqgUxS+RZzCqrmGxxaVKveW1yHDf658YQwyYX2OQKm9zBJvewyQNs8gibPKEmZwubHJahDMtQhmUowzKUYRnKsAxlWIYyLEMZlqECy1CBZajAMlRgGSqwDBVYhgosQwWWoQLLUIFlqMIyVGEZqrAMVViG6j8y1JHPyV3wv05eZCiJLC4NtJPfc44f6aGVPnwVKKKOgqRcIKS4UyByyNOKYh/aOd5PJcLflyjCgxLlNrEl3ZSYTMVzmy2vpuj39oa65S2c8Lo35DvWoRyMhJepiyyuFGdXqnKRrbNRna14kFFcG5JoHWvMDSn/EdrYWAo2rbO5OpuvsKVD+Rvjzh4ZbVJnK7fEervOzW7mNgyf"
2568
- }
2569
- ],
2570
- "events": [],
2571
- "file_map": {
2572
- "43": {
2573
- "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log);\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n",
2574
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/log.nr"
2575
- },
2576
- "44": {
2577
- "source": "use dep::protocol_types::{\n abis::{\n call_context::CallContext,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n },\n address::{AztecAddress, EthAddress},\n contrakt::deployment_data::ContractDeploymentData,\n hash::hash_args,\n traits::{Hash, Serialize},\n header::Header,\n};\n\n// docs:start:private-global-variables\nstruct PrivateGlobalVariables {\n chain_id: Field,\n version: Field,\n}\n// docs:end:private-global-variables\n\nimpl Serialize<2> for PrivateGlobalVariables {\n fn serialize(self) -> [Field; 2] {\n [self.chain_id, self.version]\n }\n}\n\n// docs:start:public-global-variables\nstruct PublicGlobalVariables {\n chain_id: Field,\n version: Field,\n block_number: Field,\n timestamp: Field,\n coinbase: EthAddress,\n fee_recipient: AztecAddress,\n}\n// docs:end:public-global-variables\n\nimpl Serialize<6> for PublicGlobalVariables {\n fn serialize(self) -> [Field; 6] {\n [\n self.chain_id,\n self.version,\n self.block_number,\n self.timestamp,\n self.coinbase.to_field(),\n self.fee_recipient.to_field(),\n ]\n }\n}\n\n// PrivateContextInputs are expected to be provided to each private function\n// docs:start:private-context-inputs\nstruct PrivateContextInputs {\n call_context : CallContext,\n historical_header: Header,\n contract_deployment_data: ContractDeploymentData,\n private_global_variables: PrivateGlobalVariables,\n}\n// docs:end:private-context-inputs\n\n// PublicContextInputs are expected to be provided to each public function\n// docs:start:public-context-inputs\nstruct PublicContextInputs {\n call_context: CallContext,\n historical_header: Header,\n\n public_global_variables: PublicGlobalVariables,\n}\n// docs:end:public-context-inputs\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hash for Hasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl Hasher {\n pub fn new()-> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n",
2578
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
2579
- },
2580
- "83": {
2581
- "source": "// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nfn debug_log_oracle<T, N>(_msg: T, _num_args: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_format_oracle<T, N>(_msg: T, _args: [Field; N], _num_args: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_field_oracle(_field: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_array_oracle<T, N>(_arbitrary_array: [T; N]) -> Field {}\n#[oracle(debugLogWithPrefix)]\nfn debug_log_array_with_prefix_oracle<S, T, N>(_prefix: S, _arbitrary_array: [T; N]) -> Field {}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<T>(msg: T) {\n assert(debug_log_oracle(msg, 0) == 0);\n}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\nunconstrained pub fn debug_log_format<T, N>(msg: T, args: [Field; N]) {\n assert(debug_log_format_oracle(msg, args, args.len()) == 0);\n}\n\n/// Example:\n/// `debug_log_field(my_field);`\nunconstrained pub fn debug_log_field(field: Field) {\n assert(debug_log_field_oracle(field) == 0);\n}\n\n/// Example:\n/// `debug_log_array(my_array);`\nunconstrained fn debug_log_array<T, N>(arbitrary_array: [T; N]) {\n assert(debug_log_array_oracle(arbitrary_array) == 0);\n}\n\n/// Example:\n/// `debug_log_array_with_prefix(\"Prefix\", my_array);`\nunconstrained pub fn debug_log_array_with_prefix<S, T, N>(prefix: S, arbitrary_array: [T; N]) {\n assert(debug_log_array_with_prefix_oracle(prefix, arbitrary_array) == 0);\n}\n",
2582
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/debug_log.nr"
2583
- },
2584
- "98": {
2585
- "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::NUM_FIELDS_PER_SHA256,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(_contract_address: AztecAddress, _event_selector: Field, _message: T) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n",
2586
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/logs.nr"
2587
- },
2588
- "100": {
2589
- "source": "use crate::{\n abi::PrivateContextInputs,\n key::nullifier_key::validate_nullifier_key_against_address,\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal,\n context::get_portal_address,\n header::get_header_at,\n nullifier_key::{get_nullifier_key_pair, NullifierKeyPair},\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_call_stack_item::PrivateCallStackItem,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::{\n AztecAddress,\n EthAddress,\n },\n constants::{\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n },\n contract_class::ContractClassId,\n contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n grumpkin_private_key::GrumpkinPrivateKey,\n hash::hash_args,\n header::Header,\n utils::reader::Reader,\n};\nuse dep::std::option::Option;\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n meta_hwm: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n read_requests: BoundedVec<SideEffect, MAX_READ_REQUESTS_PER_CALL>,\n nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n\n nullifier_key: Option<NullifierKeyPair>,\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n meta_hwm: 0,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n read_requests: BoundedVec::new(SideEffect::empty()),\n nullifier_key_validation_requests: BoundedVec::new(NullifierKeyValidationRequest::empty()),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n historical_header: inputs.historical_header,\n\n private_call_stack_hashes: BoundedVec::new(0),\n public_call_stack_hashes: BoundedVec::new(0),\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n\n nullifier_key: Option::none(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n meta_hwm: self.meta_hwm,\n read_requests: self.read_requests.storage,\n nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash: encrypted_logs_hash,\n unencrypted_logs_hash: unencrypted_logs_hash,\n encrypted_log_preimages_length: encrypted_log_preimages_length,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n historical_header: self.historical_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version,\n };\n priv_circuit_pub_inputs\n }\n\n pub fn push_read_request(&mut self, read_request: Field) {\n let side_effect = SideEffect {\n value: read_request,\n counter: self.side_effect_counter,\n };\n self.read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter,\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: nullified_commitment,\n counter: self.side_effect_counter,\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_nullifier_secret_key(&mut self, account: AztecAddress) -> GrumpkinPrivateKey {\n let key_pair = if self.nullifier_key.is_none() {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key);\n let request = NullifierKeyValidationRequest { public_key: key_pair.public_key, secret_key: key_pair.secret_key };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(key_pair);\n key_pair\n } else {\n let key_pair = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(key_pair.account == account, \"Cannot query nullifier key for more than one account per call\");\n key_pair\n };\n key_pair.secret_key\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, content: Field)\n // docs:end:context_message_portal\n {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n msg_key: Field,\n content: Field,\n secret: Field\n )\n // docs:end:context_consume_l1_to_l2_message\n {\n let nullifier = process_l1_to_l2_message(self.historical_header.state.l1_to_l2_message_tree.root, self.this_address(), self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n );\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1;\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) {\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter\n );\n\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs:[0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash:[0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero(),\n },\n is_execution_request: true,\n };\n reader.finish();\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n self.side_effect_counter = self.side_effect_counter + 1;\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n",
2590
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/context/private.nr"
2591
- },
2592
- "108": {
2593
- "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::{ContractClassFunctionLeafPreimage, FunctionLeafPreimage};\nuse crate::contract_class::ContractClassId;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint256::U256;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT,\n ARGS_HASH_CHUNK_LENGTH,\n CONTRACT_TREE_HEIGHT, \n FUNCTION_TREE_HEIGHT, \n NOTE_HASH_TREE_HEIGHT,\n NUM_FIELDS_PER_SHA256,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK,\n GENERATOR_INDEX__CONSTRUCTOR,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__COMMITMENT_NONCE,\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__FUNCTION_ARGS,\n};\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < (args.len() as u32) {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < (args.len() as u32) {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like \n// this because it means we never even need to consider cases where \n// the index is greater than p.\npub fn root_from_sibling_path<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n contract_class_id: ContractClassId,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, contract_class_id };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn read_request_root_from_siblings(\n read_request: Field,\n leaf_index: Field,\n sibling_path: [Field; NOTE_HASH_TREE_HEIGHT]\n) -> Field {\n root_from_sibling_path(read_request, leaf_index, sibling_path)\n}\n\npub fn silo_commitment(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_COMMITMENT\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n portal_contract_address: EthAddress,\n chain_id: Field,\n content: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new(0);\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, portal_contract_address.to_field(), chain_id, content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n //\n // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_integer(previous_log_hash[0]),\n U128::from_integer(previous_log_hash[1]),\n U128::from_integer(current_log_hash[0]),\n U128::from_integer(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_commitment_nonce(first_nullifier: Field, commitment_index: Field) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index\n ],\n GENERATOR_INDEX__COMMITMENT_NONCE\n )\n}\n\npub fn compute_unique_siloed_commitment(nonce: Field, siloed_commitment: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_commitment\n ],\n GENERATOR_INDEX__UNIQUE_COMMITMENT\n )\n}\n\npub fn compute_unique_siloed_commitments<N>(\n first_nullifier: Field,\n siloed_commitments: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_commitments = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_commitment = siloed_commitments[i];\n if siloed_commitment.value != 0 {\n let nonce = compute_commitment_nonce(first_nullifier, i);\n unique_siloed_commitments[i] = SideEffect {\n value: compute_unique_siloed_commitment(nonce, siloed_commitment.value),\n counter: siloed_commitment.counter\n };\n }\n }\n unique_siloed_commitments\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n",
2594
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
2595
- },
2596
- "167": {
2597
- "source": "use crate::abis::{\n function_data::FunctionData,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{\n GENERATOR_INDEX__CONTRACT_LEAF,\n};\nuse crate::traits::Hash;\n\nstruct ContractClassId {\n inner: Field\n}\n\nimpl Eq for ContractClassId {\n fn eq(self, other: ContractClassId) -> bool {\n other.inner == self.inner\n }\n}\n\nimpl ContractClassId {\n pub fn compute(artifact_hash: Field, private_functions_root: Field, public_bytecode_commitment: Field) -> Self {\n let hash = dep::std::hash::pedersen_hash_with_separator([\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment,\n ], GENERATOR_INDEX__CONTRACT_LEAF); // TODO(@spalladino): Update generator index\n \n ContractClassId::from_field(hash)\n }\n\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_field(value : Field) -> Self {\n Self { inner: value }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self { inner: fields[0] }\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n",
2598
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contract_class.nr"
2599
- },
2600
- "178": {
2601
- "source": "mod events;\n\ncontract ContractClassRegisterer {\n use dep::std::option::Option;\n use dep::aztec::protocol_types::{\n address::{ AztecAddress, EthAddress },\n contract_class::ContractClassId,\n constants::{ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, FUNCTION_TREE_HEIGHT, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE},\n traits::{Serialize}\n };\n\n use dep::aztec::log::{ emit_unencrypted_log, emit_unencrypted_log_from_private};\n\n use crate::events::{\n class_registered::ContractClassRegistered,\n private_function_broadcasted::{ClassPrivateFunctionBroadcasted, PrivateFunction},\n unconstrained_function_broadcasted::{ClassUnconstrainedFunctionBroadcasted, UnconstrainedFunction}\n };\n\n #[aztec(private)]\n fn constructor() {}\n\n #[aztec(private)]\n fn register(\n artifact_hash: Field,\n private_functions_root: Field,\n public_bytecode_commitment: Field,\n packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS]\n ) {\n // TODO: Validate public_bytecode_commitment is the correct commitment of packed_public_bytecode\n // TODO: Validate packed_public_bytecode is legit public bytecode\n\n // Compute contract class id from preimage\n let contract_class_id = ContractClassId::compute(\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n );\n\n // Emit the contract class id as a nullifier to be able to prove that this class has been (not) registered\n let event = ContractClassRegistered { contract_class_id, version: 1, artifact_hash, private_functions_root, packed_public_bytecode };\n context.push_new_nullifier(contract_class_id.to_field(), 0);\n\n // Broadcast class info including public bytecode\n let event_payload = event.serialize();\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\"ContractClassRegistered\", event_payload);\n emit_unencrypted_log_from_private(&mut context, event_payload);\n }\n\n #[aztec(private)]\n fn broadcast_private_function(\n contract_class_id: ContractClassId,\n artifact_metadata_hash: Field,\n unconstrained_functions_artifact_tree_root: Field,\n private_function_tree_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n artifact_function_tree_sibling_path: [Field; ARTIFACT_FUNCTION_TREE_MAX_HEIGHT],\n function_data: PrivateFunction\n ) {\n let event = ClassPrivateFunctionBroadcasted {\n contract_class_id,\n artifact_metadata_hash,\n unconstrained_functions_artifact_tree_root,\n private_function_tree_sibling_path,\n artifact_function_tree_sibling_path,\n function: function_data\n };\n let event_payload = event.serialize();\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\"ClassPrivateFunctionBroadcasted\", event_payload);\n emit_unencrypted_log_from_private(&mut context, event_payload);\n }\n\n #[aztec(private)]\n fn broadcast_unconstrained_function(\n contract_class_id: ContractClassId,\n artifact_metadata_hash: Field,\n private_functions_artifact_tree_root: Field,\n artifact_function_tree_sibling_path: [Field; ARTIFACT_FUNCTION_TREE_MAX_HEIGHT],\n function_data: UnconstrainedFunction\n ) {\n let event = ClassUnconstrainedFunctionBroadcasted {\n contract_class_id,\n artifact_metadata_hash,\n private_functions_artifact_tree_root,\n artifact_function_tree_sibling_path,\n function: function_data\n };\n let event_payload = event.serialize();\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\"ClassUnconstrainedFunctionBroadcasted\", event_payload);\n emit_unencrypted_log_from_private(&mut context, event_payload);\n }\n}\n",
2602
- "path": "/usr/src/yarn-project/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr"
2603
- }
2604
- }
2605
- }
1
+ { "noir_version": "0.24.0+edaef211ea08832b1aaabcfc8b3f2419c3a2184c", "name": "ContractClassRegisterer", "functions": [{ "name": "register", "function_type": "Secret", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "private_global_variables", "type": { "kind": "struct", "path": "aztec::context::globals::private_global_variables::PrivateGlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] }, "visibility": "private" }, { "name": "artifact_hash", "type": { "kind": "field" }, "visibility": "private" }, { "name": "private_functions_root", "type": { "kind": "field" }, "visibility": "private" }, { "name": "public_bytecode_commitment", "type": { "kind": "field" }, "visibility": "private" }], "param_witnesses": { "artifact_hash": [{ "start": 41, "end": 42 }], "inputs": [{ "start": 0, "end": 41 }], "private_functions_root": [{ "start": 42, "end": 43 }], "public_bytecode_commitment": [{ "start": 43, "end": 44 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "args_hash", "type": { "kind": "field" } }, { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "min_revertible_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "note_hash_read_requests", "type": { "kind": "array", "length": 32, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_read_requests", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::read_request::ReadRequest", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }] } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] }, "visibility": "public" }, "return_witnesses": [8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271] }, "bytecode": "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NE4TNE4XNM4QNM4UNM4SNM4WNM4RNM4VNM4TNM4XNC4QNC4UNC4SNC4WNC4RNC4VNC4TNC4XNK4QNK4UNK4SNK4WNK4RNK4VNK4TNK4XNG4QNG4UNG4SNG4WNG4RNG4VNG4TNG4XNO4QNO4UNO4SNO4WNO4RNO4VNO4TNO4XNB4QNB4UNB4SNB4WNB4RNB4VNB4TNB4XNJ4QNJ4UNJ4SNJ4WNJ4RNJ4VNJ4TNJ4XNF4QNF4UNF4SNF4WNF4RNF4VNF4TNF4XNN4QNN4UNN4SNN4WNN4RNN4VNN4TNN4XND4QND4UND4SND4WND4RND4VND4TND4XNL4QNL4UNL4SNL4WNL4RNL4VNL4TNL4XNH4QNH4UNH4SNH4WNH4RNH4VNH4TNH4XNAYI9O9v/EHQGFDQGEjQGFjQGETQGFTQGEzQGFzQGELQGFLQGErQGFrQGEbQGFbQGE7QGF7QGEHQGFHQGEnQGFnQGEXQGFXQGE3QGF3QGEPQGFPQGEvQGFvQGEfQGFfQGE/QGF/Q+KOg8SdB48+Cxl8Ejb8KGn8TNP4uaEwgaEwoaEwkaEwsaEwiaEwqaEwmaEwuaEwhaEwpaEwlaEwtaEwjaEwraEwnaEwvaMwgaMwoaMwkaMwsaMwiaMwqaMwmaMwuaMwhaMwpaMwlaMwtaMwjaMwraMwnaMwvaCwgaCwoaCwkaCwsaCwiaCwqaCwmaCwuaCwhaCwpaCwlaCwtaCwjaCwraCwnaCwvaKwgaKwoaKwkaKwsaKwiaKwqaKwmaKwuaKwhaKwpaKwlaKwtaKwjaKwraKwnaKwvaGwgaGwoaGwkaGwsaGwiaGwqaGwmaGwuaGwhaGwpaGwlaGwtaGwjaGwraGwnaGwvaOwgaOwoaOwkaOwsaOwiaOwqaOwmaOwuaOwhaOwpaOwlaOwtaOwjaOwraOwnaOwvaBwgaBwoaBwkaBwsaBwiaBwqaBwmaBwuaBwhaBwpaBwlaBwtaBwjaBwraBwnaBwvaJwgaJwoaJwkaJwsaJwiaJwqaJwmaJwuaJwhaJwpaJwlaJwtaJwjaJwraJwnaJwvaFwgaFwoaFwkaFwsaFwiaFwqaFwmaFwuaFwhaFwpaFwlaFwtaFwjaFwraFwnaFwvaNwgaNwoaNwkaNwsaNwiaNwqaNwmaNwuaNwhaNwpaNwlaNwtaNwjaNwraNwnaNwvaDwgaDwoaDwkaDwsaDwiaDwqaDwmaDwuaDwhaDwpaDwlaDwtaDwjaDwraDwnaDwvaLwgaLwoaLwkaLwsaLwiaLwqaLwmaLwuaLwhaLwpaLwlaLwtaLwjaLwraLwnaLwvaHwgaHwoaHwkaHwsaHwiaHwqaHwmaHwuaHwhaHwpaHwlaHwtaHwjaHwraHwnaHwvaPwgaPwoaPwkaPwsaPwiaPwqaPwmaPwuaAwQ+N/f+IOgMaCgMZCgMbCgMYigMaigMZigMbigMYSgMaSgMZSgMbSgMYygMaygMZygMbygMYKgMaKgMZKgMbKgMYqgMaqgMZqgMbqgMYagMaagMZagMbagMY6gMa6gMZ6gMb6g8UdB40+Cxp8Fjb8IGn8VNP4maPxd0JhA0JhQ0JhI0JhY0JhE0JhU0JhM0Jhc0JhC0JhS0JhK0Jha0JhG0JhW0JhO0Jhe0JhB0JhR0JhJ0JhZ0JhF0JhV0JhN0Jhd0JhD0JhT0JhL0Jhb0JhH0JhX0JhP0Jhf0FhA0FhQ0FhI0FhY0FhE0FhU0FhM0Fhc0FhC0FhS0FhK0Fha0FhG0FhW0FhO0Fhe0FhB0FhR0FhJ0FhZ0FhF0FhV0FhN0Fhd0FhD0FhT0FhL0Fhb0FhH0FhX0FhP0Fhf0NhA0NhQ0NhI0NhY0NhE0NhU0NhM0Nhc0NhC0NhS0NhK0Nha0NhG0NhW0NhO0Nhe0NhB0NhR0NhJ0NhZ0NhF0NhV0NhN0Nhd0NhD0NhT0NhL0Nhb0NhH0NhX0NhP0Nhf0DhA0DhQ0DhI0DhY0DhE0DhU0DhM0Dhc0DhC0DhS0DhK0Dha0DhG0DhW0DhO0Dhe0DhB0DhR0DhJ0DhZ0DhF0DhV0DhN0Dhd0DhD0DhT0DhL0Dhb0DhH0DhX0DhP0Dhf0LhA0LhQ0LhI0LhY0LhE0LhU0LhM0Lhc0LhC0LhS0LhK0Lha0LhG0LhW0LhO0Lhe0LhB0LhR0LhJ0LhZ0LhF0LhV0LhN0Lhd0LhD0LhT0LhL0Lhb0LhH0LhX0LhP0Lhf0HhA0HhQ0HhI0HhY0HhE0HhU0HhM0Hhc0HhC0HhS0HhK0Hha0HhG0HhW0HhO0Hhe0HhB0HhR0HhJ0HhZ0HhF0HhV0HhN0Hhd0HhD0HhT0HhL0Hhb0HhH0HhX0HhP0Hhf0PhA0PhQ0PhI0PhY0PhE0PhU0PhM0Phc0PhC0PhS0PhK0Pha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NE4TNE4XNM4QNM4UNM4SNM4WNM4RNM4VNM4TNM4XNC4QNC4UNC4SNC4WNC4RNC4VNC4TNC4XNK4QNK4UNK4SNK4WNK4RNK4VNK4TNK4XNG4QNG4UNG4SNG4WNG4RNG4VNG4TNG4XNO4QNO4UNO4SNO4WNO4RNO4VNO4TNO4XNB4QNB4UNB4SNB4WNB4RNB4VNB4TNB4XNJ4QNJ4UNJ4SNJ4WNJ4RNJ4VNJ4TNJ4XNF4QNF4UNF4SNF4WNF4RNF4VNF4TNF4XNN4QNN4UNN4SNN4WNN4RNN4VNN4TNN4XND4QND4UND4SND4WND4RND4VND4TND4XNL4QNL4UNL4SNL4WNL4RNL4VNL4TNL4XNH4QNH4UNH4SNH4WNH4RNH4VNH4TNH4XNAYI+e9v/EHQGFDQGEjQGFjQGETQGFTQGEzQGFzQGELQGFLQGErQGFrQGEbQGFbQGE7QGF7QGEHQGFHQGEnQGFnQGEXQGFXQGE3QGF3QGEPQGFPQGEvQGFvQGEfQGFfQGE/QGF/Q+KOg8SdB48+Cxl8Ejb8KGn8TNP4uaEwgaEwoaEwkaEwsaEwiaEwqaEwmaEwuaEwhaEwpaEwlaEwtaEwjaEwraEwnaEwvaMwgaMwoaMwkaMwsaMwiaMwqaMwmaMwuaMwhaMwpaMwlaMwtaMwjaMwraMwnaMwvaCwgaCwoaCwkaCwsaCwiaCwqaCwmaCwuaCwhaCwpaCwlaCwtaCwjaCwraCwnaCwvaKwgaKwoaKwkaKwsaKwiaKwqaKwmaKwuaKwhaKwpaKwlaKwtaKwjaKwraKwnaKwvaGwgaGwoaGwkaGwsaGwiaGwqaGwmaGwuaGwhaGwpaGwlaGwtaGwjaGwraGwnaGwvaOwgaOwoaOwkaOwsaOwiaOwqaOwmaOwuaOwhaOwpaOwlaOwtaOwjaOwraOwnaOwvaBwgaBwoaBwkaBwsaBwiaBwqaBwmaBwuaBwhaBwpaBwlaBwtaBwjaBwraBwnaBwvaJwgaJwoaJwkaJwsaJwiaJwqaJwmaJwuaJwhaJwpaJwlaJwtaJwjaJwraJwnaJwvaFwgaFwoaFwkaFwsaFwiaFwqaFwmaFwuaFwhaFwpaFwlaFwtaFwjaFwraFwnaFwvaNwgaNwoaNwkaNwsaNwiaNwqaNwmaNwuaNwhaNwpaNwlaNwtaNwjaNwraNwnaNwvaDwgaDwoaDwkaDwsaDwiaDwqaDwmaDwuaDwhaDwpaDwlaDwtaDwjaDwraDwnaDwvaLwgaLwoaLwkaLwsaLwiaLwqaLwmaLwuaLwhaLwpaLwlaLwtaLwjaLwraLwnaLwvaHwgaHwoaHwkaHwsaHwiaHwqaHwmaHwuaHwhaHwpaHwlaHwtaHwjaHwraHwnaHwvaPwgaPwoaPwkaPwsaPwiaPwqaPwmaPwuaAwQ6t/f+IOgMaCgMZCgMbCgMYigMaigMZigMbigMYSgMaSgMZSgMbSgMYygMaygMZygMbygMYKgMaKgMZKgMbKgMYqgMaqgMZqgMbqgMYagMaagMZagMbagMY6gMa6gMZ6gMb6g8UdB40+Cxp8Fjb8IGn8VNP4maPxd0JhA0JhQ0JhI0JhY0JhE0JhU0JhM0Jhc0JhC0JhS0JhK0Jha0JhG0JhW0JhO0Jhe0JhB0JhR0JhJ0JhZ0JhF0JhV0JhN0Jhd0JhD0JhT0JhL0Jhb0JhH0JhX0JhP0Jhf0FhA0FhQ0FhI0FhY0FhE0FhU0FhM0Fhc0FhC0FhS0FhK0Fha0FhG0FhW0FhO0Fhe0FhB0FhR0FhJ0FhZ0FhF0FhV0FhN0Fhd0FhD0FhT0FhL0Fhb0FhH0FhX0FhP0Fhf0NhA0NhQ0NhI0NhY0NhE0NhU0NhM0Nhc0NhC0NhS0NhK0Nha0NhG0NhW0NhO0Nhe0NhB0NhR0NhJ0NhZ0NhF0NhV0NhN0Nhd0NhD0NhT0NhL0Nhb0NhH0NhX0NhP0Nhf0DhA0DhQ0DhI0DhY0DhE0DhU0DhM0Dhc0DhC0DhS0DhK0Dha0DhG0DhW0DhO0Dhe0DhB0DhR0DhJ0DhZ0DhF0DhV0DhN0Dhd0DhD0DhT0DhL0Dhb0DhH0DhX0DhP0Dhf0LhA0LhQ0LhI0LhY0LhE0LhU0LhM0Lhc0LhC0LhS0LhK0Lha0LhG0LhW0LhO0Lhe0LhB0LhR0LhJ0LhZ0LhF0LhV0LhN0Lhd0LhD0LhT0LhL0Lhb0LhH0LhX0LhP0Lhf0HhA0HhQ0HhI0HhY0HhE0HhU0HhM0Hhc0HhC0HhS0HhK0Hha0HhG0HhW0HhO0Hhe0HhB0HhR0HhJ0HhZ0HhF0HhV0HhN0Hhd0HhD0HhT0HhL0Hhb0HhH0HhX0HhP0Hhf0PhA0PhQ0PhI0PhY0PhE0PhU0PhM0Phc0PhC0PhS0PhK0Pha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gsaCgsZCgsbCgsYigsaigsZigsbigsYSgsaSgsZSgsbSgsYygsaygsZygsbygsYKgsaKgsZKgsbKgsYqgsaqgsZqgsbqgsYagsaagsZagsbagsY6gsa6gsZ6gsb6gsYGgsaGgsZGgsbGgsYmgsamgsZmgsbmgsYWgsaWgsZWgsbWgsY2gsa2gsZ2gsb2gsYOgsaOgsZOgsbOgsYugsaugsZugsbugsYegsaegsZegsbegsY+gsa+gsZ+gsb+gsYBgsaBgsZBgsbBgsYhgsahgsZhgsbhgsYRgsaRgsZRgsbRgsYxgsaxgsZxgsbxgsYJgsaJgsZJgsbJgsYpgsapgsZpgsbpgsYZgsaZgsZZgsbZgsY5gsa5gsZ5gsb5gsYFgsaFgsZFgsbFgsYlgsalgsZlgsblgsYVgsaVgsZVgsbVgsY1gsa1gsZ1gsb1gsYNgsaNgsZNgsbNgsYtgsatgsZtgsbtgsYdgsadgsZdgsbdgsY9gsa9gsZ9gsb9gsYDgsaDgsZDgsbDgsYjgsajgsZjgsbjgsYTgsaTgsZTgsbTgsYzgsazgsZzgsbzgsYLgsaLgsZLgsbLgsYrgsargsZrgsbrgsYbgsabgsZbgsbbgsY7gsa7gsZ7gsb7gsYHgsaHgsZHgsbHgsYngsangsZngsbngsYXgsaXgsZXgsbXgsY3gsa3gsZ3gsb3gsYPgsaPgsZPgsbPgsYvgsavgsZvgsbvgsYA4f79jT8IGgMKGgMJGgMLGoMIGoMKGoMJGoMLGkMIGkMKGkMJGkMLGsMIGsMKGsMJGsMLGiMIGiMKGiMJGiMLGqMIGqMKGqMJGqMLGmMIGmMKGmMJGmMLGuMIGuMKGuMJGuMLGn8UNP4kaPxZ0PiLoPFXQeNvgsbfBY0JBI0JBY2JBI2JBY1JBI1JBY3JBI3JBY0pBI0pBY2pBI2pBY1pBI1pBY3pBI3pBY0ZBI0ZBY2ZBI2ZBY1ZBI1ZBY3ZBI3ZBY05BI05BY25BI25BY15BI15BY35BI35BY0FBI0FBY2FBI2FBY1FBI1FBY3FBI3FBY0lBI0lBY2lBI2lBY1lBI1lBY3lBI3lBY0VBI0VBY2VBI2VBY1VBI1VBY3VBI3VBY01BI01BY21BI21BY11BI11BY31BI31BY0NBI0NBY2NBI2NBY1NBI1NBY3NBI3NBY0tBI0tBY2tBI2tBY1tBI1tBY3tBI3tBY0dBI0dBY2dBI2dBY1dBI1dBY3dBI3dBY09BI09BY29BI29BY19BI19BY39BI39BY0DBI0DBY2DBI2DBY1DBI1DBY3DBI3DBY0jBI0jBY2jBI2jBY1jBI1jBY3jBI3jBY0TBI0TBY2TBI2TBY1TBI1TBY3TBI3TBY0zBI0zBY2zBI2zBY1zBI1zBY3zBI3zBY0LBI0LBY2LBI2LBY1LBI1LBY3LBI3LBY0rBI0rBY2rBI2rBY1rBI1rBY3rBI3rBY0bBI0bBY2bBI2bBY1bBI1bBY3bBI3bBY07BI07BY27BI27BY17BI17BY37BI37BY0HBI0HBY2HBI2HBY1HBI1HBY3HBI3HBY0nBI0nBY2nBI2nBY1nBI1nBY3nBI3nBY0XBI0XBY2XBI2XBY1XBI1XBY3XBI3XBY03BI03BY23BI23BY13BI13BY33BI33BY0PBI0PBY2PBI2PBY1PBI1PBY3PBI3PBY0vBI0vBY2vBI2vBY1vBI1vBY3vBI3vBY0fBI0fBY2fBI2fBY1fBI1fBY3fBI3fBY0Bwv/7G38QNAYUNAYSNAYWNAYRNAYVNAYTNAYXNIYQNIYUNIYSNIYWNIYRNIYVNIYTNIYXNEYQNEYUNEYSNEYWNEYRNEYVNEYTNEYXNMYQNMYUNMYSNMYWNMYRNMYVNMYTNMYXNP4oaPxJ0PizoPEXQeOvgsbfBI2/CxoTCBoTChoTCRoTCxqTCBqTChqTCRqTCxpTCBpTChpTCRpTCxrTCBrTChrTCRrTCxozCBozChozCRozCxqzCBqzChqzCRqzCxpzCBpzChpzCRpzCxrzCBrzChrzCRrzCxoLCBoLChoLCRoLCxqLCBqLChqLCRqLCxpLCBpLChpLCRpLCxrLCBrLChrLCRrLCxorCBorChorCRorCxqrCBqrChqrCRqrCxprCBprChprCRprCxrrCBrrChrrCRrrCxobCBobChobCRobCxqbCBqbChqbCRqbCxpbCBpbChpbCRpbCxrbCBrbChrbCRrbCxo7CBo7Cho7CRo7Cxq7CBq7Chq7CRq7Cxp7CBp7Chp7CRp7Cxr7CBr7Chr7CRr7CxoHCBoHChoHCRoHCxqHCBqHChqHCRqHCxpHCBpHChpHCRpHCxrHCBrHChrHCRrHCxonCBonChonCRonCxqnCBqnChqnCRqnCxpnCBpnChpnCRpnCxrnCBrnChrnCRrnCxoXCBoXChoXCRoXCxqXCBqXChqXCRqXCxpXCBpXChpXCRpXCxrXCBrXChrXCRrXCxo3CBo3Cho3CRo3Cxq3CBq3Chq3CRq3Cxp3CBp3Chp3CRp3Cxr3CBr3Chr3CRr3CxoPCBoPChoPCRoPCxqPCBqPChqPCRqPCxpPCBpPChpPCRpPCxrPCBrPChrPCRrPCxovCBovChovCRovCxqvCBqvChqvCRqvCxpvCBpvChpvCRpvCxrvCBrvChrvCRrvCxofCBofChofCRofCxqfCBqfChqfCRqfCxpfCBpfChpfCRpfCxrfCBrfChrfCRrfCxo/CBo/Cho/CRo/Cxq/CBq/Chq/CRq/CxoDRPj3N/4gaAwoaAwkaAwsaAwiaAwqaAwmaAwuaAwhaAwpaAwlaAwtaAwjaAwraAwnaAwvaIwgaIwoaIwkaIwsaIwiaIwqaIwmaIwuaIwhaIwpaIwlaIwtaIwjaIwraIwnaIwvaPxR0PiToPFnQeMvgsZfBY2/CRp/FzQmEDQmFDQmEjQmFjQmETQmFTQmEzQmFzSmEDSmFDSmEjSmFjSmETSmFTSmEzSmFzRmEDRmFDRmEjRmFjRmETRmFTRmEzRmFzTmEDTmFDTmEjTmFjTmETTmFTTmEzTmFzQWEDQWFDQWEjQWFjQWETQWFTQWEzQWFzSWEDSWFDSWEjSWFjSWETSWFTSWEzSWFzRWEDRWFDRWEjRWFjRWETRWFTRWEzRWFzTWEDTWFDTWEjTWFjTWETTWFTTWEzTWFzQ2EDQ2FDQ2EjQ2FjQ2ETQ2FTQ2EzQ2FzS2EDS2FDS2EjS2FjS2ETS2FTS2EzS2FzR2EDR2FDR2EjR2FjR2ETR2FTR2EzR2FzT2EDT2FDT2EjT2FjT2ETT2FTT2EzT2FzQOEDQOFDQOEjQOFjQOETQOFTQOEzQOFzSOEDSOFDSOEjSOFjSOETSOFTSOEzSOFzROEDROFDROEjROFjROETROFTROEzROFzTOEDTOFDTOEjTOFjTOETTOFTTOEzTOFzQuEDQuFDQuEjQuFjQuETQuFTQuEzQuFzSuEDSuFDSuEjSuFjSuETSuFTSuEzSuFzRuEDRuFDRuEjRuFjRuETRuFTRuEzRuFzTuEDTuFDTuEjTuFjTuETTuFTTuEzTuFzQeEDQeFDQeEjQeFjQeETQeFTQeEzQeFzSeEDSeFDSeEjSeFjSeETSeFTSeEzSeFzReEDReFDReEjReFjReETReFTReEzReFzTeEDTeFDTeEjTeFjTeETTeFTTeEzTeFzQ+EDQ+FDQ+EjQ+FjQ+ETQ+FTQ+EzQ+FzS+EDS+FDS+EjS+FjS+ETS+FTS+EzS+FzR+EDR+FDR+EjR+FjR+ETR+FTR+EzR+FzQGiPjvb/xB0BhQ0BhI0BhY0BhE0BhU0BhM0Bhc0BhC0BhS0BhK0Bha0BhG0BhW0BhO0Bhe0BhB0BhR0BhJ0BhZ0BhF0BhV0BhN0Bhd0BhD0BhT0BhL0Bhb0BhH0BhX0BhP0Bhf0PijoPEnQePPgsZfBI2/Chp/EzT+LmhMIGhMKGhMJGhMLGhMImhMKmhMJmhMLmhMIWhMKWhMJWhMLWhMI2hMK2hMJ2hML2jMIGjMKGjMJGjMLGjMImjMKmjMJmjMLmjMIWjMKWjMJWjMLWjMI2jMK2jMJ2jML2gsIGgsKGgsJGgsLGgsImgsKmgsJmgsLmgsIWgsKWgsJWgsLWgsI2gsK2gsJ2gsL2isIGisKGisJGisLGisImisKmisJmisLmisIWisKWisJWisLWisI2isK2isJ2isL2hsIGhsKGhsJGhsLGhsImhsKmhsJmhsLmhsIWhsKWhsJWhsLWhsI2hsK2hsJ2hsL2jsIGjsKGjsJGjsLGjsImjsKmjsJmjsLmjsIWjsKWjsJWjsLWjsI2jsK2jsJ2jsL2gcIGgcKGgcJGgcLGgcImgcKmgcJmgcLmgcIWgcKWgcJWgcLWgcI2gcK2gcJ2gcL2icIGicKGicJGicLGicImicKmicJmicLmicIWicKWicJWicLWicI2icK2icJ2icL2hcIGhcKGhcJGhcLGhcImhcKmhcJmhcLmhcIWhcKWhcJWhcLWhcI2hcK2hcJ2hcL2jcIGjcKGjcJGjcLGjcImjcKmjcJmjcLmjcIWjcKWjcJWjcLWjcI2jcK2jcJ2jcL2g8IGg8KGg8JGg8LGg8Img8Kmg8Jmg8Lmg8IWg8KWg8JWg8LWg8I2g8K2g8J2g8L2i8IGi8KGi8JGi8LGi8Imi8Kmi8Jmi8Lmi8IWi8KWi8JWi8LWi8I2i8K2i8J2i8L2h8IGh8KGh8JGh8LGh8Imh8Kmh8Jmh8Lmh8IWh8KWh8JWh8LWh8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NoLGtoLGdoLG9oLGDoLGjoLGToLGzoLGLoLGroLGboLG7oLGHoLGnoLGXoLG3oLGPoLGvoLGfoLG/oLGAYLGgYLGQYLGwYLGIYLGoYLGYYLG4YLGEYLGkYLGUYLG0YLGMYLGsYLGcYLG8YLGCYLGiYLGSYLGyYLGKYLGqYLGaYLG6YLGGYLGmYLGWYLG2YLGOYLGuYLGeYLG+YLGBYLGhYLGRYLGxYLGJYLGpYLGZYLG5YLGFYLGlYLGVYLG1YLGNYLGtYLGdYLG9YLGDYLGjYLGTYLGzYLGLYLGrYLGbYLG7YLGHYLGnYLGXYLG3YLGPYLGvYLGfYLG/YLGA4LGg4LGQ4LGw4LGI4LGo4LGY4LG44LGE4LGk4LGU4LG04LGM4LGs4LGc4LG84LGC4LGi4LGS4LGy4LGK4LGq4LGa4LG64LGG4LGm4LGW4LG24LGO4LGu4LGe4LG+4LGB4LGh4LGR4LGx4LGJ4LGp4LGZ4LG54LGF4LGl4LGV4LG14LGN4LGt4LGd4LG94LGD4LGj4LGT4LGz4LGL4LGr4LGb4LG74LGANH+/Y0/CBoDChoDCRoDCxqDCBqDChqDCRqDCxpDCBpDChpDCRpDCxrDCBrDChrDCRrDCxojCBojChojCRojCxqjCBqjChqjCRqjCxpjCBpjChpjCRpjCxrjCBrjChrjCRrjCxp/FDT+JGj8WdD4i6DxV0Hjb4LG3wWNCQSNCQWNiQSNiQWNSQSNSQWNyQSNyQWNKQSNKQWNqQSNqQWNaQSNaQWN6QSN6QWNGQSNGQWNmQSNmQWNWQSNWQWN2QSN2QWNOQSNOQWNuQSNuQWNeQSNeQWN+QSN+QWNBQSNBQWNhQSNhQWNRQSNRQWNxQSNxQWNJQSNJQWNpQSNpQWNZQSNZQWN5QSN5QWNFQSNFQWNlQSNlQWNVQSNVQWN1QSN1QWNNQSNNQWNtQSNtQWNdQSNdQWN9QSN9QWNDQSNDQWNjQSNjQWNTQSNTQWNzQSNzQWNLQSNLQWNrQSNrQWNbQSNbQWN7QSN7QWNHQSNHQWNnQSNnQWNXQSNXQWN3QSN3QWNPQSNPQWNvQSNvQWNfQSNfQWN/QSN/QWNAwSNAwWNgwSNgwWNQwSNQwWNwwSNwwWNIwSNIwWNowSNowWNYwSNYwWN4wSN4wWNEwSNEwWNkwSNkwWNUwSNUwWN0wSN0wWNMwSNMwWNswSNswWNcwSNcwWN8wSN8wWNCwSNCwWNiwSNiwWNSwSNSwWNywSNywWNKwSNKwWNqwSNqwWNawSNawWN6wSN6wWNGwSNGwWNmwSNmwWNWwSNWwWN2wSN2wWNOwSNOwWNuwSNuwWNewSNewWN+wSN+wWNBwSNBwWNhwSNhwWNRwSNRwWNxwSNxwWNJwSNJwWNpwSNpwWNZwSNZwWN5wSN5wWNFwSNFwWNlwSNlwWNVwSNVwWN1wSN1wWNNwSNNwWNtwSNtwWNdwSNdwWN9wSN9wWNDwSNDwWNjwSNjwWNTwSNTwWNzwSNzwWNLwSNLwWNrwSNrwWNbwSNbwWN7wSN7wWNHwSNHwWNnwSNnwWNXwSNXwWN3wSN3wWNAaL/+xt/EDQGFDQGEjQGFjQGETQGFTQGEzQGFzSGEDSGFDSGEjSGFjSGETSGFTSGEzSGFzRGEDRGFDRGEjRGFjRGETRGFTRGEzRGFzTGEDTGFDTGEjTGFjTGETTGFTTGEzTGFzT+KGj8SdD4s6DxF0Hjr4LG3wSNvwsaEwgaEwoaEwkaEwsakwgakwoakwkakwsaUwgaUwoaUwkaUwsa0wga0woa0wka0wsaMwgaMwoaMwkaMwsaswgaswoaswkaswsacwgacwoacwkacwsa8wga8woa8wka8wsaCwgaCwoaCwkaCwsaiwgaiwoaiwkaiwsaSwgaSwoaSwkaSwsaywgaywoaywkaywsaKwgaKwoaKwkaKwsaqwgaqwoaqwkaqwsaawgaawoaawkaawsa6wga6woa6wka6wsaGwgaGwoaGwkaGwsamwgamwoamwkamwsaWwgaWwoaWwkaWwsa2wga2woa2wka2wsaOwgaOwoaOwkaOwsauwgauwoauwkauwsaewgaewoaewkaewsa+wga+woa+wka+wsaBwgaBwoaBwkaBwsahwgahwoahwkahwsaRwgaRwoaRwkaRwsaxwgaxwoaxwkaxwsaJwgaJwoaJwkaJwsapwgapwoapwkapwsaZwgaZwoaZwkaZwsa5wga5woa5wka5wsaFwgaFwoaFwkaFwsalwgalwoalwkalwsaVwgaVwoaVwkaVwsa1wga1woa1wka1wsaNwgaNwoaNwkaNwsatwgatwoatwkatwsadwgadwoadwkadwsa9wga9woa9wka9wsaDwgaDwoaDwkaDwsajwgajwoajwkajwsaTwgaTwoaTwkaTwsazwgazwoazwkazwsaLwgaLwoaLwkaLwsarwgarwoarwkarwsabwgabwoabwkabwsa7wga7woa7wka7wsaHwgaHwoaHwkaHwsanwganwoanwkanwsaXwgaXwoaXwkaXwsa3wga3woa3wka3wsaPwgaPwoaPwkaPwsavwgavwoavwkavwsaA8T49zf+IGgMKGgMJGgMLGgMImgMKmgMJmgMLmgMIWgMKWgMJWgMLWgMI2gMK2gMJ2gML2iMIGiMKGiMJGiMLGiMImiMKmiMJmiMLmiMIWiMKWiMJWiMLWiMI2iMK2iMJ2iML2j8UdD4k6DxZ0HjL4LGXwWNvwkafxc0JhA0JhQ0JhI0JhY0JhE0JhU0JhM0Jhc0phA0phQ0phI0phY0phE0phU0phM0phc0ZhA0ZhQ0ZhI0ZhY0ZhE0ZhU0ZhM0Zhc05hA05hQ05hI05hY05hE05hU05hM05hc0FhA0FhQ0FhI0FhY0FhE0FhU0FhM0Fhc0lhA0lhQ0lhI0lhY0lhE0lhU0lhM0lhc0VhA0VhQ0VhI0VhY0VhE0VhU0VhM0Vhc01hA01hQ01hI01hY01hE01hU01hM01hc0NhA0NhQ0NhI0NhY0NhE0NhU0NhM0Nhc0thA0thQ0thI0thY0thE0thU0thM0thc0dhA0dhQ0dhI0dhY0dhE0dhU0dhM0dhc09hA09hQ09hI09hY09hE09hU09hM09hc0DhA0DhQ0DhI0DhY0DhE0DhU0DhM0Dhc0jhA0jhQ0jhI0jhY0jhE0jhU0jhM0jhc0ThA0ThQ0ThI0ThY0ThE0ThU0ThM0Thc0zhA0zhQ0zhI0zhY0zhE0zhU0zhM0zhc0LhA0LhQ0LhI0LhY0LhE0LhU0LhM0Lhc0rhA0rhQ0rhI0rhY0rhE0rhU0rhM0rhc0bhA0bhQ0bhI0bhY0bhE0bhU0bhM0bhc07hA07hQ07hI07hY07hE07hU07hM07hc0HhA0HhQ0HhI0HhY0HhE0HhU0HhM0Hhc0nhA0nhQ0nhI0nhY0nhE0nhU0nhM0nhc0XhA0XhQ0XhI0XhY0XhE0XhU0XhM0Xhc03hA03hQ03hI03hY03hE03hU03hM03hc0PhA0PhQ0PhI0PhY0PhE0PhU0PhM0Phc0vhA0vhQ0vhI0vhY0vhE0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", "debug_symbols": "1ZbbSsNAEIbfZa9D2TnsKa8iXkStUChtaYMgpe9uUjPpVqcGtyjkKln4v8yXneyQo1lvn5t2td0cTH00AKZ+OJrDrtn0y0Pb7FtT28osNy/d9VSZ19V6aWpkd6q+5cClIQkRxmz0ShSJw5BFtjyGIUXtwQBBJAA69ir/WBnAmXrTf3lzBPF2DHd78z3ezno/RB1YfzEHzcVaFBWLmbmzSpqThB2GS5b5bO1mae1naR00a8DkpADZeOXeQ1GFKLFAjmDihT1LhRiyzbF4LpDUAiFdDpKLEwU4BNHh2D0229GuAto/r6DOaEg4Dia09HVnUR2QiEAjFNLkuCFJg88/paHhC719FESMUshKkFCphNL3eZKCIgp/TSEsSO8TxnGyYja1wTrhsJCjQo4LOXWaQvRRuJSNheQF85MYoYKFMiyWYakAwxsfys/npseoDLvRODtKYojXjetWb81+1Tytl/3/Xrds33eft6cP" }, { "name": "broadcast_unconstrained_function", "function_type": "Secret", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "private_global_variables", "type": { "kind": "struct", "path": "aztec::context::globals::private_global_variables::PrivateGlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] }, "visibility": "private" }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "artifact_metadata_hash", "type": { "kind": "field" }, "visibility": "private" }, { "name": "private_functions_artifact_tree_root", "type": { "kind": "field" }, "visibility": "private" }, { "name": "artifact_function_tree_sibling_path", "type": { "kind": "array", "length": 5, "type": { "kind": "field" } }, "visibility": "private" }, { "name": "function_data", "type": { "kind": "struct", "path": "events::unconstrained_function_broadcasted::UnconstrainedFunction", "fields": [{ "name": "selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "metadata_hash", "type": { "kind": "field" } }, { "name": "bytecode", "type": { "kind": "array", "length": 500, "type": { "kind": "field" } } }] }, "visibility": "private" }], "param_witnesses": { "artifact_function_tree_sibling_path": [{ "start": 44, "end": 49 }], "artifact_metadata_hash": [{ "start": 42, "end": 43 }], "contract_class_id": [{ "start": 41, "end": 42 }], "function_data": [{ "start": 49, "end": 551 }], "inputs": [{ "start": 0, "end": 41 }], "private_functions_artifact_tree_root": [{ "start": 43, "end": 44 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "args_hash", "type": { "kind": "field" } }, { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "min_revertible_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "note_hash_read_requests", "type": { "kind": "array", "length": 32, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_read_requests", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::read_request::ReadRequest", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }] } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] }, "visibility": "public" }, "return_witnesses": [574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791] }, "bytecode": "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", "debug_symbols": "1ZjdaoQwEIXfJdeyzEwmf75K6YVtt7CwuMsqhSK+e2Nr1KUBIQsLc6WB8+kXTDzioM6X96Y/XdpO1YNCUvXLoLpr007Drm9uvaqhUsf2Ix7HSn2ezkdVE5ux+pdDE+Ykelyy3maipNnNWWLgJYzB5y6M6JIEYmTv8q+VQi3Um4V6G6HeVqi3E+rthXoHmd4EQr1RqLfQviShfUlC+5KE9iUJ7UsS2pcktC/paX3JHpO3YXzUWz/UlwasnaMGwa7mmHMBoKQCtDE3kElzSGFDbs0y/1qjSGsSaZ1tSkadxJkD3rlPULam2EBau2ys290UWqc52O2EZ60DZzslTt2vU9/cBChxtpBzhZwv5LLvFPR24cKGC3bGDOximjIYlmFUhukCjA/5z82dlRIxXYZlVzHS+uDI+XW/QFz6cfTV3E7N2/k4/U+Kw/77+nc6/gA=" }, { "name": "broadcast_private_function", "function_type": "Secret", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "private_global_variables", "type": { "kind": "struct", "path": "aztec::context::globals::private_global_variables::PrivateGlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] }, "visibility": "private" }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "artifact_metadata_hash", "type": { "kind": "field" }, "visibility": "private" }, { "name": "unconstrained_functions_artifact_tree_root", "type": { "kind": "field" }, "visibility": "private" }, { "name": "private_function_tree_sibling_path", "type": { "kind": "array", "length": 5, "type": { "kind": "field" } }, "visibility": "private" }, { "name": "artifact_function_tree_sibling_path", "type": { "kind": "array", "length": 5, "type": { "kind": "field" } }, "visibility": "private" }, { "name": "function_data", "type": { "kind": "struct", "path": "events::private_function_broadcasted::PrivateFunction", "fields": [{ "name": "selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "metadata_hash", "type": { "kind": "field" } }, { "name": "vk_hash", "type": { "kind": "field" } }, { "name": "bytecode", "type": { "kind": "array", "length": 500, "type": { "kind": "field" } } }] }, "visibility": "private" }], "param_witnesses": { "artifact_function_tree_sibling_path": [{ "start": 49, "end": 54 }], "artifact_metadata_hash": [{ "start": 42, "end": 43 }], "contract_class_id": [{ "start": 41, "end": 42 }], "function_data": [{ "start": 54, "end": 557 }], "inputs": [{ "start": 0, "end": 41 }], "private_function_tree_sibling_path": [{ "start": 44, "end": 49 }], "unconstrained_functions_artifact_tree_root": [{ "start": 43, "end": 44 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "args_hash", "type": { "kind": "field" } }, { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "min_revertible_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "note_hash_read_requests", "type": { "kind": "array", "length": 32, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_read_requests", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::read_request::ReadRequest", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }] } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] }, "visibility": "public" }, "return_witnesses": [581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798] }, "bytecode": "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", "debug_symbols": "1ZjdaoMwGIbvJcdSvr/ExFsZO3BbB4ViS5XBEO99cfOvLCCkUPiONPA+8kQTX7E358t73Z0uTWuq3iCZ6qU37bVuxmHb1bfOVFCYY/MRj0NhPk/no6lI7FD8y6ENUxI9LlnvElFiKacsCcgSxuBTF0YsZwnEyN7lXwuDrNRblHpbpd5OqXep1Nsr9Q46vQmUeqNSb6V9SUr7kpT2JSntS1Lal6S0L0lpX5LSvuSn9aV4nL2t4MPeD/WlBeemqEVwqzmmXABoVgHamFtIpCXMYUvlmhX5tSaV1qzSOtmUDDRvHxbiO/cRStYUC/MChbC7KZY0uu2EJ60DJ98Vcep+nfo6HQKaOIFMDjM5yuSS6wW9W7iw4YKbMdnFmBKYzcNcHlZmYPaQ/kzeWSkR4zwsfSdpfXBU+nW/QFz6cfRV30712/k4/geLw+77+nc6/AA=" }, { "name": "compute_note_hash_and_nullifier", "function_type": "Unconstrained", "is_internal": false, "abi": { "parameters": [{ "name": "contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "nonce", "type": { "kind": "field" }, "visibility": "private" }, { "name": "storage_slot", "type": { "kind": "field" }, "visibility": "private" }, { "name": "note_type_id", "type": { "kind": "field" }, "visibility": "private" }, { "name": "serialized_note", "type": { "kind": "array", "length": 20, "type": { "kind": "field" } }, "visibility": "private" }], "param_witnesses": { "contract_address": [{ "start": 0, "end": 1 }], "nonce": [{ "start": 1, "end": 2 }], "note_type_id": [{ "start": 3, "end": 4 }], "serialized_note": [{ "start": 4, "end": 24 }], "storage_slot": [{ "start": 2, "end": 3 }] }, "return_type": { "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } }, "visibility": "public" }, "return_witnesses": [24, 25, 26, 27] }, "bytecode": "H4sIAAAAAAAA/+2YS1KEQAyG09C8wefooLPhCFCycOldvP8VLIl25AedlelFqiZVXfQDOl9CV0g4EZGjb0mXltFvkfW3cB3/J5PiXmNMTmeEMzHCmSpyMtuB4p5TH8Gv2oyZAcbcAGNhgLE0wFgZYKwNMDYGGFsDjJ0BxisDjNcGGG8MMN4aYLwzwHhvgPFggPHBAOOjAcajIqMDRh/6/dKelva8tNPSXsJ8SasMWgzz9M45uyjvaSucmyQy8OtcKtwwJ/wJzMk/htSvNuTqNowz71to7xtqhR787/X9/1qCnxTZY/nk68zKWczD3qInA19Voa/4b2VC3S60CnRSeEfSP9IqFfTlTAt3S+u5rM4843fPdLCe/2H3oGx3ASwDjEVfFuxg4fyo91tuZqv12eaGtrGJxe3GA/TryL6KZOfI+zZhrw/S/U614J9y56cO1hu4p43gOwd6ZW8ZI+OF98KLDPWOtYH1CuaSnS2YS+D9+/ihapAoxGTHBThe44DJwZSDekFroKrBMH4JXMxzsczBlos9Lqa4WOFigJNtTmbxA3QuwfuRT4hpJ8qiGQAA", "debug_symbols": "q1bKyU9OLMnMzytWsqqu1VEqSyzKTEzKSYVySyoLIMxaAA==" }, { "name": "constructor", "function_type": "Secret", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "private_global_variables", "type": { "kind": "struct", "path": "aztec::context::globals::private_global_variables::PrivateGlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] }, "visibility": "private" }], "param_witnesses": { "inputs": [{ "start": 0, "end": 41 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "args_hash", "type": { "kind": "field" } }, { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "min_revertible_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "note_hash_read_requests", "type": { "kind": "array", "length": 32, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_read_requests", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::read_request::ReadRequest", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }] } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "content_commitment", "type": { "kind": "struct", "path": "aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "aztec::protocol_types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] }, "visibility": "public" }, "return_witnesses": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262] }, "bytecode": "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", "debug_symbols": "1dJNCsMgEAXgu8zaxYxV23qV0sW0tSCICVEKRbx7Dc3PIrlAVjMPvsVbvAKhe3L2XUxgCxCBvRVIPccxpsxDBosCXHy1WwW8fXBgpdJVbJxGYyaqCc2iL7SDCVFOmFDSgknjjlbXGWt5Xq1S9S6A5CFbn47XuqUPD54fwY17aTF/+/9bfw==" }], "events": [], "file_map": { "81": { "source": "use crate::{\n context::{inputs::PrivateContextInputs, interface::ContextInterface},\n key::nullifier_key::validate_nullifier_key_against_address, messaging::process_l1_to_l2_message,\n oracle::{\n arguments, call_private_function::call_private_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal, context::get_portal_address,\n header::get_header_at, nullifier_key::{get_nullifier_key_pair, NullifierKeyPair},\n debug_log::debug_log\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_data::FunctionData, function_selector::FunctionSelector,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_call_stack_item::PrivateCallStackItem,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem,\n public_circuit_public_inputs::PublicCircuitPublicInputs, read_request::ReadRequest,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n grumpkin_private_key::GrumpkinPrivateKey, hash::hash_args, header::Header,\n messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::is_empty\n};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n note_hash_read_requests: BoundedVec<SideEffect, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_note_hashes: BoundedVec<SideEffect, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n\n nullifier_key: Option<NullifierKeyPair>,\n}\n\nimpl ContextInterface for PrivateContext {\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect { value: note_hash, counter: self.side_effect_counter };\n self.new_note_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash { value: nullifier, note_hash: nullified_commitment, counter: self.side_effect_counter };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n let side_effect_counter = inputs.call_context.start_side_effect_counter;\n let mut min_revertible_side_effect_counter = 0;\n if is_empty(inputs.call_context.msg_sender) {\n min_revertible_side_effect_counter = side_effect_counter;\n }\n PrivateContext {\n inputs,\n side_effect_counter,\n min_revertible_side_effect_counter,\n args_hash,\n return_values: BoundedVec::new(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_stack_hashes: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n nullifier_key: Option::none()\n }\n }\n\n pub fn is_deployment(self) -> bool {\n // TODO(#4738): Implement this\n false\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n // TODO(fees): start this from 0 and test the following:\n // - in the private circuit init that it gets set correctly\n // - in the private circuit inner that it remains 0\n // I've had to initialize the counter here so that it would work for contract deployments\n // the above checks should be doable after we figure out fee payments for contract deployments\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash,\n unencrypted_logs_hash,\n encrypted_log_preimages_length,\n unencrypted_log_preimages_length,\n historical_header: self.historical_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version\n };\n priv_circuit_pub_inputs\n }\n\n pub fn capture_min_revertible_side_effect_counter(&mut self) {\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = SideEffect { value: note_hash, counter: self.side_effect_counter };\n self.note_hash_read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.side_effect_counter };\n self.nullifier_read_requests.push(request);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_nullifier_secret_key(&mut self, account: AztecAddress) -> GrumpkinPrivateKey {\n let key_pair = if self.nullifier_key.is_none() {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key);\n let request = NullifierKeyValidationRequest { public_key: key_pair.public_key, secret_key: key_pair.secret_key };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(key_pair);\n key_pair\n } else {\n let key_pair = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(\n key_pair.account == account, \"Cannot query nullifier key for more than one account per call\"\n );\n key_pair\n };\n key_pair.secret_key\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1;\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [SideEffect::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash: [0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero()\n },\n is_execution_request: true\n };\n reader.finish();\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n self.side_effect_counter = self.side_effect_counter + 1;\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr" }, "84": { "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{address::AztecAddress, grumpkin_point::GrumpkinPoint};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(\n contract_address,\n storage_slot,\n note_type_id,\n encryption_pub_key,\n log\n );\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/log.nr" }, "86": { "source": "use dep::protocol_types::{hash::hash_args, traits::Hash};\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hash for Hasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl Hasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/hasher.nr" }, "96": { "source": "// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nfn debug_log_oracle<T, N>(_msg: T, _num_args: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_format_oracle<T, N>(_msg: T, _args: [Field; N], _num_args: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_field_oracle(_field: Field) -> Field {}\n#[oracle(debugLog)]\nfn debug_log_array_oracle<T, N>(_arbitrary_array: [T; N]) -> Field {}\n#[oracle(debugLogWithPrefix)]\nfn debug_log_array_with_prefix_oracle<S, T, N>(_prefix: S, _arbitrary_array: [T; N]) -> Field {}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<T>(msg: T) {\n assert(debug_log_oracle(msg, 0) == 0);\n}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\nunconstrained pub fn debug_log_format<T, N>(msg: T, args: [Field; N]) {\n assert(debug_log_format_oracle(msg, args, args.len() as Field) == 0);\n}\n\n/// Example:\n/// `debug_log_field(my_field);`\nunconstrained pub fn debug_log_field(field: Field) {\n assert(debug_log_field_oracle(field) == 0);\n}\n\n/// Example:\n/// `debug_log_array(my_array);`\nunconstrained fn debug_log_array<T, N>(arbitrary_array: [T; N]) {\n assert(debug_log_array_oracle(arbitrary_array) == 0);\n}\n\n/// Example:\n/// `debug_log_array_with_prefix(\"Prefix\", my_array);`\nunconstrained pub fn debug_log_array_with_prefix<S, T, N>(prefix: S, arbitrary_array: [T; N]) {\n assert(debug_log_array_with_prefix_oracle(prefix, arbitrary_array) == 0);\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/debug_log.nr" }, "105": { "source": "use dep::protocol_types::{address::AztecAddress, constants::NUM_FIELDS_PER_SHA256, grumpkin_point::GrumpkinPoint};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [\n emit_encrypted_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n encryption_pub_key,\n preimage\n ), 0\n ]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(\n _contract_address: AztecAddress,\n _event_selector: Field,\n _message: T\n) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr" }, "144": { "source": "use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS},\n contract_class_id::ContractClassId, hash::pedersen_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n AztecAddress::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute_from_public_key(\n pub_key: GrumpkinPoint,\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n portal_contract_address: EthAddress\n ) -> AztecAddress {\n AztecAddress::compute(\n PublicKeysHash::compute(pub_key),\n PartialAddress::compute(\n contract_class_id,\n salt,\n initialization_hash,\n portal_contract_address\n )\n )\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address() {\n let point = GrumpkinPoint { x: 1, y: 2 };\n let contract_address_salt = 3;\n let contract_class_id = ContractClassId::from_field(4);\n let initialization_hash = 5;\n let portal_contract_address = EthAddress::from_field(6);\n\n let address = AztecAddress::compute_from_public_key(\n point,\n contract_class_id,\n contract_address_salt,\n initialization_hash,\n portal_contract_address\n );\n\n assert(address.to_field() == 0x2fd71a4f0742364f194dd16d0ae32d2f47845ddc7f5d328f37d4148b565c4123);\n}\n\n#[test]\nfn compute_address_from_partial_and_pubkey() {\n let point = GrumpkinPoint { x: 1, y: 2 };\n let partial_address = PartialAddress::from_field(3);\n\n let address = AztecAddress::compute(PublicKeysHash::compute(point), partial_address);\n assert(address.to_field() == 0x0447f893197175723deb223696e2e96dbba1e707ee8507766373558877e74197);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr" }, "150": { "source": "use dep::std::cmp::Eq;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr" }, "198": { "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::FunctionLeafPreimage;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint256::U256;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT, ARGS_HASH_CHUNK_LENGTH, CONTRACT_TREE_HEIGHT, FUNCTION_TREE_HEIGHT,\n NUM_FIELDS_PER_SHA256, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__CONSTRUCTOR, GENERATOR_INDEX__PARTIAL_ADDRESS,\n GENERATOR_INDEX__CONTRACT_ADDRESS, GENERATOR_INDEX__NOTE_HASH_NONCE,\n GENERATOR_INDEX__UNIQUE_NOTE_HASH, GENERATOR_INDEX__FUNCTION_ARGS\n};\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < args.len() {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < args.len() {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like \n// this because it means we never even need to consider cases where \n// the index is greater than p.\npub fn root_from_sibling_path<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n contract_class_id: ContractClassId,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, contract_class_id };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn silo_note_hash(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n //\n // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_integer(previous_log_hash[0]),\n U128::from_integer(previous_log_hash[1]),\n U128::from_integer(current_log_hash[0]),\n U128::from_integer(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier: Field, commitment_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_siloed_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn compute_unique_siloed_note_hashes<N>(\n first_nullifier: Field,\n siloed_note_hashes: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_note_hashes = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_note_hash = siloed_note_hashes[i];\n if siloed_note_hash.value != 0 {\n let nonce = compute_note_hash_nonce(first_nullifier, i);\n unique_siloed_note_hashes[i] = SideEffect {\n value: compute_unique_siloed_note_hash(nonce, siloed_note_hash.value),\n counter: siloed_note_hash.counter\n };\n }\n }\n unique_siloed_note_hashes\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n assert(result == 0x142a6d57007171f6eaa33d55976d9dbe739c889c8e920f115f7808dea184c718);\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = [0; 800];\n for i in 0..800 {\n input[i] = i as Field;\n }\n let hash = hash_args(input);\n assert(hash == 0x371960dd84ed3445ab099ac4c1af5ba90e0c713b593e0ca52ee532087c7f097);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0x2266ac2f9f0c19c015239ef5ea85862fc6fac00db73779b220a4d49c4856c2e1);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x0f24729168d4450a5681beafa5e3a899ac28bd17bf5a4877dab37bcd834e1634);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr" }, "202": { "source": "use crate::abis::{\n function_data::FunctionData, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{GENERATOR_INDEX__CONTRACT_LEAF};\nuse crate::traits::Hash;\n\nstruct ContractClassId {\n inner: Field\n}\n\nimpl Eq for ContractClassId {\n fn eq(self, other: ContractClassId) -> bool {\n other.inner == self.inner\n }\n}\n\nimpl ContractClassId {\n pub fn compute(\n artifact_hash: Field,\n private_functions_root: Field,\n public_bytecode_commitment: Field\n ) -> Self {\n let hash = dep::std::hash::pedersen_hash_with_separator(\n [\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n ],\n GENERATOR_INDEX__CONTRACT_LEAF\n ); // TODO(@spalladino): Update generator index\n\n ContractClassId::from_field(hash)\n }\n\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_field(value: Field) -> Self {\n Self { inner: value }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self { inner: fields[0] }\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr" }, "243": { "source": "// Copied from noir-contracts/contracts/slow_tree_contract/src/capsule.nr\n// We should extract this to a shared lib in aztec-nr once we settle on a design for capsules\n\n#[oracle(popCapsule)]\nfn pop_capsule_oracle<N>() -> [Field; N] {}\n\n// A capsule is a \"blob\" of data that is passed to the contract through an oracle.\nunconstrained pub fn pop_capsule<N>() -> [Field; N] {\n pop_capsule_oracle()\n}\n", "path": "/usr/src/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/capsule.nr" }, "245": { "source": "mod events;\nmod capsule;\n\ncontract ContractClassRegisterer {\n use dep::aztec::prelude::{AztecAddress, EthAddress, FunctionSelector, emit_unencrypted_log};\n use dep::aztec::protocol_types::{\n contract_class_id::ContractClassId,\n constants::{\n ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, FUNCTION_TREE_HEIGHT,\n MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE\n },\n traits::{Serialize}\n };\n\n use dep::aztec::log::{emit_unencrypted_log_from_private};\n\n use crate::events::{\n class_registered::ContractClassRegistered,\n private_function_broadcasted::{ClassPrivateFunctionBroadcasted, PrivateFunction},\n unconstrained_function_broadcasted::{ClassUnconstrainedFunctionBroadcasted, UnconstrainedFunction}\n };\n\n use crate::capsule::pop_capsule;\n\n #[aztec(private)]\n fn constructor() {}\n\n #[aztec(private)]\n fn register(artifact_hash: Field, private_functions_root: Field, public_bytecode_commitment: Field) {\n // TODO: Validate public_bytecode_commitment is the correct commitment of packed_public_bytecode\n // TODO: Validate packed_public_bytecode is legit public bytecode\n\n let packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS] = pop_capsule();\n\n // Compute contract class id from preimage\n let contract_class_id = ContractClassId::compute(\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n );\n\n // Emit the contract class id as a nullifier to be able to prove that this class has been (not) registered\n let event = ContractClassRegistered { contract_class_id, version: 1, artifact_hash, private_functions_root, packed_public_bytecode };\n context.push_new_nullifier(contract_class_id.to_field(), 0);\n\n // Broadcast class info including public bytecode\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\n \"ContractClassRegistered\",\n [\n contract_class_id.to_field(),\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n ]\n );\n emit_unencrypted_log_from_private(&mut context, event.serialize());\n }\n\n #[aztec(private)]\n fn broadcast_private_function(\n contract_class_id: ContractClassId,\n artifact_metadata_hash: Field,\n unconstrained_functions_artifact_tree_root: Field,\n private_function_tree_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n artifact_function_tree_sibling_path: [Field; ARTIFACT_FUNCTION_TREE_MAX_HEIGHT],\n function_data: PrivateFunction\n ) {\n let event = ClassPrivateFunctionBroadcasted {\n contract_class_id,\n artifact_metadata_hash,\n unconstrained_functions_artifact_tree_root,\n private_function_tree_sibling_path,\n artifact_function_tree_sibling_path,\n function: function_data\n };\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\n \"ClassPrivateFunctionBroadcasted\",\n [\n contract_class_id.to_field(),\n artifact_metadata_hash,\n unconstrained_functions_artifact_tree_root,\n function_data.selector.to_field(),\n function_data.vk_hash,\n function_data.metadata_hash\n ]\n );\n emit_unencrypted_log_from_private(&mut context, event.serialize());\n }\n\n #[aztec(private)]\n fn broadcast_unconstrained_function(\n contract_class_id: ContractClassId,\n artifact_metadata_hash: Field,\n private_functions_artifact_tree_root: Field,\n artifact_function_tree_sibling_path: [Field; ARTIFACT_FUNCTION_TREE_MAX_HEIGHT],\n function_data: UnconstrainedFunction\n ) {\n let event = ClassUnconstrainedFunctionBroadcasted {\n contract_class_id,\n artifact_metadata_hash,\n private_functions_artifact_tree_root,\n artifact_function_tree_sibling_path,\n function: function_data\n };\n dep::aztec::oracle::debug_log::debug_log_array_with_prefix(\n \"ClassUnconstrainedFunctionBroadcasted\",\n [\n contract_class_id.to_field(),\n artifact_metadata_hash,\n private_functions_artifact_tree_root,\n function_data.selector.to_field(),\n function_data.metadata_hash\n ]\n );\n emit_unencrypted_log_from_private(&mut context, event.serialize());\n }\n}\n", "path": "/usr/src/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr" } } }