@aztec/accounts 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/artifacts/EcdsaAccount.json +1477 -269
- package/dest/artifacts/SchnorrAccount.json +1606 -399
- package/dest/artifacts/SchnorrSingleKeyAccount.json +1452 -236
- package/dest/defaults/entrypoint_payload.js +1 -1
- package/dest/defaults/index.d.ts +1 -1
- package/dest/defaults/index.js +1 -1
- package/dest/testing/create_account.js +1 -1
- package/package.json +7 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"noir_version": "0.23.0+
|
|
2
|
+
"noir_version": "0.23.0+ea6aebcc4e190d9dbadaf1dd0f70950651eed615",
|
|
3
3
|
"name": "SchnorrSingleKeyAccount",
|
|
4
4
|
"functions": [
|
|
5
5
|
{
|
|
@@ -65,18 +65,127 @@
|
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
"name": "
|
|
68
|
+
"name": "historical_header",
|
|
69
69
|
"type": {
|
|
70
70
|
"kind": "struct",
|
|
71
|
-
"path": "authwit::aztec::protocol_types::
|
|
71
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
72
72
|
"fields": [
|
|
73
|
-
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
{
|
|
74
|
+
"name": "last_archive",
|
|
75
|
+
"type": {
|
|
76
|
+
"kind": "struct",
|
|
77
|
+
"path": "authwit::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": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
93
|
+
"fields": [
|
|
94
|
+
{
|
|
95
|
+
"name": "l1_to_l2_message_tree",
|
|
96
|
+
"type": {
|
|
97
|
+
"kind": "struct",
|
|
98
|
+
"path": "authwit::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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
113
|
+
"fields": [
|
|
114
|
+
{
|
|
115
|
+
"name": "note_hash_tree",
|
|
116
|
+
"type": {
|
|
117
|
+
"kind": "struct",
|
|
118
|
+
"path": "authwit::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": "authwit::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": "authwit::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": "authwit::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": "authwit::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
|
+
}
|
|
188
|
+
}
|
|
80
189
|
]
|
|
81
190
|
}
|
|
82
191
|
},
|
|
@@ -99,7 +208,7 @@
|
|
|
99
208
|
},
|
|
100
209
|
{ "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
|
|
101
210
|
],
|
|
102
|
-
"param_witnesses": { "inputs": [{ "start": 0, "end":
|
|
211
|
+
"param_witnesses": { "inputs": [{ "start": 0, "end": 30 }], "message_hash": [{ "start": 30, "end": 31 }] },
|
|
103
212
|
"return_type": {
|
|
104
213
|
"abi_type": {
|
|
105
214
|
"kind": "struct",
|
|
@@ -228,18 +337,127 @@
|
|
|
228
337
|
},
|
|
229
338
|
{ "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
230
339
|
{
|
|
231
|
-
"name": "
|
|
340
|
+
"name": "historical_header",
|
|
232
341
|
"type": {
|
|
233
342
|
"kind": "struct",
|
|
234
|
-
"path": "authwit::aztec::protocol_types::
|
|
343
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
235
344
|
"fields": [
|
|
236
|
-
{
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
345
|
+
{
|
|
346
|
+
"name": "last_archive",
|
|
347
|
+
"type": {
|
|
348
|
+
"kind": "struct",
|
|
349
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
350
|
+
"fields": [
|
|
351
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
352
|
+
{
|
|
353
|
+
"name": "next_available_leaf_index",
|
|
354
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
360
|
+
{
|
|
361
|
+
"name": "state",
|
|
362
|
+
"type": {
|
|
363
|
+
"kind": "struct",
|
|
364
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
365
|
+
"fields": [
|
|
366
|
+
{
|
|
367
|
+
"name": "l1_to_l2_message_tree",
|
|
368
|
+
"type": {
|
|
369
|
+
"kind": "struct",
|
|
370
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
371
|
+
"fields": [
|
|
372
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
373
|
+
{
|
|
374
|
+
"name": "next_available_leaf_index",
|
|
375
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
376
|
+
}
|
|
377
|
+
]
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"name": "partial",
|
|
382
|
+
"type": {
|
|
383
|
+
"kind": "struct",
|
|
384
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
385
|
+
"fields": [
|
|
386
|
+
{
|
|
387
|
+
"name": "note_hash_tree",
|
|
388
|
+
"type": {
|
|
389
|
+
"kind": "struct",
|
|
390
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
391
|
+
"fields": [
|
|
392
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
393
|
+
{
|
|
394
|
+
"name": "next_available_leaf_index",
|
|
395
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
396
|
+
}
|
|
397
|
+
]
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"name": "nullifier_tree",
|
|
402
|
+
"type": {
|
|
403
|
+
"kind": "struct",
|
|
404
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
405
|
+
"fields": [
|
|
406
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
407
|
+
{
|
|
408
|
+
"name": "next_available_leaf_index",
|
|
409
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"name": "contract_tree",
|
|
416
|
+
"type": {
|
|
417
|
+
"kind": "struct",
|
|
418
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
419
|
+
"fields": [
|
|
420
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
421
|
+
{
|
|
422
|
+
"name": "next_available_leaf_index",
|
|
423
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
424
|
+
}
|
|
425
|
+
]
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"name": "public_data_tree",
|
|
430
|
+
"type": {
|
|
431
|
+
"kind": "struct",
|
|
432
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
433
|
+
"fields": [
|
|
434
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
435
|
+
{
|
|
436
|
+
"name": "next_available_leaf_index",
|
|
437
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
438
|
+
}
|
|
439
|
+
]
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
]
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
]
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"name": "global_variables",
|
|
450
|
+
"type": {
|
|
451
|
+
"kind": "struct",
|
|
452
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
453
|
+
"fields": [
|
|
454
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
455
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
456
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
457
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
}
|
|
243
461
|
]
|
|
244
462
|
}
|
|
245
463
|
},
|
|
@@ -256,18 +474,19 @@
|
|
|
256
474
|
"visibility": "public"
|
|
257
475
|
},
|
|
258
476
|
"return_witnesses": [
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
477
|
+
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
|
|
478
|
+
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,
|
|
479
|
+
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,
|
|
480
|
+
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
|
|
481
|
+
132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
|
|
482
|
+
154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
|
|
483
|
+
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
|
|
484
|
+
198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
|
|
485
|
+
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231
|
|
267
486
|
]
|
|
268
487
|
},
|
|
269
|
-
"bytecode": "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",
|
|
270
|
-
"debug_symbols": "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hxuZw43M4UbmcCNzuJE53MgcbmQONzKHG5nDjczhRuZwI3O4kTncyBxuZA43MocbmcONzOFG5nAjc7iROdzIHG5kDjcyhxuZw43M4UbmcCNzuJE53MgcbmQONzKHG5nDjczhRuZwI3O4kTncyBxuZA43MocbmcONzOFG5nAjc7iROdzIHG5kDjcyhxuZw43M4UbmcCNzuJE53MgcbmQONzKHG5nDjczhRuZwI3O4kTncyBxuZA43MocbmcONzOFG5nAjc7iROdzIHG5kDjcyhzsPGcS9XHL0S65+iemXuH5J6Jekfknpl7R+ib79o2//6Ns/+vaPvv2jb//o2z/69o++/aNv/+jbv/r2r779q2//6tu/+vavvv2rb//q27/69q++fdO3b/r2Td++6ds3ffumb9/07Zu+fdO3b/r2Xd++69t3ffuub9/17bu+fde37/r2Xd++69sPffuhbz/07Ye+/dC3H/r2Q99+6NsPffuhbz/17ae+/dS3n/r2U99+6ttPffupbz/17ae+/dK3X/r2S99+6dsvffulb7/07Ze+/dK3X/r2W99+69tvffutb7/17be+/da33/r2W99+69sfffujb3/07Y++/dG3P/r2R9/+6Nsfffs66zs66zs66zs66zs663v5rle/JPRLUr+k9Etav0Tfvs76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76js76zvus7++98/mqlwz6xwt/+vmnrez10zb19unT9c6nb9mtzx9/+W8/b5/Pfu/m9fbhx1eD9NsBLv0ARj+A0w8Q9AMk/QBFP0DTDzDwA7z/Nx2kA9CbOOhNHPQmDnoTB72Jg97EQW/ioDdx0Js46U2c9CZOehMnvYmT3sRJb+KkN3HSmzjpTZz0Ji56Exe9iYvexEVv4qI3cdGbuOhNXPQmLnoTF72Jm97ETW/ipjdx05u46U3c9CZuehM3vYmb3sRNb+KhN/HQm3joTTz0Jh56Ew+9iYfexENv4qE38cCb+D7gTXwf8Ca+D3gT3we8ie8D3sT3AW/i+4A38X3Am/g+4E18H/QmPvQmPvQmPvQmPvQmPvQmPvQmPvQmPvQmPvQmPvQmvvQmvvQmvvQmvvQmvvQmvvQmvvQmvvQmvvQmvvQmNnoTG72Jjd7ERm9iozex0ZvY6E1s9CY2ehMbvYmd3sR0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bF16Y6tS3dsXbpj69IdW5fu2Lp0x9alO7Yu3bFldMeW0R1bRndsGd2xZQ94ExvdsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW053bDndseV0x5bTHVv+gDex0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bHldMeW0x1bTndsOd2x5XTHltMdW053bDndseV0x5bTHVtOd2w53bEVdMdW0B1bQXdsBd2xFQ94EwfdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0l3bCXdsZV0x1bSHVv5gDdx0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bGVdMdW0h1bSXdsJd2xlXTHVtIdW0l3bCXdsZV0x1bSHVtJd2wl3bFVdMdW0R1bRXdsFd2xVQ94ExfdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3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"
|
|
488
|
+
"bytecode": "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",
|
|
489
|
+
"debug_symbols": "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yxyuZQ7XModrmcO1zOFa5nAtc7iWOVzLHK5lDtcyh2uZw7XM4VrmcC1zuJY5XMscrmUO1zKHa5nDtczhWuZwLXO4ljlcyxyuZQ7XModrmcO1zOFa5nAtc7iWOVzLHK5lDtcyh2uZw7XM4VrmcC1zuJY5XMscrmUO1zKHa5nDtczhWuZwLXO4ljlcyxyuZQ7XModrmcO1zOFa5nAtc7iWOVzLHG5dMoi7LVn6kq0vOfoS05e4viT0JakvKX2J3v2ld3/p3V9695fe/aV3f+ndX3r3l979pXd/6d3feve33v2td3/r3d9697fe/a13f+vd33r3t979o3f/6N0/eveP3v2jd//o3T9694/e/aN3/+jdN737pnff9O6b3n3Tu296903vvundN737pnff9e673n3Xu+96913vvuvdd737rnff9e673v3Qux9690PvfujdD737oXc/9O6H3v3Qux9691PvfurdT737qXc/9e6n3v3Uu59691PvfurdL737pXe/9O6X3v3Su19690vvfundL737pXe/9e633v3Wu99691vvfuvdb737rXe/9e7rrG/prG/prG/prG/prO/2rVdf4vqS0JekvqT0JXr3dda3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dNa3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3dda3P2Z9dtWXRXb1h8v255adzy2zzy378NPw829OfFn3MyH5xcI//OPVeX/I7a8Uj2tvzOPxkHjHQ/IdD6l3PKSf8JCT53716fz6mOoPr/Z9v9rs/OLqL0V9TEl/76LWxKL2xKLOu4va5X4fq7c/53pcn9eHb0XeL76+FnKuxwaMvgGnbyDoG8hRG7hXVSOr6olV9TWyqvU7VNX2qCqu+m0vRm/6Bg59A0bfgNM3EPQNJH0DRd9Aszdwrou+AXgSnwuexOeCJ/G54El8LngSnwuexOeCJ/G54El8LnoSL3oSL3oSL3oSL3oSL3oSL3oSL3oSL3oSL3oSL3oSb3oSb3oSb3oSb3oSb3oSb3oSb3oSb3oSb3oSb3oSH3oSH3oSH3oSH3oSH3oSH3oSH3oSH3oSH3oSH3oSGz2JjZ7ERk9ioyex0ZPY6Els9CQ2ehIbPYmNnsROT2KnJ7HTk9jpSez0JHZ6Ejs9iZ2exE5PYqcncdCTOOhJHPQkDnoSBz2Jg57EQU/ioCdx0JM46Emc9CROehInPYmTnsRJT+KkJ3HSkzjpSZz0JE56Ehc9iYuexEVP4qIn8e/irXrqBuhJXPQkLnoSFz2Ji57ETU9iumPr0B1bh+7YOnTH1qE7tg7dsXXojq1Dd2wdumPL6I4tozu2jO7YMrpjyy54EhvdsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW0Z3bBndsWV0x5bRHVtGd2wZ3bFldMeW0R1bRndsGd2xZXTHltEdW053bDndseV0x5bTHVt+wZPY6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7thyumPL6Y4tpzu2nO7Ycrpjy+mOLac7tpzu2HK6Y8vpji2nO7ac7tgKumMr6I6toDu2gu7YiguexEF3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtAdW0F3bAXdsRV0x1bQHVtBd2wF3bEVdMdW0B1bQXdsBd2xFXTHVtIdW0l3bCXdsZV0x1Ze8CROumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aS7thKumMr6Y6tpDu2ku7YSrpjK+mOraQ7tpLu2Eq6Yyvpjq2kO7aK7tgqumOr6I6toju26oIncdEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2xVXTHVtEdW0V3bBXdsVV0x1bRHVtFd2wV3bFVdMdW0R1bRXdsFd2x1XTHVtMdW013bDXdsdUXPImb7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vpjq2mO7aa7thqumOr6Y6tpju2mu7Yarpjq+mOraY7tpru2Gq6Y6vhjq3bz9hJfPsZO4lvP2Mn8e1n7CS+/YydxLefsZP49jN2Et9+xk7i28/YSXz7GT2J4Y6t2wboSQx3bN02QE9iuGPrtgF6EsMdW7cN0JMY7ti6bYCexHDH1m0D9CSGO7ZuG6AnMdyxddsAPYnhjq3bBuhJDHds3TZAT2K4Y+u2AXoSwx1btw3Qkxju2LptgJ7EcMfWbQP0JIY7tm4boCcx3LF12wA9ieGOrdsG6EkMd2zdNkBPYrhj67YBehLDHVu3DdCTGO7Yum2AnsRwx9ZtA/Qkhju2bhugJzHcsXXbAD2J4Y6t2wboSQx3bN02QE9iuGPrtgF6EsMdW7cN0JMY7ti6bYCexHDH1m0D9CSGO7ZuG6AnMdyxddsAPYnhjq3bBuhJDHds3TZAT2K4Y+u2AXoSwx1btw3Qkxju2LptgJ7EcMfWbQP0JIY7tm4boCcx3LF12wA9ieGOrdsG6EkMd2zdNkBPYrhj67YBehLDHVu3DdCTGO7Yum0AnsSL7thadMfWoju2Ft2xtS54Ei+6Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrUV3bC26Y2vRHVuL7thadMfWoju2Ft2xteiOrU13bG26Y2vTHVub7tjaFzyJN92xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWpju2Nt2xtemOrU13bG26Y2vTHVub7tjadMfWoTu2Dt2xdeiOrUN3bJ0LnsSH7tg6dMfWoTu2Dt2xdeiOrUN3bB26Y+vQHVuH7tg6dMfWoTu2Dt2xdeiOrUN3bB26Y+vQHVuH7tg6dMfWoTu2Dt2xdeiOrUN3bB26Y+vQHVuH7tg6dMfWoTu2Dt2xdeiOrUN3bB26Y+vQHVuH7tg6dMfWoTu2Dt2xdeiOrfNqx9b9Mec9j7H3PMbf85inJITv+9Vm5zsfru9+WnJcRTWuop5W0XP8SU+taI2raI+r6IyryN5dUcb15eI+3wtG3/XlWjd/XGvxqN7R1Qe6+kRXX3Oqv5fU40qKa15Ja15Jcs7cF57PLrTPLvTPLozPLszPLqzPLuxPLtT9G/eF67MLP/vJyc9+cvKzn5z87CcnP/vJyc9+cv7J+fnbF6D7wv3Ni/zxiPC+f2+K9fUh7o9n9Ouf8U9OoT/3GesNz9i//Rn7ar9/kV1nf2dk936M7Nzfpv8HWXB1+uMDdZ3+eusbh7nv4OB3YPgdOH4Hgd9B4ndQ+B00fQd94Xew8DvAZ3LjM7nxmdz4TG58Jjc+k3tOJt8rmpOx/1GRXXMy817RnAy8V/T2TFuX5ddPt/3n78L3OKJdB16/wet3eP0xuv6Kda9/1XduXOd+bdnXa80fW80fZ6v142y1f5itruvH2er6cbY6+xvIU7c6+8vKU7dqr93q/TH+nsfEex6T73nM09Oxv/cx3I+P1jrfFPXzr5n8w8XH778QeqM9j0s7H+U3uvx9sctf7PI3u/zDLt/Y5Tu7/GCXn+zy2am72al72Kl72Kl72Kl72Kl72Kl72Kl72Kl72Kl72Kl72Klr7NQ1duoaO3WNnbrGTl1jp66xU9fYqWvs1DV26jo7dZ2dus5OXWenrrNT19mp6+zUdXbqOjt1nZ26wU7dYKdusFM32Kkb7NQNduoGO3WDnbrBTt1gp26yUzfZqZvs1E126iY7dZOduslO3WSnbrJTN9mpW+zULXbqFjt1i526z7dCvbd8duoWO3WLnbrFTt1ip26zU7fZqdvs1G126j7f+/Te8tmp2+zUbXbqNjt1G526fqFT1y906vqFTl2/0KnrFzp1/UKnrl/o1PULnbp+oVPXL3bqLnbqLnbqLnbqLnbqPt+d9N7y2am72Km72KnLdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTeVsN5Wz3VTOdlM5203lbDeVs91UznZTOdtN5Ww3lbPdVM52UznbTRVsN1Ww3VTBdlMF200VFzp1g+2mCrabKthuqmC7qYLtpgq2myrYbqpgu6mC7aYKtpsq2G6qYLupgu2mCrabKthuqmC7qYLtpgq2myrYbqpgu6mC7aYKtpsq2G6qYLupgu2mCrabKthuqmC7qYLtpgq2myrYbqpgu6mC7aYKtpsq2G6qYLupgu2mCrabKthuqmC7qYLtpgq2myqGu6nsUYet/rb8D+6bdb9tfa3Yz2OnswP6mTudneVP3OlwOdYzdzr7G8Izdzr7y8Qzdzr7e8czd2r/BXfa/tFOZ3+beeZOZ3/xeeJOdaPMfWF8dmF+dmF9dmF/cqHu7LgvXJ9duD+78Anz1ju/XBzr+vpZ8ccz7A3P8Dc8I97wjKf/3WN/Z4L0vt+685v5ER8Nhavzfue1rm+H01WPHRR+B03fwfP1BW/fwcLvYON3cPA7MPwOHL+DwO8An8mFz+TCZ3LjM7nxmdz4TG58Jj9fdPDpHdwrmpOx94rmZOa9ojkZeK/o7Zm2Lsuvn277z9+FjEf535Tx843v9Te6/rwueP0LXv8eXX89uHSv+s6N69yvLft6rfljq+fH2ar9OFv1H2er8eNsNX+crc7+BvLUrc7+svLMra7Z32ueutXZX4GeutUXf1u6P+a85zH2nsf4ex6D/nXRZAsJki0kSLaQINlCgmQLCZItJEi2kCDZQoJkCwmSLSRItpAg2UKCZAsJki0kSLaQINlCgmQLCZItJEi2kCDZQoJkCwmSLSRItpAg2UKCZAsJki0kSLaQINlCgmQLCZItJMjhQoLvls9O3eHqgO+VP9wH8N3y2ak7/OT+d8tnp+7wM/bfLZ+dusNPw3+3fHbqOjt1nZ26wU7dYKdusFM32Kkb7NQNduoGO3WDnbrBTt1gp26yUzfZqZvs1E126j7DsvR7ls9O3WSnbrJTN9mpm+zULXbqFjt1i526xU7d5xum3ls+O3WLnbrFTt1ip26xU7fZqdvs1G126jY7dZ/vkHpv+ezUbXbqNjt1m526jU7dutCpWxc6detCp25d6NStC526daFTty506taFTt260KlbFzt1Fzt1Fzt1Fzt1Fzt1n+96em/57NRlu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpiu6mK7aYqtpuq2G6qYrupiu2mKrabqthuqmK7qYrtpiq2m6rYbqpmu6ma7aZqtpuq2W6qvtCp22w3VbPdVM12UzXbTdVsN1Wz3VTNdlM1203VbDdVs91UzXZTNdtN1Ww3VbPdVM12UzXbTdVsN1Wz3VTNdlM1203VbDdVs91UzXZTNdtN1Ww3VbPdVM12UzXbTdVsN1Wz3VTNdlM1203VbDdVs91UzXZTNdtN1Ww3VbPdVM12UzXbTdVsN1Wz3VTNdlM1203VbDdVs91UzXZTNdtN1Ww3VbPdVM12UzXbTdVsN1Wz3VTNdlM1203VbDdVs91UPdxNZY86bPW35X9w36z7betrxX4eO50d0M/c6ewsf+ZOZ8f+M3c6+xvCM3c6+8vEM3c6+3vHE3c6XOT1uZ22f7TT2d9mnrnT2V98nrjTj40y99tf39mjd365MtbXa90fd98vvft56d3tpXf3l949Xnr3fOnd66V371fe/WPRxdPu/tJ3tV/6rvZL39V+6bvaL31X+6Xvar/0Xe2Xvqv9wnf1XNf10ruvl959v/Tu56V3t5fe3V9693jp3fOld6+X3v2l7+oS3tX7kqUv2fqSoy/5TZ//bbYff624/Tke1+f1eIK//Anx8ifki5/wT/6BzV/7hHX7rnd/wO2D8/Xvax9eXJYPhmD19a+CVz2q6UnV2DWqmjWqmj2qmvPGaioeLOGbi7+txkZV46OqiVHV5KhqalQ1b5zFvftRTXz4hvs1qpr3zZsbbe2vF18fVmOjqvFR1cSoanJUNTWqmp5UTVyjqlmjqtmjqhk1i2PULI5RszhGzeIYNYtj1CyOUbM4R83iHDWLc9QszlGzOEfN4hw1i3PULM5RszhHzeIcNYtr1CyuUbO4Rs3iGjWLa9QsrlGzuEbN4ho1i2vULK5Rs7hHzeIeNYt71CzuUbO4R83iHjWLe9Qs7lGzuEfN4p40i/uaNIv7mjSL+5o0i/uaNIv/yT/R8rtVM2kW9zVpFvc1aRb3NWkW9zVqFq9Rs3iNmsVr1Cxeo2bxGjWL16hZvEbN4jVqFq9Rs3iNmsV71Czeo2bxHjWL96hZvEfN4j1qFu9Rs3iPmsV71Czeo2bxGTWLz6hZfEbN4jNqFp9Rs/iMmsVn1Cw+o2bxGTWLz6hZbKNmsY2axTZqFtuoWWyjZrGNmsU2ahbbqFlso2axjZrFPmoW+6hZ7KNm8ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2POnfXo87d9ahzdz3q3F2/9TRXPDy01zf/fMy31fScaux654ml7ft+8fbzYTVnVDU2qhofVU2MquZ93yjKrvu/sFP2i3mzH9XUqGreOG+O2f1iu9YvOvXBra8bsfhy+VrXt/9k0tfOvvOE0wuqX+jqN7r6g67eRlR/ryZGVZOjqqlR1cyY9l+q2TOm972aGdP4Xs0bp6vZeVRj9mE1Z1Q1NqoaH1VNjKomR1VTo6rpSdW880zUr6hmjapm1Cw+o2bxGTWLz6hZfEbN4jNqFp9Rs/iMmsU2ahbbqFlso2axjZrFNmoW26hZbKNmsY2axTZqFtuoWeyjZrGPmsU+ahb7qFnso2axj5rFPmoW+6hZ/M5zP2vf/z3RvT7+P6fvPPfzK6rZo6o5o6qxUdX4qGrid6rmw9+peee5n19RTY2qpidVk9eoat45i+vr79SsD3Pqned+fkU1PqqaGFVNjqqmRlXTk6p559mW7Y95s/PD1Hzn2ZZfUc0eVc0ZVY2NqsZHVROjqslR1dSoanpSNT1qFveoWdyjZnGPmsU9ahb3qFnco2Zxj5rF/dZZ/L0TE92DqlnXNaqaNaqaSSe01qgTWuuyUdVMOqG1Rp3QWleOqmbSLF7XqFm8Rs3iNWoWr1GzeI2axWvULF6jZvEaNYvXqFm8Rs3iNWoW71GzeI+axXvULN6jZvEeNYv3qFm8R83iPWoW71GzeI+axWfULD6jZvEZNf3OqOn38amcfT144Te/Jtj5WFWfWtWfWfXxaZTvrlqfWrW1VX//+/8D"
|
|
271
490
|
},
|
|
272
491
|
{
|
|
273
492
|
"name": "set_is_valid_storage",
|
|
@@ -332,18 +551,127 @@
|
|
|
332
551
|
}
|
|
333
552
|
},
|
|
334
553
|
{
|
|
335
|
-
"name": "
|
|
554
|
+
"name": "historical_header",
|
|
336
555
|
"type": {
|
|
337
556
|
"kind": "struct",
|
|
338
|
-
"path": "authwit::aztec::protocol_types::
|
|
557
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
339
558
|
"fields": [
|
|
340
|
-
{
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
559
|
+
{
|
|
560
|
+
"name": "last_archive",
|
|
561
|
+
"type": {
|
|
562
|
+
"kind": "struct",
|
|
563
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
564
|
+
"fields": [
|
|
565
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
566
|
+
{
|
|
567
|
+
"name": "next_available_leaf_index",
|
|
568
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
569
|
+
}
|
|
570
|
+
]
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
574
|
+
{
|
|
575
|
+
"name": "state",
|
|
576
|
+
"type": {
|
|
577
|
+
"kind": "struct",
|
|
578
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
579
|
+
"fields": [
|
|
580
|
+
{
|
|
581
|
+
"name": "l1_to_l2_message_tree",
|
|
582
|
+
"type": {
|
|
583
|
+
"kind": "struct",
|
|
584
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
585
|
+
"fields": [
|
|
586
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
587
|
+
{
|
|
588
|
+
"name": "next_available_leaf_index",
|
|
589
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
590
|
+
}
|
|
591
|
+
]
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"name": "partial",
|
|
596
|
+
"type": {
|
|
597
|
+
"kind": "struct",
|
|
598
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
599
|
+
"fields": [
|
|
600
|
+
{
|
|
601
|
+
"name": "note_hash_tree",
|
|
602
|
+
"type": {
|
|
603
|
+
"kind": "struct",
|
|
604
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
605
|
+
"fields": [
|
|
606
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
607
|
+
{
|
|
608
|
+
"name": "next_available_leaf_index",
|
|
609
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
610
|
+
}
|
|
611
|
+
]
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "nullifier_tree",
|
|
616
|
+
"type": {
|
|
617
|
+
"kind": "struct",
|
|
618
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
619
|
+
"fields": [
|
|
620
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
621
|
+
{
|
|
622
|
+
"name": "next_available_leaf_index",
|
|
623
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
624
|
+
}
|
|
625
|
+
]
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"name": "contract_tree",
|
|
630
|
+
"type": {
|
|
631
|
+
"kind": "struct",
|
|
632
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
633
|
+
"fields": [
|
|
634
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
635
|
+
{
|
|
636
|
+
"name": "next_available_leaf_index",
|
|
637
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
638
|
+
}
|
|
639
|
+
]
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"name": "public_data_tree",
|
|
644
|
+
"type": {
|
|
645
|
+
"kind": "struct",
|
|
646
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
647
|
+
"fields": [
|
|
648
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
649
|
+
{
|
|
650
|
+
"name": "next_available_leaf_index",
|
|
651
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
652
|
+
}
|
|
653
|
+
]
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
]
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
]
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"name": "global_variables",
|
|
664
|
+
"type": {
|
|
665
|
+
"kind": "struct",
|
|
666
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
667
|
+
"fields": [
|
|
668
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
669
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
670
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
671
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
672
|
+
]
|
|
673
|
+
}
|
|
674
|
+
}
|
|
347
675
|
]
|
|
348
676
|
}
|
|
349
677
|
},
|
|
@@ -368,9 +696,9 @@
|
|
|
368
696
|
{ "name": "value", "type": { "kind": "boolean" }, "visibility": "private" }
|
|
369
697
|
],
|
|
370
698
|
"param_witnesses": {
|
|
371
|
-
"inputs": [{ "start": 0, "end":
|
|
372
|
-
"message_hash": [{ "start":
|
|
373
|
-
"value": [{ "start":
|
|
699
|
+
"inputs": [{ "start": 0, "end": 30 }],
|
|
700
|
+
"message_hash": [{ "start": 30, "end": 31 }],
|
|
701
|
+
"value": [{ "start": 31, "end": 32 }]
|
|
374
702
|
},
|
|
375
703
|
"return_type": {
|
|
376
704
|
"abi_type": {
|
|
@@ -500,18 +828,127 @@
|
|
|
500
828
|
},
|
|
501
829
|
{ "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
502
830
|
{
|
|
503
|
-
"name": "
|
|
831
|
+
"name": "historical_header",
|
|
504
832
|
"type": {
|
|
505
833
|
"kind": "struct",
|
|
506
|
-
"path": "authwit::aztec::protocol_types::
|
|
834
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
507
835
|
"fields": [
|
|
508
|
-
{
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
836
|
+
{
|
|
837
|
+
"name": "last_archive",
|
|
838
|
+
"type": {
|
|
839
|
+
"kind": "struct",
|
|
840
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
841
|
+
"fields": [
|
|
842
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
843
|
+
{
|
|
844
|
+
"name": "next_available_leaf_index",
|
|
845
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
846
|
+
}
|
|
847
|
+
]
|
|
848
|
+
}
|
|
849
|
+
},
|
|
850
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
851
|
+
{
|
|
852
|
+
"name": "state",
|
|
853
|
+
"type": {
|
|
854
|
+
"kind": "struct",
|
|
855
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
856
|
+
"fields": [
|
|
857
|
+
{
|
|
858
|
+
"name": "l1_to_l2_message_tree",
|
|
859
|
+
"type": {
|
|
860
|
+
"kind": "struct",
|
|
861
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
862
|
+
"fields": [
|
|
863
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
864
|
+
{
|
|
865
|
+
"name": "next_available_leaf_index",
|
|
866
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
867
|
+
}
|
|
868
|
+
]
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"name": "partial",
|
|
873
|
+
"type": {
|
|
874
|
+
"kind": "struct",
|
|
875
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
876
|
+
"fields": [
|
|
877
|
+
{
|
|
878
|
+
"name": "note_hash_tree",
|
|
879
|
+
"type": {
|
|
880
|
+
"kind": "struct",
|
|
881
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
882
|
+
"fields": [
|
|
883
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
884
|
+
{
|
|
885
|
+
"name": "next_available_leaf_index",
|
|
886
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
887
|
+
}
|
|
888
|
+
]
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"name": "nullifier_tree",
|
|
893
|
+
"type": {
|
|
894
|
+
"kind": "struct",
|
|
895
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
896
|
+
"fields": [
|
|
897
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
898
|
+
{
|
|
899
|
+
"name": "next_available_leaf_index",
|
|
900
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
901
|
+
}
|
|
902
|
+
]
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"name": "contract_tree",
|
|
907
|
+
"type": {
|
|
908
|
+
"kind": "struct",
|
|
909
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
910
|
+
"fields": [
|
|
911
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
912
|
+
{
|
|
913
|
+
"name": "next_available_leaf_index",
|
|
914
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
915
|
+
}
|
|
916
|
+
]
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"name": "public_data_tree",
|
|
921
|
+
"type": {
|
|
922
|
+
"kind": "struct",
|
|
923
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
924
|
+
"fields": [
|
|
925
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
926
|
+
{
|
|
927
|
+
"name": "next_available_leaf_index",
|
|
928
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
929
|
+
}
|
|
930
|
+
]
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
]
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
]
|
|
937
|
+
}
|
|
938
|
+
},
|
|
939
|
+
{
|
|
940
|
+
"name": "global_variables",
|
|
941
|
+
"type": {
|
|
942
|
+
"kind": "struct",
|
|
943
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
944
|
+
"fields": [
|
|
945
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
946
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
947
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
948
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
949
|
+
]
|
|
950
|
+
}
|
|
951
|
+
}
|
|
515
952
|
]
|
|
516
953
|
}
|
|
517
954
|
},
|
|
@@ -528,21 +965,22 @@
|
|
|
528
965
|
"visibility": "public"
|
|
529
966
|
},
|
|
530
967
|
"return_witnesses": [
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
968
|
+
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
|
|
969
|
+
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,
|
|
970
|
+
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,
|
|
971
|
+
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
|
|
972
|
+
133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
|
|
973
|
+
155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
|
|
974
|
+
177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
|
|
975
|
+
199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
|
|
976
|
+
221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232
|
|
539
977
|
]
|
|
540
978
|
},
|
|
541
|
-
"bytecode": "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",
|
|
542
|
-
"debug_symbols": "5Z3LbmbXcUbfpcdCcPauu18lyMDIBQhg2EHsmeF3DwU02W2YirSckKoPHqlBnH1UW9X/V9TqrsU/f/ndH/71t3/6zz/8/o9ffvPnL88/1f3ym3/+85c//tdvf//jF/74p9/+95++/Ob54cu///7fXv75lx++/Md//u7fv/zmnvOXf/nhxwNGDzg9EPRA0gNFDzQ9ML/8wA9/89ypzK+Pnhp/e9q/vr2fD337+dC33w99u33o2/1D3x4f+vb80LfXh769P/TtH/pZnQ/9rM6HflbnQz+r86Gf1fnQz+p86Gd1PvSzOh/6WZ0P/azOh35Wz/N87OvPx77+fuzr/0+f1/s88fXR+9z6/vXv1eL2Vot/q+U89VqMbyomNhWTm4qpTcX0pmJmUTHn2VTM2VTM3VTMpgQ+mxL4bErgsymBz6YEPpsS+GxK4Lspge+mBL6bEvhuSuC7KYHvpgS+mxL4bkrguymB76YEtk0JbJsS2DYlsG1KYNuUwLYpgW1TAtumBLZNCWybEtg3JbBvSmDflMC+KYF9UwL7pgT2TQnsmxLYNyWwb0rg2JTAsSmBY1MCx6YEjk0JHJsSODYlcGxK4NiUwLEpgXNTAuemBM5NCZybEjg3JXBuSuDclMC5KYFzUwLnpgSuTQlcmxK4NiVwbUrg2pTAtSmBa1MC16YErk0JXJsSuDclcH/mR3te33v6x9f9bTGxqZjP+w18/a1NL798t02zqJh5NhVzNhVzNxXzed9C9Atl+Ppwv/xv9XfFvP7t+vFNxcQntqn69eGw/qs2sae/lp66pdfS0s8z9frucx6b94pv5eJHt/j70BXu+xg+4fhE4BOJTxQ+0fjE0BNkmeLriYNP4J4f3PODe35wzw/u+cE9P7jnB/f84p5f3POLe35xzy/u+cU9v7jnF/f84p5f3HPDPTfcc8M9N9xzwz033HPDPTfcc8M9N9xzxz133HPHPXfcc8c9d9xzxz133HPHPXfc88A9D9zzwD0P3PPAPQ/c88A9D9zzwD0P3PPEPU/c88Q9T9zzxD1P3PPEPU/c88Q9T9zzwj0v3HOs27rYt3WxcOti49bFyq2LnVsXS7du4Z437nnjnjfueeOeN+5545437nnjnjfueeOeD+754J4P7vngng/u+eCeD+754J4P7vnQntvz4BMHn7j4hOETjk8EPpH4ROETjU/gnmMOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMMZ5nCGOZxhDmeYwxnmcIY5nGEOZ5jDGeZwhjmcYQ5nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwznmcI45nGMO55jDOeZwjjmcYw7nmMM55nCOOZxjDueYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDBeZwgTlcYA4XmMMF5nCBOVxgDheYwwXmcIE5XGAOF5jDJeZwiTlcYg6XmMMl5nCJOVxiDpeYwyXmcIk5XGIOl5jDJeZwiTlcYg6XmMMl5nCJOVxiDpeYwyXmcIk5XGIOl5jDJeZwiTlcYg6XmMMl5nCJOVxiDpeYwyXmcIk5XGIOl5jDJeZwiTlc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"
|
|
979
|
+
"bytecode": "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",
|
|
980
|
+
"debug_symbols": "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3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OJNznTMJ9ziTc50zCfc4k3OdMwn3OItznLMJ9ziLc5yzCfc66+HK8CPc5i3Cfswj3OYtwn7MI9zmLcJ+zCPc5i3Cfswj3OYtwn7MI9zmLcJ+zCPc5i3Cfswj3OYtwn7MI9zmLcJ+zCPc5i3Cfswj3OYtwn7MI9zmLcJ+zCPc5i3Cfswj3OYtwn7MI9zmLcJ+zCPc5C9/nfBzs9x6c9x7cdx58e8fw+nzqm/+PR/jj/8R//LpeXt/XyxPsw5/gH/6E87FPOF/5d1R+6RNs9/FSv+z1kx9vvniiH5+KL//tervmpZqiqqapqhmqapapmr6eWM3Uo5r94sVfVmNU1ThVNYeqmqCqJqmqeWIWr+9LNfX2N7yZqpnn5Y1f176++HqzGqOqxqmqOVTVBFU1SVVNUVXTVNUMVTXLVM1SZfFSZfFSZfFSZfFSZfFSZfFSZfFSZfFSZfEyZfFX/mWNH1YNUxZ/5V/T+GHVMGXxV/4FjR9WDVMWf+Vfzfhh1TBl8Vf+pYwfVg1VFhtVFhtVFhtVFhtVFhtVFhtVFhtVFhtVFhtVFhtVFjtVFjtVFjtVFjtVFjtVFjtVFjtVFjtVFjtVFjtVFh+qLD5UWXyosvhQZfGhyuJDlcWHKosPVRYfqiw+VFkcVFkcVFkcVFkcVFkcVFkcVFkcVFkcVFkcVFkcVFmcVFmcVFmcVFmcVFmcVFmcVFmcVFmcVFmcVFmcVFlcVFlcVFlcVFlcVFlcVFlcVFlcVFlcVFlcVFlcVFncVFncVFncVFncVFncVFncVFncVFncVFncVFncVFlMtXeXVHt3SbV3l1R7d0m1d5dUe3dJtXeXVHt3SbV3l1R7d0m1d5dUe3dJtXeXVHt3SbV3l1R7d0m1d5dUe3dJtXeXVHt3RbV3V1R7d0W1d1dUe3df+ZcOflg1TFlcVHt3RbV3V1R7d0W1d1dUe3dFtXdXVHt3RbV3V1R7d0W1d1dUe3dFtXdXVHt3RbV3V1R7d0W1d1dP3eaqFw/tNf1mNUVVzRM/xf7iSr5/ed6q5pkbS7+gGqOqxqmqOVTVxNOqmbjm84snfpY3/lJNUlXzxLw5EY8Xx2U/69Qbb33tqx/errNvdralqx/p6le5+mduXH1A9UZR/aOaQ1VNUFWTVNVwpP2jGo70flTDkcaPap6YrhHnpZqIt6p55k7UL6jGqKpxqmoOVTVBVU1SVVNU1TRVNUNVDVUWF1UWF1UWF1UWF1UWF1UWF1UWF1UWF1UWF1UWF1UWN1UWN1UWN1UWN1UWN1UWN1UWN1UWN1UWN1UWN1UWD1UWD1UWD1UWD1UWD1UWP3Pvx/zx74m6vf0np8/c+/kF1SxTNc/c+/kF1RhVNU5VzflB1bz5d2qeuffzC6pJqmqKqpqmquaZWTyvf6fG3pxTz9z7+WY1/czdll9QzaGqJqiqSapqiqqaJ+aN50veeJ83qxmqapapGruoqjGqapyqmkNVTVBVk1TVFFU1VFlsVFlsVFnsVFnsVFnsVFnsVFnsVFnsVFnsVFnsVFnsVFnsVFl8qLKYakOrqTa0mmpDq09QVZNU1RRVNU1VzVBVw7Qt28G0LdtBlcVBlcVBlcVBlcVBlcVBlcVBlcVBlcVBlcVJlcVJlcVJlcVJlcVJlcVJlcVJlcVJlcVJlcVJlcVFlcVFlcVFlcVFlcVFlcVFlX5FlX5vb+VYvXo17j/6fH1Kvpyzd55781tT9aizr9e/7rH9cuq861S861S+61Rhp/7+9/8F"
|
|
543
981
|
},
|
|
544
982
|
{
|
|
545
|
-
"name": "
|
|
983
|
+
"name": "constructor",
|
|
546
984
|
"function_type": "Secret",
|
|
547
985
|
"is_internal": false,
|
|
548
986
|
"abi": {
|
|
@@ -604,18 +1042,127 @@
|
|
|
604
1042
|
}
|
|
605
1043
|
},
|
|
606
1044
|
{
|
|
607
|
-
"name": "
|
|
1045
|
+
"name": "historical_header",
|
|
608
1046
|
"type": {
|
|
609
1047
|
"kind": "struct",
|
|
610
|
-
"path": "authwit::aztec::protocol_types::
|
|
1048
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
611
1049
|
"fields": [
|
|
612
|
-
{
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
1050
|
+
{
|
|
1051
|
+
"name": "last_archive",
|
|
1052
|
+
"type": {
|
|
1053
|
+
"kind": "struct",
|
|
1054
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1055
|
+
"fields": [
|
|
1056
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1057
|
+
{
|
|
1058
|
+
"name": "next_available_leaf_index",
|
|
1059
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1060
|
+
}
|
|
1061
|
+
]
|
|
1062
|
+
}
|
|
1063
|
+
},
|
|
1064
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
1065
|
+
{
|
|
1066
|
+
"name": "state",
|
|
1067
|
+
"type": {
|
|
1068
|
+
"kind": "struct",
|
|
1069
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
1070
|
+
"fields": [
|
|
1071
|
+
{
|
|
1072
|
+
"name": "l1_to_l2_message_tree",
|
|
1073
|
+
"type": {
|
|
1074
|
+
"kind": "struct",
|
|
1075
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1076
|
+
"fields": [
|
|
1077
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1078
|
+
{
|
|
1079
|
+
"name": "next_available_leaf_index",
|
|
1080
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1081
|
+
}
|
|
1082
|
+
]
|
|
1083
|
+
}
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
"name": "partial",
|
|
1087
|
+
"type": {
|
|
1088
|
+
"kind": "struct",
|
|
1089
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
1090
|
+
"fields": [
|
|
1091
|
+
{
|
|
1092
|
+
"name": "note_hash_tree",
|
|
1093
|
+
"type": {
|
|
1094
|
+
"kind": "struct",
|
|
1095
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1096
|
+
"fields": [
|
|
1097
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1098
|
+
{
|
|
1099
|
+
"name": "next_available_leaf_index",
|
|
1100
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1101
|
+
}
|
|
1102
|
+
]
|
|
1103
|
+
}
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"name": "nullifier_tree",
|
|
1107
|
+
"type": {
|
|
1108
|
+
"kind": "struct",
|
|
1109
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1110
|
+
"fields": [
|
|
1111
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1112
|
+
{
|
|
1113
|
+
"name": "next_available_leaf_index",
|
|
1114
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1115
|
+
}
|
|
1116
|
+
]
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
"name": "contract_tree",
|
|
1121
|
+
"type": {
|
|
1122
|
+
"kind": "struct",
|
|
1123
|
+
"path": "authwit::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": "public_data_tree",
|
|
1135
|
+
"type": {
|
|
1136
|
+
"kind": "struct",
|
|
1137
|
+
"path": "authwit::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
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
]
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
"name": "global_variables",
|
|
1155
|
+
"type": {
|
|
1156
|
+
"kind": "struct",
|
|
1157
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
1158
|
+
"fields": [
|
|
1159
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
1160
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
1161
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
1162
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
1163
|
+
]
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
619
1166
|
]
|
|
620
1167
|
}
|
|
621
1168
|
},
|
|
@@ -664,53 +1211,9 @@
|
|
|
664
1211
|
]
|
|
665
1212
|
},
|
|
666
1213
|
"visibility": "private"
|
|
667
|
-
},
|
|
668
|
-
{
|
|
669
|
-
"name": "payload",
|
|
670
|
-
"type": {
|
|
671
|
-
"kind": "struct",
|
|
672
|
-
"path": "authwit::entrypoint::EntrypointPayload",
|
|
673
|
-
"fields": [
|
|
674
|
-
{
|
|
675
|
-
"name": "function_calls",
|
|
676
|
-
"type": {
|
|
677
|
-
"kind": "array",
|
|
678
|
-
"length": 4,
|
|
679
|
-
"type": {
|
|
680
|
-
"kind": "struct",
|
|
681
|
-
"path": "authwit::entrypoint::FunctionCall",
|
|
682
|
-
"fields": [
|
|
683
|
-
{ "name": "args_hash", "type": { "kind": "field" } },
|
|
684
|
-
{
|
|
685
|
-
"name": "function_selector",
|
|
686
|
-
"type": {
|
|
687
|
-
"kind": "struct",
|
|
688
|
-
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
|
|
689
|
-
"fields": [
|
|
690
|
-
{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
|
|
691
|
-
]
|
|
692
|
-
}
|
|
693
|
-
},
|
|
694
|
-
{
|
|
695
|
-
"name": "target_address",
|
|
696
|
-
"type": {
|
|
697
|
-
"kind": "struct",
|
|
698
|
-
"path": "authwit::aztec::protocol_types::address::AztecAddress",
|
|
699
|
-
"fields": [{ "name": "inner", "type": { "kind": "field" } }]
|
|
700
|
-
}
|
|
701
|
-
},
|
|
702
|
-
{ "name": "is_public", "type": { "kind": "boolean" } }
|
|
703
|
-
]
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
},
|
|
707
|
-
{ "name": "nonce", "type": { "kind": "field" } }
|
|
708
|
-
]
|
|
709
|
-
},
|
|
710
|
-
"visibility": "public"
|
|
711
1214
|
}
|
|
712
1215
|
],
|
|
713
|
-
"param_witnesses": { "inputs": [{ "start": 0, "end":
|
|
1216
|
+
"param_witnesses": { "inputs": [{ "start": 0, "end": 34 }] },
|
|
714
1217
|
"return_type": {
|
|
715
1218
|
"abi_type": {
|
|
716
1219
|
"kind": "struct",
|
|
@@ -781,6 +1284,41 @@
|
|
|
781
1284
|
}
|
|
782
1285
|
}
|
|
783
1286
|
},
|
|
1287
|
+
{
|
|
1288
|
+
"name": "nullifier_key_validation_requests",
|
|
1289
|
+
"type": {
|
|
1290
|
+
"kind": "array",
|
|
1291
|
+
"length": 1,
|
|
1292
|
+
"type": {
|
|
1293
|
+
"kind": "struct",
|
|
1294
|
+
"path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
|
|
1295
|
+
"fields": [
|
|
1296
|
+
{
|
|
1297
|
+
"name": "public_key",
|
|
1298
|
+
"type": {
|
|
1299
|
+
"kind": "struct",
|
|
1300
|
+
"path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
|
|
1301
|
+
"fields": [
|
|
1302
|
+
{ "name": "x", "type": { "kind": "field" } },
|
|
1303
|
+
{ "name": "y", "type": { "kind": "field" } }
|
|
1304
|
+
]
|
|
1305
|
+
}
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"name": "secret_key",
|
|
1309
|
+
"type": {
|
|
1310
|
+
"kind": "struct",
|
|
1311
|
+
"path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
|
|
1312
|
+
"fields": [
|
|
1313
|
+
{ "name": "high", "type": { "kind": "field" } },
|
|
1314
|
+
{ "name": "low", "type": { "kind": "field" } }
|
|
1315
|
+
]
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
]
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
},
|
|
784
1322
|
{
|
|
785
1323
|
"name": "new_commitments",
|
|
786
1324
|
"type": {
|
|
@@ -830,18 +1368,127 @@
|
|
|
830
1368
|
{ "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
831
1369
|
{ "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
832
1370
|
{
|
|
833
|
-
"name": "
|
|
1371
|
+
"name": "historical_header",
|
|
834
1372
|
"type": {
|
|
835
1373
|
"kind": "struct",
|
|
836
|
-
"path": "authwit::aztec::protocol_types::
|
|
1374
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
837
1375
|
"fields": [
|
|
838
|
-
{
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
1376
|
+
{
|
|
1377
|
+
"name": "last_archive",
|
|
1378
|
+
"type": {
|
|
1379
|
+
"kind": "struct",
|
|
1380
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1381
|
+
"fields": [
|
|
1382
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1383
|
+
{
|
|
1384
|
+
"name": "next_available_leaf_index",
|
|
1385
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1386
|
+
}
|
|
1387
|
+
]
|
|
1388
|
+
}
|
|
1389
|
+
},
|
|
1390
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
1391
|
+
{
|
|
1392
|
+
"name": "state",
|
|
1393
|
+
"type": {
|
|
1394
|
+
"kind": "struct",
|
|
1395
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
1396
|
+
"fields": [
|
|
1397
|
+
{
|
|
1398
|
+
"name": "l1_to_l2_message_tree",
|
|
1399
|
+
"type": {
|
|
1400
|
+
"kind": "struct",
|
|
1401
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1402
|
+
"fields": [
|
|
1403
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1404
|
+
{
|
|
1405
|
+
"name": "next_available_leaf_index",
|
|
1406
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1407
|
+
}
|
|
1408
|
+
]
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
"name": "partial",
|
|
1413
|
+
"type": {
|
|
1414
|
+
"kind": "struct",
|
|
1415
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
1416
|
+
"fields": [
|
|
1417
|
+
{
|
|
1418
|
+
"name": "note_hash_tree",
|
|
1419
|
+
"type": {
|
|
1420
|
+
"kind": "struct",
|
|
1421
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1422
|
+
"fields": [
|
|
1423
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1424
|
+
{
|
|
1425
|
+
"name": "next_available_leaf_index",
|
|
1426
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1427
|
+
}
|
|
1428
|
+
]
|
|
1429
|
+
}
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
"name": "nullifier_tree",
|
|
1433
|
+
"type": {
|
|
1434
|
+
"kind": "struct",
|
|
1435
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1436
|
+
"fields": [
|
|
1437
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1438
|
+
{
|
|
1439
|
+
"name": "next_available_leaf_index",
|
|
1440
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1441
|
+
}
|
|
1442
|
+
]
|
|
1443
|
+
}
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"name": "contract_tree",
|
|
1447
|
+
"type": {
|
|
1448
|
+
"kind": "struct",
|
|
1449
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1450
|
+
"fields": [
|
|
1451
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1452
|
+
{
|
|
1453
|
+
"name": "next_available_leaf_index",
|
|
1454
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1455
|
+
}
|
|
1456
|
+
]
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1459
|
+
{
|
|
1460
|
+
"name": "public_data_tree",
|
|
1461
|
+
"type": {
|
|
1462
|
+
"kind": "struct",
|
|
1463
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1464
|
+
"fields": [
|
|
1465
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1466
|
+
{
|
|
1467
|
+
"name": "next_available_leaf_index",
|
|
1468
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1469
|
+
}
|
|
1470
|
+
]
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
]
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
]
|
|
1477
|
+
}
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
"name": "global_variables",
|
|
1481
|
+
"type": {
|
|
1482
|
+
"kind": "struct",
|
|
1483
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
1484
|
+
"fields": [
|
|
1485
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
1486
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
1487
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
1488
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
1489
|
+
]
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
845
1492
|
]
|
|
846
1493
|
}
|
|
847
1494
|
},
|
|
@@ -883,24 +1530,22 @@
|
|
|
883
1530
|
"visibility": "public"
|
|
884
1531
|
},
|
|
885
1532
|
"return_witnesses": [
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696,
|
|
896
|
-
3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705
|
|
1533
|
+
35, 36, 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,
|
|
1534
|
+
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,
|
|
1535
|
+
89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
|
|
1536
|
+
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
|
|
1537
|
+
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
|
|
1538
|
+
157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
|
|
1539
|
+
179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
|
|
1540
|
+
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
|
|
1541
|
+
223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238
|
|
897
1542
|
]
|
|
898
1543
|
},
|
|
899
|
-
"bytecode": "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",
|
|
900
|
-
"debug_symbols": "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"
|
|
1544
|
+
"bytecode": "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",
|
|
1545
|
+
"debug_symbols": "q1bKyU9OLMnMzytWsqqurQUA"
|
|
901
1546
|
},
|
|
902
1547
|
{
|
|
903
|
-
"name": "
|
|
1548
|
+
"name": "is_valid",
|
|
904
1549
|
"function_type": "Secret",
|
|
905
1550
|
"is_internal": false,
|
|
906
1551
|
"abi": {
|
|
@@ -962,18 +1607,127 @@
|
|
|
962
1607
|
}
|
|
963
1608
|
},
|
|
964
1609
|
{
|
|
965
|
-
"name": "
|
|
1610
|
+
"name": "historical_header",
|
|
966
1611
|
"type": {
|
|
967
1612
|
"kind": "struct",
|
|
968
|
-
"path": "authwit::aztec::protocol_types::
|
|
1613
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
969
1614
|
"fields": [
|
|
970
|
-
{
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
1615
|
+
{
|
|
1616
|
+
"name": "last_archive",
|
|
1617
|
+
"type": {
|
|
1618
|
+
"kind": "struct",
|
|
1619
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1620
|
+
"fields": [
|
|
1621
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1622
|
+
{
|
|
1623
|
+
"name": "next_available_leaf_index",
|
|
1624
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1625
|
+
}
|
|
1626
|
+
]
|
|
1627
|
+
}
|
|
1628
|
+
},
|
|
1629
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
1630
|
+
{
|
|
1631
|
+
"name": "state",
|
|
1632
|
+
"type": {
|
|
1633
|
+
"kind": "struct",
|
|
1634
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
1635
|
+
"fields": [
|
|
1636
|
+
{
|
|
1637
|
+
"name": "l1_to_l2_message_tree",
|
|
1638
|
+
"type": {
|
|
1639
|
+
"kind": "struct",
|
|
1640
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1641
|
+
"fields": [
|
|
1642
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1643
|
+
{
|
|
1644
|
+
"name": "next_available_leaf_index",
|
|
1645
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1646
|
+
}
|
|
1647
|
+
]
|
|
1648
|
+
}
|
|
1649
|
+
},
|
|
1650
|
+
{
|
|
1651
|
+
"name": "partial",
|
|
1652
|
+
"type": {
|
|
1653
|
+
"kind": "struct",
|
|
1654
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
1655
|
+
"fields": [
|
|
1656
|
+
{
|
|
1657
|
+
"name": "note_hash_tree",
|
|
1658
|
+
"type": {
|
|
1659
|
+
"kind": "struct",
|
|
1660
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1661
|
+
"fields": [
|
|
1662
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1663
|
+
{
|
|
1664
|
+
"name": "next_available_leaf_index",
|
|
1665
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1666
|
+
}
|
|
1667
|
+
]
|
|
1668
|
+
}
|
|
1669
|
+
},
|
|
1670
|
+
{
|
|
1671
|
+
"name": "nullifier_tree",
|
|
1672
|
+
"type": {
|
|
1673
|
+
"kind": "struct",
|
|
1674
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1675
|
+
"fields": [
|
|
1676
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1677
|
+
{
|
|
1678
|
+
"name": "next_available_leaf_index",
|
|
1679
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1680
|
+
}
|
|
1681
|
+
]
|
|
1682
|
+
}
|
|
1683
|
+
},
|
|
1684
|
+
{
|
|
1685
|
+
"name": "contract_tree",
|
|
1686
|
+
"type": {
|
|
1687
|
+
"kind": "struct",
|
|
1688
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1689
|
+
"fields": [
|
|
1690
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1691
|
+
{
|
|
1692
|
+
"name": "next_available_leaf_index",
|
|
1693
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1694
|
+
}
|
|
1695
|
+
]
|
|
1696
|
+
}
|
|
1697
|
+
},
|
|
1698
|
+
{
|
|
1699
|
+
"name": "public_data_tree",
|
|
1700
|
+
"type": {
|
|
1701
|
+
"kind": "struct",
|
|
1702
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1703
|
+
"fields": [
|
|
1704
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1705
|
+
{
|
|
1706
|
+
"name": "next_available_leaf_index",
|
|
1707
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1708
|
+
}
|
|
1709
|
+
]
|
|
1710
|
+
}
|
|
1711
|
+
}
|
|
1712
|
+
]
|
|
1713
|
+
}
|
|
1714
|
+
}
|
|
1715
|
+
]
|
|
1716
|
+
}
|
|
1717
|
+
},
|
|
1718
|
+
{
|
|
1719
|
+
"name": "global_variables",
|
|
1720
|
+
"type": {
|
|
1721
|
+
"kind": "struct",
|
|
1722
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
1723
|
+
"fields": [
|
|
1724
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
1725
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
1726
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
1727
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
1728
|
+
]
|
|
1729
|
+
}
|
|
1730
|
+
}
|
|
977
1731
|
]
|
|
978
1732
|
}
|
|
979
1733
|
},
|
|
@@ -1022,9 +1776,10 @@
|
|
|
1022
1776
|
]
|
|
1023
1777
|
},
|
|
1024
1778
|
"visibility": "private"
|
|
1025
|
-
}
|
|
1779
|
+
},
|
|
1780
|
+
{ "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
|
|
1026
1781
|
],
|
|
1027
|
-
"param_witnesses": { "inputs": [{ "start": 0, "end":
|
|
1782
|
+
"param_witnesses": { "inputs": [{ "start": 0, "end": 34 }], "message_hash": [{ "start": 34, "end": 35 }] },
|
|
1028
1783
|
"return_type": {
|
|
1029
1784
|
"abi_type": {
|
|
1030
1785
|
"kind": "struct",
|
|
@@ -1095,6 +1850,41 @@
|
|
|
1095
1850
|
}
|
|
1096
1851
|
}
|
|
1097
1852
|
},
|
|
1853
|
+
{
|
|
1854
|
+
"name": "nullifier_key_validation_requests",
|
|
1855
|
+
"type": {
|
|
1856
|
+
"kind": "array",
|
|
1857
|
+
"length": 1,
|
|
1858
|
+
"type": {
|
|
1859
|
+
"kind": "struct",
|
|
1860
|
+
"path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
|
|
1861
|
+
"fields": [
|
|
1862
|
+
{
|
|
1863
|
+
"name": "public_key",
|
|
1864
|
+
"type": {
|
|
1865
|
+
"kind": "struct",
|
|
1866
|
+
"path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
|
|
1867
|
+
"fields": [
|
|
1868
|
+
{ "name": "x", "type": { "kind": "field" } },
|
|
1869
|
+
{ "name": "y", "type": { "kind": "field" } }
|
|
1870
|
+
]
|
|
1871
|
+
}
|
|
1872
|
+
},
|
|
1873
|
+
{
|
|
1874
|
+
"name": "secret_key",
|
|
1875
|
+
"type": {
|
|
1876
|
+
"kind": "struct",
|
|
1877
|
+
"path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
|
|
1878
|
+
"fields": [
|
|
1879
|
+
{ "name": "high", "type": { "kind": "field" } },
|
|
1880
|
+
{ "name": "low", "type": { "kind": "field" } }
|
|
1881
|
+
]
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
]
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
},
|
|
1098
1888
|
{
|
|
1099
1889
|
"name": "new_commitments",
|
|
1100
1890
|
"type": {
|
|
@@ -1144,18 +1934,127 @@
|
|
|
1144
1934
|
{ "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
1145
1935
|
{ "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
1146
1936
|
{
|
|
1147
|
-
"name": "
|
|
1937
|
+
"name": "historical_header",
|
|
1148
1938
|
"type": {
|
|
1149
1939
|
"kind": "struct",
|
|
1150
|
-
"path": "authwit::aztec::protocol_types::
|
|
1940
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
1151
1941
|
"fields": [
|
|
1152
|
-
{
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1942
|
+
{
|
|
1943
|
+
"name": "last_archive",
|
|
1944
|
+
"type": {
|
|
1945
|
+
"kind": "struct",
|
|
1946
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1947
|
+
"fields": [
|
|
1948
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1949
|
+
{
|
|
1950
|
+
"name": "next_available_leaf_index",
|
|
1951
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1952
|
+
}
|
|
1953
|
+
]
|
|
1954
|
+
}
|
|
1955
|
+
},
|
|
1956
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
1957
|
+
{
|
|
1958
|
+
"name": "state",
|
|
1959
|
+
"type": {
|
|
1960
|
+
"kind": "struct",
|
|
1961
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
1962
|
+
"fields": [
|
|
1963
|
+
{
|
|
1964
|
+
"name": "l1_to_l2_message_tree",
|
|
1965
|
+
"type": {
|
|
1966
|
+
"kind": "struct",
|
|
1967
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1968
|
+
"fields": [
|
|
1969
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1970
|
+
{
|
|
1971
|
+
"name": "next_available_leaf_index",
|
|
1972
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1973
|
+
}
|
|
1974
|
+
]
|
|
1975
|
+
}
|
|
1976
|
+
},
|
|
1977
|
+
{
|
|
1978
|
+
"name": "partial",
|
|
1979
|
+
"type": {
|
|
1980
|
+
"kind": "struct",
|
|
1981
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
1982
|
+
"fields": [
|
|
1983
|
+
{
|
|
1984
|
+
"name": "note_hash_tree",
|
|
1985
|
+
"type": {
|
|
1986
|
+
"kind": "struct",
|
|
1987
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
1988
|
+
"fields": [
|
|
1989
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
1990
|
+
{
|
|
1991
|
+
"name": "next_available_leaf_index",
|
|
1992
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
1993
|
+
}
|
|
1994
|
+
]
|
|
1995
|
+
}
|
|
1996
|
+
},
|
|
1997
|
+
{
|
|
1998
|
+
"name": "nullifier_tree",
|
|
1999
|
+
"type": {
|
|
2000
|
+
"kind": "struct",
|
|
2001
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2002
|
+
"fields": [
|
|
2003
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2004
|
+
{
|
|
2005
|
+
"name": "next_available_leaf_index",
|
|
2006
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2007
|
+
}
|
|
2008
|
+
]
|
|
2009
|
+
}
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
"name": "contract_tree",
|
|
2013
|
+
"type": {
|
|
2014
|
+
"kind": "struct",
|
|
2015
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2016
|
+
"fields": [
|
|
2017
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2018
|
+
{
|
|
2019
|
+
"name": "next_available_leaf_index",
|
|
2020
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2021
|
+
}
|
|
2022
|
+
]
|
|
2023
|
+
}
|
|
2024
|
+
},
|
|
2025
|
+
{
|
|
2026
|
+
"name": "public_data_tree",
|
|
2027
|
+
"type": {
|
|
2028
|
+
"kind": "struct",
|
|
2029
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2030
|
+
"fields": [
|
|
2031
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2032
|
+
{
|
|
2033
|
+
"name": "next_available_leaf_index",
|
|
2034
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2035
|
+
}
|
|
2036
|
+
]
|
|
2037
|
+
}
|
|
2038
|
+
}
|
|
2039
|
+
]
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
]
|
|
2043
|
+
}
|
|
2044
|
+
},
|
|
2045
|
+
{
|
|
2046
|
+
"name": "global_variables",
|
|
2047
|
+
"type": {
|
|
2048
|
+
"kind": "struct",
|
|
2049
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
2050
|
+
"fields": [
|
|
2051
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
2052
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
2053
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
2054
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
2055
|
+
]
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
1159
2058
|
]
|
|
1160
2059
|
}
|
|
1161
2060
|
},
|
|
@@ -1197,21 +2096,23 @@
|
|
|
1197
2096
|
"visibility": "public"
|
|
1198
2097
|
},
|
|
1199
2098
|
"return_witnesses": [
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
2099
|
+
241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
|
|
2100
|
+
263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
|
2101
|
+
285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
|
|
2102
|
+
307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
|
|
2103
|
+
329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
|
|
2104
|
+
351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
|
|
2105
|
+
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
|
|
2106
|
+
395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416,
|
|
2107
|
+
417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
|
|
2108
|
+
439, 440, 441, 442, 443, 444
|
|
1208
2109
|
]
|
|
1209
2110
|
},
|
|
1210
|
-
"bytecode": "H4sIAAAAAAAA/+
|
|
1211
|
-
"debug_symbols": "
|
|
2111
|
+
"bytecode": "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",
|
|
2112
|
+
"debug_symbols": "7Z3dalxXGkTfRdcmnKr971cZ5sLMZCAQnGHsO+N3HwvcLQt9cZN9etkKfFch4WxVU94rKsmL7k8Pv//xr3cff/vj/YeHt58epIe3//j08OG/794//uuHj+/+9/Hh7fHm4df3//7yz89vHv7z2++/Pry1yuc3L57TWpdHfcjXp2v0sEutl4froevDOmb0pY812tfHpaOsZ8//882D/Ld95eXHvfI65uXhVubpV16jV75GuRw6jnLr5c+1Lk+v9vTyv/z36OnexuXpPsezr/34etqPfj3juNwEjeobX9u1X8of9ZtnW9i9fH3VtX7zOqKHqy9/rKq9ffvwYys9WwlaGdlK0MrMVoJWVrbyshUf2UrQirKVoBVnK0ErJVsJWqnZStBKbtuoldy2USu5baNWcttGreS2DVopuW2jVnLbRq3kto1ayW0btVKzlaCV3LZRK7lto1Zy20at5LaNWsltG7RSc9tGreS2jVrJbRu1kts2aqVmK0EruW2jVnLbRq3kto1ayW0btZLbNmil5baNWsltG7WS2zZqJbdt1ErNVoJWcttGreS2jVrJbRu1kts2aiW3bdBKz20btZLbNmolt23USm7bqJWarQSt5LaNWsltG7WS2zZqJbdt1Epu26CVkds2aiW3bdRKbtuoldy2USs1WwlayW0btZLbNmolt23USm7bqJVXvm2vX7paz1r58trn616gtVwerq2+eO2veyfWfrlgzeXGbVzz+gY/Kk8Py/HVvfEGRfOnTsW+nn3tx9fzw0fa998wadb839jL/43NnEdRKzmPolZyHkWt5DyKWslf/QWtrPzVX9RK/uovaiV/9Re1kr/6i1qp2UrQSm7bqJXctlEruW2jVnLbRq3kto3eOPbIcRvWkus2rCXnbVhL7tuwlpq1RLXkwg1ryYkb1pIbN6wlR25YS67cqBblyg1ryZUb1pIrN6wlV25YS81aolpy5Ya15MoNa8mVG9aSKzesJVduVEt+3lVcS67csJZcuWEtuXLDWmrWEtWSKzesJVduWEuu3LCWXLlhLblyo1ryk6/iWnLlhrXkyg1ryZUb1lKzlqiWXLlhLblyw1py5Ya15MoNa8mVG9WSn4EV15IrN6wlV25YS67csJaatUS15MoNa8mVG9aSKzes5ZWv3O+9w5Je+UdWffctlvTKP1nq573Hkn7up0u9fJMl1V9i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"
|
|
1212
2113
|
},
|
|
1213
2114
|
{
|
|
1214
|
-
"name": "
|
|
2115
|
+
"name": "entrypoint",
|
|
1215
2116
|
"function_type": "Secret",
|
|
1216
2117
|
"is_internal": false,
|
|
1217
2118
|
"abi": {
|
|
@@ -1273,18 +2174,127 @@
|
|
|
1273
2174
|
}
|
|
1274
2175
|
},
|
|
1275
2176
|
{
|
|
1276
|
-
"name": "
|
|
2177
|
+
"name": "historical_header",
|
|
1277
2178
|
"type": {
|
|
1278
2179
|
"kind": "struct",
|
|
1279
|
-
"path": "authwit::aztec::protocol_types::
|
|
2180
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
1280
2181
|
"fields": [
|
|
1281
|
-
{
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
2182
|
+
{
|
|
2183
|
+
"name": "last_archive",
|
|
2184
|
+
"type": {
|
|
2185
|
+
"kind": "struct",
|
|
2186
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2187
|
+
"fields": [
|
|
2188
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2189
|
+
{
|
|
2190
|
+
"name": "next_available_leaf_index",
|
|
2191
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2192
|
+
}
|
|
2193
|
+
]
|
|
2194
|
+
}
|
|
2195
|
+
},
|
|
2196
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
2197
|
+
{
|
|
2198
|
+
"name": "state",
|
|
2199
|
+
"type": {
|
|
2200
|
+
"kind": "struct",
|
|
2201
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
2202
|
+
"fields": [
|
|
2203
|
+
{
|
|
2204
|
+
"name": "l1_to_l2_message_tree",
|
|
2205
|
+
"type": {
|
|
2206
|
+
"kind": "struct",
|
|
2207
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2208
|
+
"fields": [
|
|
2209
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2210
|
+
{
|
|
2211
|
+
"name": "next_available_leaf_index",
|
|
2212
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2213
|
+
}
|
|
2214
|
+
]
|
|
2215
|
+
}
|
|
2216
|
+
},
|
|
2217
|
+
{
|
|
2218
|
+
"name": "partial",
|
|
2219
|
+
"type": {
|
|
2220
|
+
"kind": "struct",
|
|
2221
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
2222
|
+
"fields": [
|
|
2223
|
+
{
|
|
2224
|
+
"name": "note_hash_tree",
|
|
2225
|
+
"type": {
|
|
2226
|
+
"kind": "struct",
|
|
2227
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2228
|
+
"fields": [
|
|
2229
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2230
|
+
{
|
|
2231
|
+
"name": "next_available_leaf_index",
|
|
2232
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2233
|
+
}
|
|
2234
|
+
]
|
|
2235
|
+
}
|
|
2236
|
+
},
|
|
2237
|
+
{
|
|
2238
|
+
"name": "nullifier_tree",
|
|
2239
|
+
"type": {
|
|
2240
|
+
"kind": "struct",
|
|
2241
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2242
|
+
"fields": [
|
|
2243
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2244
|
+
{
|
|
2245
|
+
"name": "next_available_leaf_index",
|
|
2246
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2247
|
+
}
|
|
2248
|
+
]
|
|
2249
|
+
}
|
|
2250
|
+
},
|
|
2251
|
+
{
|
|
2252
|
+
"name": "contract_tree",
|
|
2253
|
+
"type": {
|
|
2254
|
+
"kind": "struct",
|
|
2255
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2256
|
+
"fields": [
|
|
2257
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2258
|
+
{
|
|
2259
|
+
"name": "next_available_leaf_index",
|
|
2260
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2261
|
+
}
|
|
2262
|
+
]
|
|
2263
|
+
}
|
|
2264
|
+
},
|
|
2265
|
+
{
|
|
2266
|
+
"name": "public_data_tree",
|
|
2267
|
+
"type": {
|
|
2268
|
+
"kind": "struct",
|
|
2269
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2270
|
+
"fields": [
|
|
2271
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2272
|
+
{
|
|
2273
|
+
"name": "next_available_leaf_index",
|
|
2274
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2275
|
+
}
|
|
2276
|
+
]
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
2279
|
+
]
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
]
|
|
2283
|
+
}
|
|
2284
|
+
},
|
|
2285
|
+
{
|
|
2286
|
+
"name": "global_variables",
|
|
2287
|
+
"type": {
|
|
2288
|
+
"kind": "struct",
|
|
2289
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
2290
|
+
"fields": [
|
|
2291
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
2292
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
2293
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
2294
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
2295
|
+
]
|
|
2296
|
+
}
|
|
2297
|
+
}
|
|
1288
2298
|
]
|
|
1289
2299
|
}
|
|
1290
2300
|
},
|
|
@@ -1334,9 +2344,52 @@
|
|
|
1334
2344
|
},
|
|
1335
2345
|
"visibility": "private"
|
|
1336
2346
|
},
|
|
1337
|
-
{
|
|
2347
|
+
{
|
|
2348
|
+
"name": "payload",
|
|
2349
|
+
"type": {
|
|
2350
|
+
"kind": "struct",
|
|
2351
|
+
"path": "authwit::entrypoint::EntrypointPayload",
|
|
2352
|
+
"fields": [
|
|
2353
|
+
{
|
|
2354
|
+
"name": "function_calls",
|
|
2355
|
+
"type": {
|
|
2356
|
+
"kind": "array",
|
|
2357
|
+
"length": 4,
|
|
2358
|
+
"type": {
|
|
2359
|
+
"kind": "struct",
|
|
2360
|
+
"path": "authwit::entrypoint::FunctionCall",
|
|
2361
|
+
"fields": [
|
|
2362
|
+
{ "name": "args_hash", "type": { "kind": "field" } },
|
|
2363
|
+
{
|
|
2364
|
+
"name": "function_selector",
|
|
2365
|
+
"type": {
|
|
2366
|
+
"kind": "struct",
|
|
2367
|
+
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
|
|
2368
|
+
"fields": [
|
|
2369
|
+
{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
|
|
2370
|
+
]
|
|
2371
|
+
}
|
|
2372
|
+
},
|
|
2373
|
+
{
|
|
2374
|
+
"name": "target_address",
|
|
2375
|
+
"type": {
|
|
2376
|
+
"kind": "struct",
|
|
2377
|
+
"path": "authwit::aztec::protocol_types::address::AztecAddress",
|
|
2378
|
+
"fields": [{ "name": "inner", "type": { "kind": "field" } }]
|
|
2379
|
+
}
|
|
2380
|
+
},
|
|
2381
|
+
{ "name": "is_public", "type": { "kind": "boolean" } }
|
|
2382
|
+
]
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
},
|
|
2386
|
+
{ "name": "nonce", "type": { "kind": "field" } }
|
|
2387
|
+
]
|
|
2388
|
+
},
|
|
2389
|
+
"visibility": "public"
|
|
2390
|
+
}
|
|
1338
2391
|
],
|
|
1339
|
-
"param_witnesses": { "inputs": [{ "start": 0, "end":
|
|
2392
|
+
"param_witnesses": { "inputs": [{ "start": 0, "end": 34 }], "payload": [{ "start": 34, "end": 51 }] },
|
|
1340
2393
|
"return_type": {
|
|
1341
2394
|
"abi_type": {
|
|
1342
2395
|
"kind": "struct",
|
|
@@ -1407,6 +2460,41 @@
|
|
|
1407
2460
|
}
|
|
1408
2461
|
}
|
|
1409
2462
|
},
|
|
2463
|
+
{
|
|
2464
|
+
"name": "nullifier_key_validation_requests",
|
|
2465
|
+
"type": {
|
|
2466
|
+
"kind": "array",
|
|
2467
|
+
"length": 1,
|
|
2468
|
+
"type": {
|
|
2469
|
+
"kind": "struct",
|
|
2470
|
+
"path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest",
|
|
2471
|
+
"fields": [
|
|
2472
|
+
{
|
|
2473
|
+
"name": "public_key",
|
|
2474
|
+
"type": {
|
|
2475
|
+
"kind": "struct",
|
|
2476
|
+
"path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
|
|
2477
|
+
"fields": [
|
|
2478
|
+
{ "name": "x", "type": { "kind": "field" } },
|
|
2479
|
+
{ "name": "y", "type": { "kind": "field" } }
|
|
2480
|
+
]
|
|
2481
|
+
}
|
|
2482
|
+
},
|
|
2483
|
+
{
|
|
2484
|
+
"name": "secret_key",
|
|
2485
|
+
"type": {
|
|
2486
|
+
"kind": "struct",
|
|
2487
|
+
"path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey",
|
|
2488
|
+
"fields": [
|
|
2489
|
+
{ "name": "high", "type": { "kind": "field" } },
|
|
2490
|
+
{ "name": "low", "type": { "kind": "field" } }
|
|
2491
|
+
]
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
]
|
|
2495
|
+
}
|
|
2496
|
+
}
|
|
2497
|
+
},
|
|
1410
2498
|
{
|
|
1411
2499
|
"name": "new_commitments",
|
|
1412
2500
|
"type": {
|
|
@@ -1456,18 +2544,127 @@
|
|
|
1456
2544
|
{ "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
1457
2545
|
{ "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
|
|
1458
2546
|
{
|
|
1459
|
-
"name": "
|
|
2547
|
+
"name": "historical_header",
|
|
1460
2548
|
"type": {
|
|
1461
2549
|
"kind": "struct",
|
|
1462
|
-
"path": "authwit::aztec::protocol_types::
|
|
2550
|
+
"path": "authwit::aztec::protocol_types::header::Header",
|
|
1463
2551
|
"fields": [
|
|
1464
|
-
{
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
2552
|
+
{
|
|
2553
|
+
"name": "last_archive",
|
|
2554
|
+
"type": {
|
|
2555
|
+
"kind": "struct",
|
|
2556
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2557
|
+
"fields": [
|
|
2558
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2559
|
+
{
|
|
2560
|
+
"name": "next_available_leaf_index",
|
|
2561
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2562
|
+
}
|
|
2563
|
+
]
|
|
2564
|
+
}
|
|
2565
|
+
},
|
|
2566
|
+
{ "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
|
|
2567
|
+
{
|
|
2568
|
+
"name": "state",
|
|
2569
|
+
"type": {
|
|
2570
|
+
"kind": "struct",
|
|
2571
|
+
"path": "authwit::aztec::protocol_types::state_reference::StateReference",
|
|
2572
|
+
"fields": [
|
|
2573
|
+
{
|
|
2574
|
+
"name": "l1_to_l2_message_tree",
|
|
2575
|
+
"type": {
|
|
2576
|
+
"kind": "struct",
|
|
2577
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2578
|
+
"fields": [
|
|
2579
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2580
|
+
{
|
|
2581
|
+
"name": "next_available_leaf_index",
|
|
2582
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2583
|
+
}
|
|
2584
|
+
]
|
|
2585
|
+
}
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
"name": "partial",
|
|
2589
|
+
"type": {
|
|
2590
|
+
"kind": "struct",
|
|
2591
|
+
"path": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference",
|
|
2592
|
+
"fields": [
|
|
2593
|
+
{
|
|
2594
|
+
"name": "note_hash_tree",
|
|
2595
|
+
"type": {
|
|
2596
|
+
"kind": "struct",
|
|
2597
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2598
|
+
"fields": [
|
|
2599
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2600
|
+
{
|
|
2601
|
+
"name": "next_available_leaf_index",
|
|
2602
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2603
|
+
}
|
|
2604
|
+
]
|
|
2605
|
+
}
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
"name": "nullifier_tree",
|
|
2609
|
+
"type": {
|
|
2610
|
+
"kind": "struct",
|
|
2611
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2612
|
+
"fields": [
|
|
2613
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2614
|
+
{
|
|
2615
|
+
"name": "next_available_leaf_index",
|
|
2616
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2617
|
+
}
|
|
2618
|
+
]
|
|
2619
|
+
}
|
|
2620
|
+
},
|
|
2621
|
+
{
|
|
2622
|
+
"name": "contract_tree",
|
|
2623
|
+
"type": {
|
|
2624
|
+
"kind": "struct",
|
|
2625
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2626
|
+
"fields": [
|
|
2627
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2628
|
+
{
|
|
2629
|
+
"name": "next_available_leaf_index",
|
|
2630
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2631
|
+
}
|
|
2632
|
+
]
|
|
2633
|
+
}
|
|
2634
|
+
},
|
|
2635
|
+
{
|
|
2636
|
+
"name": "public_data_tree",
|
|
2637
|
+
"type": {
|
|
2638
|
+
"kind": "struct",
|
|
2639
|
+
"path": "authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot",
|
|
2640
|
+
"fields": [
|
|
2641
|
+
{ "name": "root", "type": { "kind": "field" } },
|
|
2642
|
+
{
|
|
2643
|
+
"name": "next_available_leaf_index",
|
|
2644
|
+
"type": { "kind": "integer", "sign": "unsigned", "width": 32 }
|
|
2645
|
+
}
|
|
2646
|
+
]
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
]
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
]
|
|
2653
|
+
}
|
|
2654
|
+
},
|
|
2655
|
+
{
|
|
2656
|
+
"name": "global_variables",
|
|
2657
|
+
"type": {
|
|
2658
|
+
"kind": "struct",
|
|
2659
|
+
"path": "authwit::aztec::protocol_types::abis::global_variables::GlobalVariables",
|
|
2660
|
+
"fields": [
|
|
2661
|
+
{ "name": "chain_id", "type": { "kind": "field" } },
|
|
2662
|
+
{ "name": "version", "type": { "kind": "field" } },
|
|
2663
|
+
{ "name": "block_number", "type": { "kind": "field" } },
|
|
2664
|
+
{ "name": "timestamp", "type": { "kind": "field" } }
|
|
2665
|
+
]
|
|
2666
|
+
}
|
|
2667
|
+
}
|
|
1471
2668
|
]
|
|
1472
2669
|
}
|
|
1473
2670
|
},
|
|
@@ -1509,144 +2706,163 @@
|
|
|
1509
2706
|
"visibility": "public"
|
|
1510
2707
|
},
|
|
1511
2708
|
"return_witnesses": [
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
2709
|
+
3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749,
|
|
2710
|
+
3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767,
|
|
2711
|
+
3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785,
|
|
2712
|
+
3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803,
|
|
2713
|
+
3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821,
|
|
2714
|
+
3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839,
|
|
2715
|
+
3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857,
|
|
2716
|
+
3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875,
|
|
2717
|
+
3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893,
|
|
2718
|
+
3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911,
|
|
2719
|
+
3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929,
|
|
2720
|
+
3930, 3931, 3932, 3933, 3934, 3935
|
|
1521
2721
|
]
|
|
1522
2722
|
},
|
|
1523
|
-
"bytecode": "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",
|
|
1524
|
-
"debug_symbols": "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"
|
|
2723
|
+
"bytecode": "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",
|
|
2724
|
+
"debug_symbols": "7b3druPIkmb5LnldaNCdzr96lcFcFGZ6gAYa1YOuuiucd2/liRClONLZlqFYHjKK6yojAWnzs+XiNlvcLvK//vif/+v/+bf//B//69//449//a8/yvbHv/5f//XHf/z///bvf/7vf/znv/3v//zjX4d/+eO///v/e/nv3/7lj//vf/zP//7Hv9Yy/u1fHl5Xtu360jqUur+6PXtxHVu7vrgNZX9xGdZnP3rYlun7y0sZxu2H1//f//JHHQ6bvPy+5G1Zry+exvWXk9dnyZdp/P6mZQ3TT9NyPcK03KFct2fxh/H66lrqePfq1+KPvxx/Xq/wy1K2IH6Zb8XO6/LDz/4zTvvNcZah7a9uNfjZtc1X9Eu7e+30lHyp1588tHaX49mLW71+Jkubp/sX/wllEsojlFkoj1AWoTxCWYXyCGUTygOUcRDKI5QilEcoVSiPUEahPEJpQnmE4kT7BIoT7RMoTrRPoDjRPoHiRPsIpTnRPoHiRPsEihPtEyhOtE+gNKE8QnGifQLFifYJFCfaJ1CcaJ9AcaJ9hDI50T6B4kT7BIoT7RMoTrRPoDShPEJxon0CxYn2CRQn2idQnGifQHGifYQyO9E+geJE+wSKE+0TKE60T6A0oTxCcaJ9AsWJ9gkUJ9onUJxon0Bxon2EsjjRPoHiRPsEihPtEyhOtE+gNKE8QnGifQLFifYJFCfaJ1CcaJ9AcaJ9hLI60T6B4kT7BIoT7RMoTrRPoDShPEJxon0CxYn2CRQn2idQck+02/b9xa2WH6D8GT313NnG64vb1P4x+pZ6Omzz9dM13d0v6PlHcVv3u/OU8fbiUp9/boObC23vHBDn7Yef/WecXx/NljrfDtCCOOO436ppHOf57tVPT+yy7eHrsP3A/s/w45HDtyOHn39z+Dbs4adxicIvly5w++Hjrdhl+Hv6JXf6dd5/4yxbGe7TP758LuX7i+f7W59dQv1Z6XqaSrezVFqG4TyllvOUWs9T6nieUtt5Sp3OU2ry8Ycs9TSz0kXQcpe6tXIrda7/MNRezPPQ8UvyqSaKn3xSieInnz6i+Mkniih+O3b85J0/ip+8m0fxk3foKH72rrvtf4hYhzI+xM/edb+OX7N33SB+9q4bxM/edYP42btuED971w3iZ++6QfzsXTeIn73rBvFzd911aMst/rw+xM/ddaP4Y+6uG8bP3XXD+Lm7bhg/d9cN4+fuumH83F03jJ+764bxc3fdMH7yrtuWfWfROv04NPzsxfQxeYcGS23JuzlZavLOT5aafEogS00+UZCltvOUmnxSIUtNPtWQpSafgMhSzzMtteTT0nTbA7/Ow8NcOyWfgKL4yaeaKH7ySSWKn3z6iOK3Y8dPPiVE8ZN3/ih+8m4exU/eoaP4ybvufHc1aX68mjQn77pR/ORdN4qfvOtG8ZN33Sh+8q4bxU/edaP4ybtuFD95143iJ++6UfzkXXcp+zdf12Wc/jH+krzrRvGTd90ofvKuG8VP3nWj+Mm7bhQ/edeN4ifvulH85F03ip+860bxs3fd9RZ/Hdo/xl+zd90gfvauG8TP3nWD+Nm7bhA/e9cN4mfvukH87F03iJ+96wbxs3fdIP6xu+6Wu+tua92/Writ88OXHLbcXTeMn7vrhvFzd90wfu6uu63rLf42Dg/xc3fdMH7urhvGz911t61dvx1Wh+Hh/ngl+W3jwvi5u24Qv+a+v1sdLtcS9vh1WB7ip+66cfzUXTeOn7rrXiKP4y3+0h7ip+66cfzUXTeOn7rrXuKtt8/+0h5/cabuupd4c9vjr3d3br7GT911L/H2GwjXYRuGh/ipu+4lXrneJL6WoTx89nPffyyOn7zrRvFzd90yjPvIVsrwcOrmvv9YHD931y1lmm/x5x9mnmfz9VJvbnb3w9uzV9+2iK73N/efxm9gcvfznwNzmR3L/gv8Tjueg7m0q9us8APG5VmZd1+GmcZ6B/KpAkVPSai578nWF3xd9lePZQ3Ab/uffbfthqSM5TXsuSeoj8Wee/L7WOy5J9ZPxZ77noOfiz23IXws9uRm86nYkxvZp2JvYn8H9hN76juxa6lvwa6lvgW7lvoW7FrqO7Dnvkfv52LXUt+C/cSW2ob9T5OtTQH2ad8xPU/32Otr2E9sqe/E3sT+DuwnttR3Yj+xpb4T+4kt9Z3YT2yp78R+Ykt9I/bc957/XOwnttR3YtdS34JdS30L9ib2d2DXUt+CXUt9C3Yt9S3YT2yp07a/eq4lwD6v1yDLdve1gta+YTyxdYIYcz+/4zgYT2yFJMYTWx6J8cTWRmJsYiQwntiqSIwntiQS44mth8SoxSAYtRgCY+7nIR0HoxaDYNRiEIxaDIKxnRfjskepyw+vfoaxbGVPMtTtEeSJPYYFeWKTYUGe2GVYkCe2GRbkiX0GBZn7WXNHAnlip2FBnthqWJAn9hoWZBMkA1KzgUBqNhBIzQYCqdlAIDUbBmTu53l2BTmWbY8y3j1z7U+Qf0fzSa5S1vn20IC1/oDm78X+7jF4Wq/3qR6XUoJiL/Xtj2woZa3rfbF/j99Sx6/DdN3hXP687f7XazXvn+K53t0Kff5+xk7nKXU+T6nLeUpdz1PqdppSf/sjSt9YajlPqfU8peaegNBS23lKTT4tlf2BQJd/T//48Nu6JZ+AovjJp5oofvJJJYqffPr4Ov44JJ8oovjJp4QofvLOH8VP3s2j+Mk7dBQ/e9ddxz1+HdpD/OxdN4ifvesG8bN33SB+9q77dfySvesG8bN33SB+9q4bxM/edYP42btuED95163jTevrtD3ET951o/jJu24UP3nXjeIn77pB/Jq860bxk3fdKH7yrhvFT951o/jJu24UP3nXneebqi/D9LfXL6aPNXmHJktN3s3JUpN3frLU5FMCWOqYfKIgS00+fZClJp9UyFKTTzVkqe08pZ5nWhqTT0vLsu2lrsPwj3PtmHwCiuInn2qi+MknlSB+Sz59RPGTTxRR/ORTQhQ/eeeP4ifv5lH85B06ip+8667jXfz5MX7yrhvFT951o/jJu24Qf0redaP4ybtuFD95143iJ++6UfzkXTeKn7zrRvGTd91t2H943eryED95143iJ++6UfzkXTeIPyfvulH85F03ip+860bxk3fdKH7yrhvFT951o/jZu+5yF3+bH+Jn77pB/OxdN4ifvet+HX/J3nWD+Nm7bhA/e9cN4mfvukH87F03iJ+96wbxj911l9xddyzL/iWHsS4/fLXwycunab8uMa2320LNz3/2uOe+/AYLXjyMe46hPdw4bVxyd//DYMw9hRwF45p7GjoMxtxT2WEw5p4OD4Mx95R6GIxNjATG3FP7YTDmtofDYNRiEIxaDIJRiyEwJr+H6GEwajEIRi0GwajFIBibGAmMWgyCUYtBMGoxCEYtBsGoxQAYW/L7Fh8GoxaDYNRiEIxaDIKxiZHAqMUgGLUYBKMWg2DUYhCMWgyBMfl94A+DUYtBMGoxCEYtBsHYxEhg1GIQjFoMglGLQTBqMQhGLYbAmPy5GofBqMUgGLUYBKMWg2BsYiQwajEIRi0GwajFIBi1GASjFkNgTP4sn8Ng1GIQjFoMglGLQTA2MRIYtRgEoxaDYNRiEIxaDIJRiyEwJn8m2GEwajEIRi0GwajFIBibGAmMWgyCUYtBMGoxCEYtBsGoxRAYkz9j8TAYtRgEoxaDYNRiEIxNjARGLQbBqMUgGLUYBKMWg2DUYgiMyZ9ZexiMWgyCUYtBMGoxCMYmRgKjFoNg1GIQjFoMglGLQTBqMQTG5M8APwxGLQbBqMUgGLUYBGMTI4FRi0EwajEIRi0GwajFIBi1GALjqsUgGLUYBKMWg2DUYhCMTYwERi0GwajFIBi1GASjFoNg1GIIjJsWg2DUYhCMWgyCUYtBMDYxEhi1GASjFoNg1GIQjFoMglGLATBOgxaDYNRiEIxaDIJRi0EwNjESGLUYBKMWg2DUYhCMWgyCUYshMBYtBsGoxSAYtRgEoxaDYGxiJDBqMQhGLQbBqMUgGLUYBKMWQ2CsWgyCUYtBMGoxCEYtBsHYxEhg1GIQjFoMglGLQTBqMQhGLYbAOGoxCEYtBsGoxSAYtRgEYxMjgVGLQTBqMQhGLQbBqMUgGLUYAmPTYhCMWgyCUYtBMGoxCMYmRgKjFoNg1GIQjFoMglGLQTBqMQTGSYtBMGoxCEYtBsGoxSAYmxgJjFoMglGLQTBqMQhGLQbBqMUQGGctBsGoxSAYtRgEoxaDYGxiJDBqMQhGLQbBqMUgGLUYBKMWQ2BctBgEoxaDYNRiEIxaDIKxiZHAqMUgGLUYBKMWg2DUYhCMWgyBcdViEIxaDIJRi0EwajEIxiZGAqMWg2DUYhCMWgyCUYtBMGoxBMZNi0EwajEIRi0GwajFIBibGAmMWgyCUYtBMGoxCEYtBsGoxQAY50GLQTBqMQhGLQbBqMUgGJsYCYxaDIJRi0EwajEIRi0GwajFEBiLFoNg1GIQjFoMglGLQTA2MRIYtRgEoxaDYNRiEIxaDIJRiyEwVi0GwajFIBi1GASjFoNgbGIkMGoxCEYtBsGoxSAYtRgEoxZDYBy1GASjFoNg1GIQjFoMgrGJkcCoxSAYtRgEoxaDYNRiEIxaDIGxaTEIRi0GwajFIBi1GARjEyOBUYtBMGoxCEYtBsGoxSAYtRgC46TFIBi1GASjFoNg1GIQjE2MBEYtBsGoxSAYtRgEoxaDYNRiCIyzFoNg1GIQjFoMglGLQTA2MRIYtRgEoxaDYNRiEIxaDIJRiyEwLloMglGLQTBqMQhGLQbB2MRIYNRiEIxaDIJRi0EwajEIRi2GwLhqMQhGLQbBqMUgGLUYBGMTI4FRi0EwajEIRi0GwajFIBi1GALjpsUgGLUYBKMWg2DUYhCMTYwERi0GwajFIBi1GASjFoNg1GIAjMugxSAYtRgEoxaDYNRiEIxNjARGLQbBqMUgGLUYBKMWg2DUYgiMRYtBMGoxCEYtBsGoxSAYmxgJjFoMglGLQTBqMQhGLQbBqMUQGKsWg2DUYhCMWgyCUYtBMDYxEhi1GASjFoNg1GIQjFoMgjG5xUxlBzPOtWTFOCa3mKNgTG4xR8GY3GKOgjG5xRwFYxMjgTG5xRwFY3KLOQrG5BZzFIzJLeYoGLUYAmPTYhCMWgyCUYtBMGoxCMYmRgKjFoNg1GIQjFoMglGLQTBqMQTGSYtBMGoxCEYtBsGoxSAYmxgJjFoMglGLQTBqMQhGLQbBqMUQGGctBsGoxSAYtRgEoxaDYGxiJDBqMQhGLQbBqMUgGLUYBKMWQ2BctBgEoxaDYNRiEIxaDIKxiZHAqMUgGLUYBKMWg2DUYhCMWgyBcdViEIxaDIJRi0EwajEIxiZGAqMWg2DUYhCMWgyCUYtBMGoxBMZNi0EwajEIRi0GwajFIBibGAmMWgyCUYtBMGoxCEYtBsGoxQAY10GLQTBqMQhGLQbBqMUgGJsYCYxaDIJRi0EwajEIRi0GwajFEBiLFoNg1GIQjFoMglGLQTA2MRIYtRgEoxaDYNRiEIxaDIJRiyEwVi0GwajFIBi1GASjFoNgbGIkMGoxCEYtBsGoxSAYtRgEoxZDYBy1GASjFoNg1GIQjFoMgrGJkcCoxSAYtRgEoxaDYNRiEIxaDIGxaTEIRi0GwajFIBi1GARjEyOBUYtBMGoxCEYtBsGoxSAYtRgC46TFIBi1GASjFoNg1GIQjE2MBEYtBsGoxSAYtRgEoxaDYNRiCIyzFoNg1GIQjFoMglGLQTA2MRIYtRgEoxaDYNRiEIxaDIJRiyEwLloMglGLQTBqMQhGLQbB2MRIYNRiEIxaDIJRi0EwajEIRi2GwLhqMQhGLQbBqMUgGLUYBGMTI4FRi0EwajEIRi0GwajFIBi1GALjpsUgGLUYBKMWg2DUYhCMTYwERi0GwajFIBi1GASjFoNg1GIAjNugxSAYtRgEoxaDYNRiEIxNjATG5BYzT9Ot1jsyvxljHcdrjnpZ2keMyS3mKBiTW8xRMCa3mKNgTG4xB8FYklvMUTAmt5ijYExuMUfBmNxijoKxiZHAqMUgGLUYBKMWg2DUYhCMWgyBsWoxCEYtBsGoxSAYtRgEYxMjgVGLQTBqMQhGLQbBqMUgGLUYAuOoxSAYtRgEoxaDYNRiEIxNjARGLQbBqMUgGLUYBKMWg2DUYgiMTYtBMGoxCEYtBsGoxSAYmxgJjFoMglGLQTBqMQhGLQbBqMUQGCctBsGoxSAYtRgEoxaDYGxiJDBqMQhGLQbBqMUgGLUYBKMWQ2CctRgEoxaDYNRiEIxaDIKxiZHAqMUgGLUYBKMWg2DUYhCMWgyBcdFiEIxaDIJRi0EwajEIxiZGAqMWg2DUYhCMWgyCUYtBMGoxBMZVi0EwajEIRi0GwajFIBibGAmMWgyCUYtBMGoxCEYtBsGoxRAYNy0GwajFIBi1GASjFoNgbGIkMGoxCEYtBsGoxSAYtRgEoxYDYCzDoMYwHPUYhqMiw3DUZBiOTY4IR12G4ajMMBy1GYajOsNw1GcQjkWfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIByrPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4jvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4dj0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx0mcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx1mfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBwXfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwXPUZhmNun2llbNcf3srU7jl+y5/bI+L8uef3OH87eP7c82qcP/ecGOfPPZ/F+XPPRXH+3PNImD/547Tj/Afvv8kfIN3auk9WbarRHPYzo9Ul3/6jt2m6JRmWJ6+epvL9xdNyl3r6PoYlf4D0YTA2MRIYkw9FR8GYfDY7CsbkI+JRMCafVI+CMfnAfAyMJfnzow+DMbk+HAWjFoNgPK/FbDvGOrQhwFjacuVYpnG+e3V7AXoT+u+Hfl5DeiP08/rUG6Gf177eCP28rvZG6Oc1u/dBT/7c7Q+Ffl5rfCP08zrmG6FrpG+A3oT+l6Dfbfubhy2AXuayL9EyrHevHl9YIv01/RJpu+mXSDdOv0SadPol0ruzL1Hyp8m7RJcl0unTL5FXANIvkdcL0i9Rc4myL5FXF3os0TKu11ev4/SLS+TVhfRL5NWF9Evk1YX0S+TVhexLNHp1If0SeXUh/RJ5dSH9Enl1If0SNZco+xJ5dSH9Enl1occSrfN+M45tLr+4RF5dSL9EXl1Iv0ReXci+RM2rC+mXyKsL6ZfIqwvpl8irC+mXqLlE2ZfIqwvpl8irC+mXyKsLPZZo28b9Z2/DLy6RVxfSL5FXF7Iv0eTVhfRL5NWF9Evk1YX0S+TVhfRL1Fyi7Evk1YX0S+TVhfRL5NWF9EuU++rCVOZrksu/14fn2pQpt3qH+efcXhrnzy1tcf7cRhPnzz3ux/nbwfPnHhTj/LmnqDh/7hEjzp+8/9ax7vnHOj/mT95/o/xL8v4b5k/ef8P8yfvveHf+trvRfM+fvP+G+ZP33zB/8v7b9ud6X/69LI/5k/ffMH/y/hvmT95/23bLP7XH+WFJ3n+j/Gvy/hvmT95/p7vfn/PwJH/y/hvmT95/w/zJ++9c7/JPj78/19z9dx6Wff6cS32cH9bc/Xcubdnz16E+5s/df+dah1v+dXzMn7v/zuOw325tHrcnn//c/TfMv+Xuv3H+3P13bmWfH+a2PZ6/W+7+G+fP3X/nizTu+S9/CrvP/+TlFx24vroOt19WpT179bRefzWv491rp/E7mdyd/SfJ1LL3odpqQKZO7Rq8TsvdXyinpz+7LcPdNaK7Vz8NPmzL/pG8/Mnz/q+l63fyyWeSjuTHablWOf7wl+Sn5OdyffG83n61lnF4kXvyWaon93X/M/u43e0k+Cef+L/AMvlc93Msh/1TWeq6/sDyW7W/ewpsw3Vxx2lcgmrrcLnMcv19NtThyRSyHTp//e1PeafzJ58C0bOl/vanoP/cav25Ne+6Wn/+gTaodp2XfW3X+qTa3z1hjuNe7TjP0dpe5rzbyHj3i7xO3+O3Y8efjh1/yXyqXP76Nk+3Hz7Oj7/YUjfGiy7tJ+/lV3QZvj7Vb7euv1xVvP3ouX2vNXUTZWstqRsuXGs5Ua2pWzNc63iiWtuJap1OVOt8olqTz0JorSeam0ryuWlrtycWbfPDnxBqTT4LhfmTzzdh/uQzS5g/+RwS5m8Hz598XgjzJ58BwvzJ+3qYP3mvDvNn77/bvgVqHcrDFpw6Zu+/Uf7s/TfKn73/Rvmz998of/b+G+XP3n+j/Nn7b5Q/e/+N8mfvv1H+3P13HW5beNdhXh/yt9z9N86fu//G+XP33zh/7v4b58/df+P808Hz5+6/cf7c/TfOn7v/xvmT99+77cXr9OP88NPX2qfkvRqtNXlfR2tNPgOgtSafF9Ba24lqTT6HoLUmn1nQWpPPN2ityWchtNYTzU1z8rnp9l2+ss7D44w7J5+FwvzJ55swf/KZJczfDp4/+WwR5k8+L4T5k88AYf7kfT3Mn7xXR/mX5P13vrvGND+5xrQk779h/uT9N8yfvP+G+ZP33zB/8v4b5k/ef8P8yftvmD95/w3zJ++/Uf41ef9dyv492nUZp8f8yftvmD95/w3zJ++/Yf7k/TfMn7z/hvmT998wf/L+G+ZP3n/D/Mn7b5R/y95/11v+9fE2sXXL3n+j/Nn7b5Q/e/+N8mfvv1H+7P03yp+9/0b5s/ffKH/2/hvlz95/v84/5r7B3F/In7v/bmvdv6O4rfP4mD93/43z5+6/cf7c/TfOn7v/but6y7+Nw2P+3P03zp+7/8b5c/ffbWvX75jVYXi8D9+Y/N50Yf7k95uL8yfvv2H+5P03zJ+8/4b5U/ff8AbHY+57sv2F/Kn771/In7r/XjKP4y3/8ugvue+H9hfyJ7/BepQ/9z3O6jCvt8//0h5/f+a+x9kl89z2/GvZHvPnvmX6sO53va7DNjzOz7nvcXbJXK4PzqllKE8+/8n7b5g/ef8N8+fuv2XYHxNdSxmenL+5+2+cP3f//clHNmy3hypud89ke+UxWWPuu6f9JJnLIFn23+N3GvJPHpN1e9DH5Qy+57g8KxN+TNaY+75vfcnXZX/1ZTYOyG/75oJtuyG5DKUvcs89S30u9096bM6RuOeeXT+Xe5P7W7jndoXP5Z7ccT6We3I3+1jun+SUR+J+YmN9J/fc90n9YO766nu466vv4a6vvod7k/tbuOur7+F+Yl9tw/73ytamgPu0b86fp3vu9UXuJ/bVt3I/sa++lfuJffWd3HPfK/yDuZ/YV9/K/cS++lbuJ/bVt3Jvcn8L9xP76lu566vv4a6vvoe7vvoe7vrqW7jnfkbDB3PXV9/D/cS+Om37q+daAu7zeg2ybHffO2jtO8cT+yfKsckR4XhiP0Q5ntj3UI4n9jeU44l9DOV4Yr8iOeZ+ps6BOJ7Yf1CO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjif2mWWPUpcfXv2MY9nKnmSo2xOSJzYalmTu55QdiuSJrQYmeWKvgUme2Gxgkk2SEMkT2w1M8sR+A5M8seHAJHUciqSOA5HM/SzIQ5HUcSiSOg5FUsehSLbTkhzLtkcZ7x4H+CfJb2w+yVrKOt+ePrDWH9h8qza7WexPr/uz2vXraqdy3Rc83T2obJq+l5p99AdLzT6bg6VmH56xUlvuJ62ypWYfP8FSs8+HYKnZBziw1HaeUrMPTGCpp5mWWu7H0rKlfui0dPewt73UD52WnpSa+7m4bKkfOi09K/VDp6VnpX7otPSs1PZJpe43Hp2W7bHUj5qWvi71o6alr0v9qGnp61I/alr6utSPmpa+LDX5U4zRUj9qWvq61I+alr4u9aOmpa9L/d0jxLReH086LqUEpV6q25/YXcpafyj1W/45df46TNc715Q/H7n89VLN+x8f53r3DNy5fa91OVGt64lq3c5T629/mvA7ay0nqrWeqNbxRLW2E9WaexZiaz3R3DQmn5vKWG+1TuPDjDsmn4XC/Mnnmyh/Sz6zhPmTzyFh/uSzRZg/+bwQ5m8Hz5+8r4f5k/fqMH/2/ruOe/56t417z5+9/0b5s/ffIP+Uvf9G+bP33yh/9v4b5c/ef6P82ftvlD97/43yZ++/Uf7k/beON9ev0/aYP3n/DfMn779R/jl5/w3zJ++/Yf7k/TfMn7z/hvmT998wf/L+G+ZP3n/D/Mn77zzf/H0Zpr/9yrX2OXmvRmtN3tfJWpfkMwBaa/J5Aa01+WyB1pp8DkFrbSeqNfl8g9aafBZCaz3R3LQkn5uWZdtrXYfhYcZdks9CUf41+XwT5k8+s4T5k88hYf7ks0WYvx08f/IZIMyfvK+H+ZP36jB/8v67jnf55yf5k/ffKP+WvP+G+ZP33zB/8v4b5k/ef8P8yftvmD95/w3zJ++/Yf7k/TfMn7z/bsP+w+tWl8f8yftvkH8akvffMH/y/hvmT95/w/zJ+2+YP3n/DfMn779h/uT9N8yfvP+G+bP33+Uu/zY/5s/ef4P8JXv/jfJn779R/uz9N8qfvf9G+bP33yh/9v4b5c/ef6P82ftvlP/g/bfk7r9jWfbvSIx1+eE7ik9ePk371Yppvd10an7+s8c997jU4MXDuOcY2m2r6PVpOlPNPQcch2PueeQ4HHPPRcfhmHs+Ow7HJkeEY+559Tgcc8/Nx+GYe34/DsfcHnEcjvoMwjH5/T6Pw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4Zj8XsDH4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcEx+b/XjcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOCZ/VsVxOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHJM/d+c4HPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjsmfs3UcjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx+TPLTwOR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmC45z8ObDH4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcEz+XO3jcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOFZ9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Ac9RmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCsekzDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOkzzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOsz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOC76DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuG46jMMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmE46bPMBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnCI7LoM8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjkWfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIByrPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4jvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4dj0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx0mcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx1mfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBwXfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwXPUZhqM+w3DUZxiO+gzDsckR4ajPMBz1GYajPsNw1GcYjvoMwnHTZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwTHddBnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMeizzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOVZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHEd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Bs+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfQbhOOkzDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOszzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOiz7DcEzuM1PZyYxzLXk5JveZw3BM7jOH4djkiHBM7jOH4ZjcZw7DMbnPHIZjcp85DMfkPnMUjmtynzkMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmE46bPMBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnCI7boM8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjkWfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIByrPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4jvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4dj0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx0mcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx1mfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBwXfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwXPUZhqM+w3DUZxiO+gzDsckR4ajPMBz1GYajPsNw1GcYjvoMwnHTZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwDHOgz6DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuFY9BmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCseozDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOozzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOTZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTgm95l5mm7F3qH5zRzrOF5z1MvaPuGY3GcOwzG5zxyF45TcZw7DMbnPHIZjcp85DMfkPnMYjk2OCMfkPnMYjsl95jAc9RmGoz7DcNRnEI6zPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4LvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4bjqMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjps8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcIjmXQZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwjHos8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjlWfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBxHfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwbPoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4TjpMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjrM8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjos+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQTiu+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfQbhuOkzDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZgmMd9BmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCsegzDEd9huGoz/yBcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOVZ9hOOozDEd9huGY22daGdv1h7cytXuO3/K3g+fPPb/H+XPPzXH+3PNqnD/3nBjnzz2fhfmTP2c8zp97Honz554D4vwH77/JnyPd2rpPVm2q0Rz2M6PVJd/+o7dpuiUZlievnqby/cXTcpd6+j6GJX+M9GEwJp9GjoIx+VB0FIzJZ7OjYEw+Ih4EY/InSB8GY/KB+SgYk8/tR8GYXB+OgrGJkcB4XovZdox1aEOAsbTlyrFM43z36vYC9PM6zxuhn9eQ3gj9vD71Rujnta/3QU/+dOwPhX5es3sj9PN64Buhn9ca3wi9Cf33Q9dI3wBdI/1r0O+2/c3DFkAvc9mXaBnWu1ePLyyR/pp+ibTd9EukG2dfouTPZXeJLkukd6dfIi09/RLp9OmXqLlE2ZfI6wXpl8irC+mXyKsLPZZoGdfrq9dx+sUl8upC+iXy6kL2JVq8upB+iby6kH6JvLqQfom8upB+iZpLlH2JvLqQfom8upB+iby6kH6JvLrQY4nWeb8ZxzaXX1wiry5kX6LVqwvpl8irC+mXyKsL6ZfIqwvpl6i5RNmXyKsL6ZfIqwvpl8irC+mXyKsL6ZfIqws9lmjbxv1nb8OvLdHm1YX0S+TVhfRL5NWF9Evk1YX0S9RcouxL5NWF9Evk1YX0S+TVhfRL5NWF9Evk1YXkSzQOua8uTGW+Jrn8e314rs045FbvOH9uL43z55a2OH87eP7c436cP/csHOfPPSjG+XNPUXH+3CNGmL8k7791rHv+sc6P+ZP33zB/8v4b5k/ef8P8yfvveHf+trvRfM+fvP+G+ZP33zB/8v7b9ud6X/69LI/5k/ffMH/y/hvlr8n7b9tu+af2OD/U5P03zJ+8/4b5k/ff6e735zw8yZ+8/4b5k/ffMH/y/jvXu/zTk9+fufvvPCz7/DmX+jg/1Nz9dy5t2fPXoT7mz91/51qHW/51fMg/5u6/8+UC855/3B4//2Pu/hvnz91/4/y5++/cyj4/zG17PH/H3P03zp+7/84XadzzX/4Udp//ycvLsn+3vg63X1alPXv1tF5/Na/j3Wun8TuZ3J39J8nUsveh2mpApk7tGrxOy91fKKenP7stw901ortXPw0+bMv+kbz8yfP+r6Xrd/LJZ5KO5MdpuVY5/vCX5Kfk53J98bzefrWWcXiRe/JZqif3df8z+7jd7ST4J5/4v8Ay+Vz3cyyH/VNZ6rr+wPLv1SZ/5v08De2u2vp1tdPeMqfxFnuavpeafGAkS00+W5KlJh9DyVLbeUrNPtyCpWafVsFSs4+HYKnZJzKw1OwDE1dq8qdOo6WeZ1pK/oTll0tt82OpHzotPSu1nafUD52WnpX6odPSs1I/dFp6VupHTUvL7Xsf22OpHzUtfVlq8ieLoqV+1LT0dakfNS19XepHTUtfl9rOU+pHTUtfl/pR09LXpX7UtPRlqb/9OSZtuP5B7iKQS1TqtrXrzq86DOPjNw9++y2hfyp/LZc/QF7zlzIHX06etuvPnsvjpYXffmvlnyt1KMvty9J1eNzk89vvO0znT32qxPm31KdKfKpvqT//fyF/6s9/mL/99psMvO1XbRtO01XakLuroKX+7hNwHPdSL+NzdAKWbZ/q6v2mr3qN344dfzp2/CX1b++lzdPthz/77b3mzr/O+0a9Zbs7eZfnWx6vvxTmerdpd27fa93OU2tJ3ZXhWnNPsGytuaddttbckzFbaztRrdOJap1PVGvyWQit9URzU0k+N22t3GqdH77G1mryWSjMn3y+CfMnn1nC/MnnkDB/O3j+5PNCmD/5DBDmT97Xw/zJe3WYP3v/3fbbcKxDebgNRBuz998of/b+G+XP3n+j/Nn7b5Q/e/+N8mfvv1H+7P03yp+9/0b5s/ffKH/u/rsOt9tIrcOPfwv9e/6Wu//G+XP33zh/7v4b58/df+P8uftvnD93/43z5+6/cf7c/TfOn7v/xvmT99+7W1yt04/zw09fa5+S92q01uR9Ha01+QyA1pp8XkBrbSeqNfkcgtaafGZBa00+36C1Jp+F0FpPNDfNyeem2/1kyzoPjzPunHwWCvMnn2/C/MlnljB/O3j+5LNFmD/5vBDmTz4DhPmT9/Uwf/JeHeVfkvff+e4a0/zkGtOSvP+G+ZP33zB/8v4b5k/ef8P8yftvmD95/w3zJ++/Yf7k/TfMn7z/RvnX5P13Kfv3aNdlnB7zJ++/Yf7k/TfMn7z/hvmT998wf/L+G+ZP3n/D/Mn7b5g/ef8N8yfvv1H+LXv/XW/518dHlbbkd4GK82fvv1H+7P03yp+9/0b5s/ffKH/2/hvlz95/o/zZ+2+UP3v//Tr/lPsudH8hf/K7MK77/dYu/57Hx/zJ78IY5k9+F8Ywf+7+G+fP3X+3db3l38bhMX/u/hvnz91/4/y5+290F9Up+b3pwvzJ7zcX5z/2XZCn5PeFi/Mf+y7IU+77t4V3AZ9y35PtL+RP3X//Qv7U/feSeRxv+ZdHf8l9P7S/kD91/43z577HWR3m9fb5X9rj78/c9zi7ZJ7bnn8t22P+5E/hWPe7XtdhGx7n59z3OLtkLus1fxnKk89/8v4b5k/ef8P8uftvGcZ9fitleHL+5u6/cf7c/beUab7ln3+Yf56N20u92f7dD2/PXn3bmryOd98MmsbvZHJ39p8jcxkk9+de3GvIczKXtnWbGn7guDwr8+77WNNY70g+VaLLD9wfLXD5eN4+kmVYv5HPfd+3vuTr/ni1OpY1IL/tmwu27YakjOVF7tkfU/Op3LM/M+dTueeeXT+Xe5P7W7jndoXP5Z7ccT6We3I3+1jun+SUR+J+YmN9J/fc90n9YO766nu466vv4a6vvod7k/tbuOur7+F+Yl9tw/73ytamgPu0b86fp3vu9UXuJ/bVt3I/sa++lfuJffWd3HPfK/yDuZ/YV9/K/cS++lbuJ/bVt3Jvcn8L9xP76lu566vv4a6vvoe7vvoe7vrqW7jnfkbDB3PXV9/D/cS+Om37q+daAu7zeg2ybHffO2jtO8cT+yfKsckR4XhiP0Q5ntj3UI4n9jeU44l9DOV4Yr8iOeZ+ps6BOJ7Yf1CO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjif2mWWPUpcfXv2MY9nKnmSo2xOSJzYalmTu55QdiuSJrQYmeWKvgUme2Gxgkk2SEMkT2w1M8sR+A5M8seHAJHUciqSOA5HM/SzIQ5HUcSiSOg5FUsehSLbTkhzLtkcZ7x4H+CfJb2w+yVrKOt+ePrDWH9h8qza7WexPr/uz2vXraqdy3Rc83T2obJq+l5p99AdLzT6bg6VmH56xUufcT1plS80+foKlZp8PwVKzD3Bgqe08pWYfmMBSTzMtzbkfS8uWepppac79sFu01NzPxX291LtH+O2lfui09KzUD52WnpX6odPSs1LbeUr90GnpWakfNS3tt5Odlu2x1I+alr4u9aOmpa9L/ahp6ctSkz/FGC31o6alr0v9qGnp61I/alr6utR2nlI/alr6utTzTEvZH/lMlnqeaSn94565UtM/Xxks9XePENN6fRb2uJQSlHqpbr7eOayUtf5Q6rf8Y+r8dZiut0m7LNpQvl6qed/pcpl3bj96bt9rbSeqdTpRrfOJal1OVOt6olq389T62x9n+c5ay4lqzT0LsbWeaG767Y8n/Mlay1hvtU7jw4zbks9CYf7k802YP/nMEuZPPoeE+ZPPFlH+Kfm8EOZPPgOE+ZP39TB/8l4d5s/ef9dxz1/vvjO058/ef6P82ftvlD97/43yZ++/Uf7s/TfIP2fvv1H+7P03yp+9/0b5s/ffKH/y/lvHm+vXaXvMn7z/hvmT998wf/L+G+ZP3n/D/Mn7b5R/Sd5/w/zJ+2+YP3n/DfMn779h/uT99zKg7fmXYfrbr1xrX5L3arTW5H0drTX5DIDWmnxeQGtNPluQta7J5xC01uQzC1pr8vkGrTX5LITW2k5Ua/K5aVm2vdZ1GB5m3DX5LBTmTz7fhPmTzyxh/uRzSJR/Sz5bhPmTzwth/uQzQJg/eV8P8yfv1WH+5P13He/yz0/yJ++/Yf7k/TfMn7z/hvmT998g/zIk779h/uT9N8yfvP+G+ZP33zB/8v4b5k/ef7dh/+F1q8tj/uT9N8yfvP+G+ZP33zB/8v4b5S/J+2+YP3n/DfMn779h/uT9N8yfvP+G+bP33+Uu/zY/5s/ef6P82ftvlD97/43yZ++/Qf6avf9G+bP33yh/9v4b5c/ef6P82ftvlP/g/bfm7r9jWfbvSIx1+eE7ik9ePk371Yppvd10an7+s8c997jU4MXDuOcY2m2r6PXRbUvNPQcch2PueeQ4HHPPRYfhOOaez47DMfeceByOuefV43DMPTcfh2OTI8Ixt0cch6M+w3DUZxiO+gzDUZ9BOCa/B+pxOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHJPfo/k4HPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjsnveX8cjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx+TPEDkOR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmEY/JnER2Hoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCMfnzz47DUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfYbguCZ/nuRxOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHJM/n/c4HPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjsmfd34cjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx1GfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBybPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4TvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4TjrMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjos8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjqs+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQThu+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfYbguA36DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuFY9BmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCseozDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOozzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOTZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHCd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Cc9RmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCcdFnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMdVn2E46jMMR32G4ajPMBybHBGO+gzDUZ9hOOozDEd9huGozyAcN32G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz4DcByHQZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHIs+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQThWfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwHPUZhqM+w3DUZxiO+gzDsckR4ajPMBz1GYajPsNw1GcYjvoMwrHpMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjpM8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjrM+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQTgu+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTgm95mp7GTGuZa8HJP7zFE4rsl95jAck/vMYTgm95nDcEzuM4fh2OSIcEzuM4fhmNxnDsMxuc8chqM+w3DUZxCOmz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ8hOJZBn2E46jMMR32G4ajPMBybHBGO+gzDUZ9hOOozDEd9huGozyAciz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOFZ9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Ac9RmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCsekzDEd9huGozzAc9RmGY5PjvxIc9RmGoz7DcNRnGI76DMNRn0E4TvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4TjrMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjos8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjqs+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQThu+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfYbgWAd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3As+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfQbhWPUZhqM+w3DUZxiO+gzDsckR4ajPMBz1GYajPsNw1GcYjvoMwnHUZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwjHps8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjpM+w3DUZxiO+gzDUZ9hOLbcHOdpuhV7h+Y3c7z8PfCa4/KnmPKEY3KfOQzH5D5zGI7JfeYwHJP7zGE4JveZo3Cck/vMYTgm95nDcEzuM4fhmNxnDsOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCcdFnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMdVn2E46jMMR32G4ajPMBybHBGO+gzDUZ9hOOozDEd9huGozyAcN32G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz5DcBwHfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwLPoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4Vj1GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx1GcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx6bPMBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnEI6TPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4zvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4bjoMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYTjqs8wHPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcQjps+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfITi2QZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHIs+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQThWfYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPoNwHHP7zOU6c7v+8Ms1vnbP8Vv+3B4R5889v8f5c8/Ncf528Py558Q4f+75LM6fey6K8+eeR+L8ueeAMH/y51nH+ZP337buk1WbajSH/cxodcm3/+htmm5JhuXJq6epfH/xtNylnr6PYckfI30YjMmnkaNgbGIkMCafzY6CMfmIeBSMySfVo2BMPjAfBWPyuf0gGJM/PvowGLUYBON5LWbbMdahDQHG0pYrxzKN892r2wvQz+s8b4TehP77oZ/Xp94I/bz29Ubo53W1N0I/r9m9Efp5PfB90JM/pPtDoZ/XMd8IXSN9A3SN9K9Bv9v2Nw9bAL3MZV+iZVjvXj2+sETNJcq+RNpu+iXSjdMvkSadfon07vRLpKVnX6LkD6p3iS5L5BWA9Evk9YL0S+TVhfRL1FyiDku0jOv11es4/eISeXUh/RJ5dSH9Enl1If0SeXUh/RJ5dSH7Eq1eXUi/RF5dSL9EXl1Iv0ReXUi/RM0lyr5EXl3osUTrvN+MY5vLLy6RVxfSL5FXF9IvkVcX0i+RVxeyL9Hm1YX0S+TVhfRL5NWF9Evk1YX0S9RcouxL5NWF9Evk1YUeS7Rt4/6zt+EXl8irC+mXyKsL6ZfIqwvJl2gavLqQfom8upB+iby6kH6JvLqQfomaS5R9iby6kH6JvLqQfolyX12YynxNcvn3+vBcm2nIrd5x/txeGuYvuaUtzp/baOL8ucf9OH/uWTjO3w6eP/cUFefPPWLE+ZP33zrWPf9Y58f8yftvmD95/43y1+T9N8yfvP+Od+dvuxvN9/zJ+2+YP3n/DfMn779tf6735d/L8pg/ef8N8yfvv2H+5P23bbf8U3ucH2ry/hvmT95/o/xj8v473f3+nIcn+ZP33zB/8v4b5k/ef+d6l396/P055u6/87Ds8+dc6uP8MObuv3Npy56/DvUxf+7+O9c63PKv42P+3P13Hof9dmvzuD35/Ofuv3H+3P03zN9y99+5lX1+mNv2eP623P03zp+7/86XD8ie//KnsPv8T15elv279XW4/bIq7dmrp/X6q3kd7147jd/J5O7sP0mmlr0P1VYDMnVq1+B1Wu7+Qjk9/dltGe6uEd29+mnwYVv2j+TlT573fy1dv5NvpyU/Tsu1yvGHvyQ/JT+X64vn9fartYzDi9yTz1I9ua/7n9nH7W4nwT/5xP8Flsnnup9jOeyfylLX9QeW36pNPgVOQ7urtn5d7bS3zGm8xZ6m76UmHxjJUpPPlmCpyZ/vjpaafGIlS80+3IKlZp9WwVLbeUrNPpGBpWYfmMBSzzMtJX/WM1rqeaal5M81Rkv90GmpzY+lfui09KzUD52WnpXazlPqh05Lz0r90GnpWakfNS0tt2/zbI+lftS09HWpHzUtfVlq8idGoqV+1LT0dakfNS19XepHTUtfl9rOU+pHTUtfl/pR09LXpZ5nWkr+xDG01PNMS8mfgIWWep5p6bffv78N190ff+5RjUrdtnbdZlyHYXz8mttvvxXqT+WvpdQr/cu/5+BOGNN2/dlzebzi+dtvKfpzpQ5lud2Zow6PO0p/+/026fypT5Uw//zb78jAnurzb78jA51/PHb+mvv3D/irdq65f1Whpeb+rYaW+ruH9XHcSx3nOToBy7ZPdfV+h3H9Hv+3fyMSjl+OHT/3b++lzdPthz/57f3bv0/4k/nXed8Vvmx3J+/yfH/99ZfCXO++ITK377WmlgK41tRdGa41dVuGa80t5myt23lq/e3fq3xnrbmNk601t52ytSafhdBa24lqTT43ba3cap0fvjM9t+SzUJg/+XwT5k8+s4T5k88hUf4p+WwR5k8+L4T5k88AYf7kfT3Mn7xXh/mz999tv+fTOpTxMX/2/hvlz95/o/zZ+2+UP3v/DfLP2ftvlD97/43yZ++/Uf7s/TfKn73/Rvlz9991uN2zcB1+/Fvot/y5+2+cP3f/jfPn7r9x/tz9N8y/5O6/cf7c/TfOn7v/xvlz9984f+7+G+dP3n/v7qe4Tj/ODz99rX1J3qvRWpP3dbTW5DMAWmvyeYGsdU0+W6C1Jp9D0FqTzyxorcnnG7TWdqJaTzQ3rcnnptvNy8s6D48z7pp8FgrzJ59vwvzJZ5Yo/5Z8DgnzJ58twvzJ54Uwf/IZIMyfvK+H+ZP36jB/8v47311jmp9cY8r9LeS/kD95/w3zJ++/Qf5lSN5/w/zJ+2+YP3n/DfMn779h/uT9N8yfvP+G+ZP336Xs36Ndl3F6zJ+8/4b5k/ffMH/y/hvlL8n7b5g/ef8N8yfvv2H+5P03zJ+8/4b5k/ffMH/2/rve8q+Pz8VeSvb+G+XP3n+j/Nn7b5C/Zu+/Uf7s/TfKn73/Rvmz998of/b+G+XP3n+j/Afvv7lvLVe2db/f2uXf8/iYP/kNY8P8uftvmH/M3X/j/MnvQrqut/zbODzmT34X0jB/8ruQhvlz99/oLqpL8nvTxflz9984f/L+G+Y/9g3bl+T3egvz575/W3gX8CX3Pdn+Qv7U/fcv5E/dfy+Zx/GWf3n0l9z3Q/sL+XM/MCLOn/wpEPN6+/wv7cnvz+RPgbj8xD3/WrbH/MmfArHud72uwzY8zs+573F2yVzWa/4ylMfPf+57nP2F/Mn7b5g/d/8tw7jPb6UMj+dv7nuc/YX8uftvKdN8yz//MP88G7eXerP9ux/enr36tjV5He++GTSN38lkfxTUz5C5DJL7cy/uNeQ5mUvbuk0NP3BcnpV5932saax3JJ8q0eUH7o8WuHw8bx/JMqzfyWd/MkxH8nV/vFodyxqQ3/bNBdt2Q1LG8iL37I+p+VTu2Z+Z86ncc8+uH8s9930NP5h7blf4XO7JHedjuSd3s4/l3uT+Fu4nNta3ctdX38NdX30Pd331Pdz11bdwz30f4A/mrq++h/uJfbUN+98rW5sC7tO+OX+e7rnXF7mf2Fffyr3J/S3cT+yrb+V+Yl99K/cT++pbuZ/YV9/K/cS++k7uue8t/8HcT+yrb+Wur76Hu776Hu5N7m/hrq++h7u++h7u+up7uJ/YV6dtf/VcS8B9Xq9Blu3uewetfed4Yv8kOeZ+RsiBOJ7YD1GOJ/Y9lOOJ/Q3l2OSIcDyxX6EcT+xLKMcT+w/KUZ9hOOozBMc19zOXDsRRn2E46jMMR32G4djOy3HZo9Tlh1c/41i2sicZ6vaE5ImNBiZ5YqeBSZ7YamCSJ/YamOSJzYYlmft5docieWK7gUme2G9gkic2HJhkkyREUsehSOo4FEkdhyKp41AkdRyIZO5nhnYlOZZtjzLePQ7wT5Lf2HyStZR1vj19YK0/sPlWbXaz2J9e92e169fVTuW6L3i6e1DZNH0vNfvoD5bazlNq9uEZLDX7dAuWmn38BEvNPh+CpWYf4LhScz8Vli01+8AElnqeaSn3Y2nZUtt5Sj3PtJT7ubivl3r3CL+91A+dlp6V+qHT0rNSP3RaelJq8mf4oqV+6LT0rNSPmpb228lOy/ZY6kdNS1+X2s5T6kdNS1+X+lHT0telftS09HWpHzUtfV3qR01LX5aa/InLaKkfNS19Xep5pqXsj3wmS23nKfU801L65yuDpZ5nWkr/FGGw1PNMS+mflQuWep5pKf0TYcFS228udVqHa6lLKUGpl+rm670bS1nrD6V+yz+lzl+H6XqjysuiDeXrpZr3vYZzHW8/ev6+sfK3P8jynbUuJ6p1PVGt23lq/e0PJnxnreVEtdYT1TqeqNZ2olpPNDctyeemMtZbrdP4MOMuyWehMH/y+SbMn3xmifKvyeeQMH/y2SLMn3xeCPMnnwHC/Mn7epg/ea8O82fvv+u4569339rc82fvv1H+7P03yp+9/wb5t+z9N8qfvf9G+bP33yh/9v4b5c/ef6P82ftvlD95/63jzfXrtD3mT95/w/zJ+2+YP3n/DfJvQ/L+G+ZP3n/D/Mn7b5g/ef8N8yfvv2H+5P03zJ+8/87zzd+XYfrbL1xr34bkvRqtNXlfR2tNPgOQtZbk8wJaa/LZAq01+RyC1pp8ZkFrbSeqNfkshNZ6ormpJJ+blmXba12H4WHGLclnoTB/8vkmyl+Tzyxh/uRzSJg/+WwR5k8+L4T528HzJ+/rYf7kvTrMn7z/ruNd/vlJ/uT9N8yfvP9G+cfk/TfMn7z/hvmT998wf/L+G+ZP3n/D/Mn7b5g/ef8N8yfvv5c/4uz5L8PCY/7k/TfMn7z/Rvlb8v4b5k/ef8P8yftvmD95/w3zJ++/Yf7k/TfMn7z/hvmz99/lLv82P+bP3n+j/Nn7b5B/yt5/o/zZ+2+UP3v/jfJn779R/uz9N8qfvf9G+bP33yj/wfvvlLv/jmXZvyMx1uWH7yg+efk07VcrpvV206n5+c8e99zjUoMXD+OeY2i3raLXh2duU+454DAc59zzyHE45p6LjsMx93x2HI6558TjcGxyRDjmnpuPwzH3/H4cjrk94jgc9RmGoz6DcEx+L9HjcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOCa/J/FxOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHJPf4/04HPUZhqM+w3DUZxiOTY4IR32G4ajPMBz1GYajPsNw1GcAjm1I/syM43DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQTgmf6bPcTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIByTP+/rOBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnEI7Jn594HI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMfkz6M9Dkd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhGPy53sfh6M+w3DUZxiO+gzDsckR4ajPMBz1GYajPsNw1GcYjvoMwnHWZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwjHRZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHFd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Dc9BmGoz7DcNRnGI76zB8IxyZHhKM+w3DUZxiO+gzDUZ9hOOozBMcy6DMMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmEY9FnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMeqzzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOoz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BODZ9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Cc9BmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCcdZnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMdFn2E46jMMR32G4ajPMBybHBGO+gzDUZ9hOOozDEd9huGozyAcV32G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcNz0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMGxDvoMw1GfYTjqMwxHfYbh2OSIcNRnGI76DMNRn2E46jMMR30G4Vj0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMKx6jMMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmE46jPMBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnEI5Nn2E46jMMR32G4ajPMBybHBGO+gzDUZ9hOOozDEd9huGozyAcJ32G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcJz1GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx0WcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx1WfYTjqMwxHfYbhqM8wHJscEY76DMNRn2E46jMMR32G4ajPIBw3fYbhqM8wHPUZhqM+w3BsckQ46jMMR32G4ajPMBz1GYajPkNwHAd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3AsyX1mKjuZca4lL8fkPnMYjsl95jAck/vMYTg2OSIck/vMYTgm95nDcEzuM4fhmNxnDsMxuc8chWPVZxiO+gzDUZ9hOOozDMcmR4SjPsNw1GcYjvoMw1GfYTjqMwjHUZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHJs+w3DUZxiO+gzDUZ9hODY5Ihz1GYajPsNw1GcYjvoMw1GfQThO+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfQbhOOszDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOizzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOqz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOG76DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9huDYBn2G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcCz6DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuFY9RmGoz7DcNRnGI76DMOxyRHhqM8wHPUZhqM+w3DUZxiO+gzCcdRnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMemzzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOkz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOM76DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuG46DMMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmE46rPMBz1GYajPsNw1GcYjk2OCEd9huGY3GfmaboVe4fmN3Os43jNUS9r+4Rjcp85DMfkPnMYjsl95igct+Q+cxiOyX3mMByT+8xhOCb3mcNwbHJEOCb3mcNw1GcYjvoMw1GfYTjqMwTHadBnGI76DMNRn2E46jMMxyZHhKM+w3DUZxiO+gzDUZ9hOOozCMeizzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOVZ9hOOozDEd9huGozzAcmxwRjvoMw1GfYTjqMwxHfYbhqM8gHEd9huGozzAc9RmGoz7DcGxyRDjqMwxHfYbhqM8wHPUZhqM+g3Bs+gzDUZ9hOOozDEd9huHY5Ihw1GcYjvoMw1GfYTjqMwxHfQbhOOkzDEd9huGozzAc9RmGY5MjwlGfYTjqMwxHfYbhqM8wHPUZhOOszzAc9RmGoz7DcNRnGI5NjghHfYbhqM8wHPUZhqM+w3DUZxCOiz7DcNRnGI76DMNRn2E4NjkiHPUZhqM+w3DUZxiO+gzDUZ9BOK76DMNRn2E46jMMR32G4djkiHDUZxiO+gzDUZ9hOOozDEd9BuG46TMMR32G4ajPMBz1GYZjkyPCUZ9hOOozDEd9huGozzAc9RmC4zzoMwxHfYbhqM8wHPUZhmOTI8JRn2E46jMMR32G4ajPMBz1GYRj0WcYjvoMw1GfYTjqMwzHJkeEoz7DcNRnGI76DMNRn2E46jMIx6rPMBz1GYajPsNw1GcYjk2OCEd9huGozzAc9RmGoz7DcNRnEI6jPsNw1GcYjvoMw1GfYTg2OSIc9RmGoz7DcNRnGI76DMNRn0E4Nn2G4ajPMBz1GYajPsNwbHJEOOozDEd9huGozzAc9RmGoz6DcJz0GYajPsNw1GcYjvoMw7HJEeGozzAc9RmGoz7DcNRnGI76DMJx1mcYjvoMwzG3z7QytusPb2Vq9xy/5c/tEXH+dvD8uefmOH/ueTXOn3tOjPPnns/i/LnnojB/8ud7x/lzzwFx/oP33+TPkW5t3SerNtVoDvuZ0eqSb//R2zTdkgzLk1dPU/n+4mm5Sz19H8OSP0b6MBiTTyNHwZh8KDoKxuSz2VEwJh8Rj4Ix+aR6EIzJHyB9GIzJ5/ajYEyuD0fBqMUgGNtpMW47xjq0IcBY2nLlWKZxvnt1ewH6eZ3njdDPa0hvhH5en3oj9PPa1xuhn9fV3gc9+aO0PxT6eT3wjdDPa41vhH5ex3wj9Cb03w9dI/1r0O+2/c3DFkAvc9mXaBnWu1ePLyyR/pp+ibTd9EukG6dfIk06+RItyR/57hJdlkhLT79EOn36JfIKQPolai5R9iXy6kL6JfLqQo8lWsb1+up1nH5xiby6kH6JvLqQfom8upB9iYpXF9IvkVcX0i+RVxfSL5FXF9IvUXOJsi+RVxfSL5FXF9IvkVcXeizROu8349jm8otL5NWF9Evk1YXsS1S9upB+iby6kH6JvLqQfom8upB+iZpLlH2JvLqQfom8upB+iby6kH6JvLrQY4m2bdx/9jb84hJ5dSH7Eo1eXUi/RF5dSL9EXl1Iv0ReXUi/RM0lyr5EXl1Iv0ReXUi/RF5dSL9EXl1Iv0S5ry5MZb4mufx7fXiuzdJyq3ecP7eXxvlzS1ucP7fRxPnbwfPnnoXj/LkHxTh/7ikqzp97xIjzJ++/dax7/rHOD/mn5P03zJ+8/4b5k/ffMH/y/jvenb/tbjTf8yfvv2H+5P03zJ+8/7b9ud6Xfy/LY/7k/TfMn7z/hvmT99+23fJP7XF+mJP33zB/8v4b5k/ef6e735/z8CR/8v4b5k/ef8P8yfvvXO/yT4+/P+fc/Xceln3+nEt9nB/m3P13Lm3Z89ehPubP3X/nWodb/nV8zJ+7/87jsN9ubR63x8//krv/xvlz9984f+7+O7eyzw9z2x7P3yV3/43z5+6/80Ua9/yXP4Xd53/y8rLs362vw+2XVWnPXj2t11/N63j32mn8TiZ3Z/9JMrXsfai2GpCpU7sGr9Ny9xfK6enPbstwd43o7tVPgw/bsn8kL3/yvP9r6fqdfPKZpCP5cVquVY4//CX5Kfm5XF88r7dfrWUcXuSefJbqyX3d/8w+bnc7Cf7JJ/4vsEw+1/0cy2H/VJa6rj+w/FZt8ilwGtpdtfXraqe9ZU7jLfY0fSs1+XPp0VKTz5ZkqcnHULLU5BMrWWo7T6nZp1Ww1OzjIVhq9okMLDX7wASWep5pKfmzntFSzzMtJX+uMVrqh05LbX4stZ2n1A+dlp6V+qHT0rNSP3Raelbqh05Lz0r9qGlpuX2bZ/vHUtfkT+hES/2oaenrUj9qWvq61I+alr4utZ2n1I+alr4u9aOmpa9L/ahp6etSP2pa+rrU80xLyZ84hpZ6nmkp+ROw0FLPMy0lfyITWup5pqXkTwhCSz3PtJT8iTVoqeeZln773RnbcN1/N07jEpRah7LcbrhTh4eN4utvv3Uhnb8dOX8d/9s/Gbfr9W3LMt4V0K7vKi+9q770rvGld7WX3jW99K75pXctL71rfeld2yvvqi99NupLn4360mejvvTZqC99NupLn4360mejvvTZqC99NupLn43xpc/G+NJnY3zpszG+9NkYX/psjC99NsaXPhvjS5+N8aXPxvjSZ6O99Nn4J/dc2xvY5RrCD+961hyvc9XYpmdHqN2PMHY/Qut+hKn7EebuR1i6H2HtfoSt9xH+yV2iyCN0P6en7uf01P2cnrqf01P3c3rqfk5P3c/pqfs5PXU/p+fu5/Tc/Zyeu5/Tc/dzeu5+Ts/dz+m5+zk9dz+n5+7n9Nz9nF66n9NL93N66X5OL93P6aX7Ob10P6eX7uf00v2cXrqf00v3c3rtfk6v3c/ptfs5vXY/p9fu5/Ta/Zxeu5/Ta/dzeu1+Tq/dz+mt+zm9dT+nt+7n9Nb9nN66n9Nb93N6635Ob93P6a37Ob11P6fLMPQ/ROl/iNr/EGP/Q7T+h5j6H2Luf4il/yHW/ofof3aX/md36X92l/5nd+l/dpf+Z3fpf3aX/md36X92l/5nd+l/dtf+Z3ftf3bX/md37X921/5nd+1/dtf+Z3ftf3bX/md37X92j/3P7rH/2T32P7vH/mf32P/sHvuf3WP/s3vsf3aP/c/usf/Z3fqf3f13nJX+W85K/z1npf+ms9J/11npv+2s9N93VvpvPCv9d56V/lvPSv+9Z6X/5rPSf/dZ6b/9rPTff1b6b0Ar/Xeglf5b0Er/PWil/ya00n8XWum/Da3034dW+m9EK/13opX+W9FK/71opf9mtNJ/N1rpvx2t9N+PVvpvSCv9d6SV/lvSSv89aaX/prTSf1da6b8trfTfl1b6b0wr/Xemlf5b00r/vWml/+a00n93Wum/Pa30359W+m9QK/13qJX+W9RK/z1qpf8mtdJ/l1rpv02t9N+nVvpvVCv9d6qV/lvVSv+9arX/XrXaf69a7b9Xrfbfq1aH1v8QU/9DzP0PsfQ/xNr/EP3P7v571Wr/vWq1/1612n+vWu2/V63236tW++9Vq/33qtX+e9Vq/71qtf9etdp/r1rtv1et9t+rVvvvVav996rV/nvVav+9arX/XrXaf69a7b9Xrfbfq1b771Wr/feq1f571Wr/vWq1/1612n+vWu2/V63236tW++9Vq/33qtX+e9Vq/71qtf9etdp/r1rtv1et9t+rVvvvVav996rV/nvVav+9arX/XrXaf69a7b9Xrfbfq1b771Wr/feq1f571Wr/vWq1/1612n+vWu2/V63236tW++9Vq/33qtX+e9Vq/71qtf9etdp/r1rtv1et9t+rVvvvVav996rV/nvVav+9arX/XrXaf69a7b9Xrfbfq1b771Wr/feq1f571Wr/vWq1/1612n+vWu2/V63236tW++9Vq/33qtX+e9Vq/71qtf9etdp/r1rtv1et9t+rVvvvVav996rV/nvVav+9amP/vWpj/71qY/+9amP/vWrj0PofYup/iLn/IZb+h1j7H6L/2d1/r9oIbMFa6vUQS3t6iKn/IX55udu6fn9t25anh9i6H+LXNy/Fhyj9D1H7H2Lsf4jW/xC/fF607fraaVifHmLuf4il/yHW/ofYuh/i1zcvxYco/Q/x62f3fDvE9vQQY/9DtP6HmPofYu5/iKX/Idb+h/jls3vars+mnofh2SF+ffNSfIjS/xC1/yHG/odo/Q8xdT8EsPcgGpuBvQfhIbbuhwD2HoSHKP0P8euNtVyfcd/K/PQQY/9DtP6HmPofYu5/iKX/IX69sQ5tP8RThfn1vQfhIX5970F8iNL/ELX/Icb+h2jgIerzx3JP/Q8x9z/Er/fuXcTa8/EA2HsQHmLrfghg70F4iNL/ELX/Icb+h2j9DzH1P8Tc/xD9z+61/9m99j+7t/5n99b/7N76n91b/7N76392b/3P7q3/2b31P7u3/mf31v3sbsPQ/xCl/yFq/0OM/Q/R+h9i6n+Iuf8hlv6HWPsfov/ZXfqf3aX/2V36n93PtzeU5frX31puGy/KVve3za+9bXntbetrb9t++m3b/N+e3zloHebv79ra7U+La7u+qb3ypumVN82vvGn52TfVdfwnJObpeul/2cr+rss/r+9qL71reuld80vvWn72XaUOywsfjG9va6+9bXrtbfNrb/vpD0hpdXrhE/Ltbe21t02vvW1+7W0//Smp7aVPybe3tdfeNr32tvm1t/38r5F5rK/8Hvn729prb5tee9v82tt++lNy+UPW+MKn5Nvb2mtvm1572/za2376U3K57NVe+JR8e1t77W3Ta2+bX3vbT35K/va3/wM="
|
|
1525
2725
|
}
|
|
1526
2726
|
],
|
|
1527
2727
|
"events": [],
|
|
1528
2728
|
"file_map": {
|
|
1529
|
-
"
|
|
2729
|
+
"18": {
|
|
1530
2730
|
"source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n \n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(_self: Self, _bit_size: u32) -> [u1] {}\n \n #[builtin(to_be_bits)]\n fn __to_be_bits(_self: Self, _bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(_self: Self, _bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n \n #[builtin(to_be_radix)]\n fn __to_be_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> Field {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\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 + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n",
|
|
1531
2731
|
"path": "std/field.nr"
|
|
1532
2732
|
},
|
|
1533
|
-
"
|
|
2733
|
+
"30": {
|
|
1534
2734
|
"source": "struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some {\n self._value\n } else {\n default\n }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some {\n self\n } else {\n other\n }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some {\n self\n } else {\n default()\n }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some {\n Option::none()\n } else {\n self\n }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n",
|
|
1535
2735
|
"path": "std/option.nr"
|
|
1536
2736
|
},
|
|
1537
|
-
"
|
|
1538
|
-
"source": "use dep::protocol_types::{\n abis::{\n
|
|
2737
|
+
"43": {
|
|
2738
|
+
"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 contrakt::deployment_data::ContractDeploymentData,\n hash::hash_args,\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 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}\n// docs:end:public-global-variables\n\nimpl PublicGlobalVariables {\n fn serialize(self) -> [Field; 4] {\n [self.chain_id, self.version, self.block_number, self.timestamp]\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 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 pub fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n",
|
|
1539
2739
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
|
|
1540
2740
|
},
|
|
1541
|
-
"
|
|
2741
|
+
"45": {
|
|
1542
2742
|
"source": "use crate::context::{Context};\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse crate::types::type_serialization::TypeSerializationInterface;\nuse dep::std::option::Option;\n\n// docs:start:public_state_struct\nstruct PublicState<T, T_SERIALIZED_LEN> {\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n}\n// docs:end:public_state_struct\n\nimpl<T, T_SERIALIZED_LEN> PublicState<T, T_SERIALIZED_LEN> {\n // docs:start:public_state_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicState {\n context,\n storage_slot,\n serialization_methods,\n }\n }\n // docs:end:public_state_struct_new\n\n // docs:start:public_state_struct_read\n pub fn read(self) -> T {\n assert(self.context.private.is_none(), \"Public state reads only supported in public functions\");\n storage_read(self.storage_slot, self.serialization_methods.deserialize)\n }\n // docs:end:public_state_struct_read\n\n // docs:start:public_state_struct_write\n pub fn write(self, value: T) {\n assert(self.context.private.is_none(), \"Public state writes only supported in public functions\");\n let serialize = self.serialization_methods.serialize;\n let fields = serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_state_struct_write\n}\n",
|
|
1543
2743
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr"
|
|
1544
2744
|
},
|
|
1545
|
-
"
|
|
2745
|
+
"46": {
|
|
1546
2746
|
"source": "use crate::context::{PrivateContext, PublicContext, Context};\nuse dep::std::option::Option;\nuse dep::protocol_types::{\n hash::pedersen_hash,\n traits::{ToField}\n};\n\n// docs:start:map\nstruct Map<K, V> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, V> Map<K, V> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map {\n context,\n storage_slot,\n state_var_constructor,\n }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = pedersen_hash([self.storage_slot, key.to_field()],0);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n",
|
|
1547
2747
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/map.nr"
|
|
1548
2748
|
},
|
|
1549
|
-
"
|
|
2749
|
+
"53": {
|
|
1550
2750
|
"source": "use crate::types::type_serialization::TypeSerializationInterface;\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\n\nfn deserializeBool(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n}\n\nfn serializeBool(value: bool) -> [Field; BOOL_SERIALIZED_LEN] {\n [value as Field]\n}\n\nglobal BoolSerializationMethods = TypeSerializationInterface {\n deserialize: deserializeBool,\n serialize: serializeBool,\n};\n",
|
|
1551
2751
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr"
|
|
1552
2752
|
},
|
|
1553
|
-
"
|
|
2753
|
+
"55": {
|
|
1554
2754
|
"source": "struct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: Field,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new(initial_value: T) -> Self {\n BoundedVec { storage: [initial_value; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: Field) -> T {\n assert(index as u64 < self.len as u64);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: Field) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len as u64 < MaxLen as u64);\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn push_array<Len>(&mut self, array: [T; Len]) {\n let newLen = self.len + array.len();\n assert(newLen as u64 <= MaxLen as u64);\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = newLen;\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len as u64 > 0);\n\n let elem = self.storage[self.len - 1];\n self.len -= 1;\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if (!exceeded_len) {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n\n#[test]\nfn test_vec_push_pop() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n assert(vec.len == 0);\n vec.push(2);\n assert(vec.len == 1);\n vec.push(4);\n assert(vec.len == 2);\n vec.push(6);\n assert(vec.len == 3);\n let x = vec.pop();\n assert(x == 6);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test]\nfn test_vec_push_array() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test(should_fail)]\nfn test_vec_get_out_of_bound() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n let _x = vec.get(2);\n}\n\n#[test(should_fail)]\nfn test_vec_get_not_declared() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2]);\n let _x = vec.get(1);\n}\n\n#[test(should_fail)]\nfn test_vec_get_uninitialized() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n let _x = vec.get(0);\n}\n\n#[test(should_fail)]\nfn test_vec_push_overflow() {\n let mut vec: BoundedVec<Field, 1> = BoundedVec::new(0);\n vec.push(1);\n vec.push(2);\n}\n\n#[test]\nfn test_vec_any() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4, 6]);\n assert(vec.any(|v| v == 2) == true);\n assert(vec.any(|v| v == 4) == true);\n assert(vec.any(|v| v == 6) == true);\n assert(vec.any(|v| v == 3) == false);\n}\n\n#[test]\nfn test_vec_any_not_default() {\n let default_value = 1;\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(default_value);\n vec.push_array([2, 4]);\n assert(vec.any(|v| v == default_value) == false);\n}\n",
|
|
1555
2755
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/vec.nr"
|
|
1556
2756
|
},
|
|
1557
|
-
"
|
|
2757
|
+
"68": {
|
|
1558
2758
|
"source": "pub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: Field) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n\n// TODO(#3470): Copied over from https://github.com/AztecProtocol/aztec-packages/blob/a07c4bd47313be6aa604a63f37857eb0136b41ba/yarn-project/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr#L599\n// move to a shared place?\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\nstruct Reader<N> {\n data: [Field; N],\n offset: Field,\n}\n\nimpl<N> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_array<K>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, K>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, K, C>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n } \n}\n",
|
|
1559
2759
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/utils.nr"
|
|
1560
2760
|
},
|
|
1561
|
-
"
|
|
1562
|
-
"source": "use crate::{\n abi::{\n PrivateContextInputs,\n PublicContextInputs,\n },\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 public_call::call_public_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal,\n context::get_portal_address,\n get_block_header::get_block_header,\n nullifier_key::get_nullifier_key_pair,\n },\n types::vec::BoundedVec,\n utils::Reader,\n};\nuse dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_stack_item::PrivateCallStackItem,\n call_stack_item::PublicCallStackItem,\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 NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n },\n contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n hash::hash_args,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::{\n grumpkin_scalar::GrumpkinScalar,\n option::Option,\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 args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n read_requests: BoundedVec<SideEffect, MAX_READ_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 block_header: BlockHeader,\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\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\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n read_requests: BoundedVec::new(SideEffect::empty()),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n block_header: inputs.block_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 }\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 pub fn get_block_header(self, block_number: u32) -> BlockHeader {\n get_block_header(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 read_requests: self.read_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 block_header: self.block_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) -> GrumpkinScalar {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key, key_pair.secret_key);\n // TODO: Add request to context.\n // self.context.push_nullifier_key_validation_request(public_key, secret_key);\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.block_header.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 fields = call_private_function_internal(\n contract_address,\n function_selector, \n args_hash,\n self.side_effect_counter,\n );\n let mut reader = Reader::new(fields);\n\n let item = PrivateCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PrivateCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]), // +1\n read_requests: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_READ_REQUESTS_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialise, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n block_header: BlockHeader{\n // Must match order in `private_circuit_public_inputs.hpp`\n note_hash_tree_root : reader.read(),\n nullifier_tree_root : reader.read(),\n contract_tree_root : reader.read(),\n l1_to_l2_message_tree_root : reader.read(),\n archive_root : reader.read(),\n public_data_tree_root: reader.read(),\n global_variables_hash: reader.read(),\n },\n contract_deployment_data: ContractDeploymentData {\n deployer_public_key: GrumpkinPoint {\n x: reader.read(), \n y: reader.read()\n },\n constructor_vk_hash : reader.read(),\n function_tree_root : reader.read(),\n contract_address_salt : reader.read(),\n portal_contract_address : EthAddress::from_field(reader.read()),\n },\n chain_id: reader.read(),\n version: reader.read(),\n },\n is_execution_request: reader.read() as bool,\n };\n\n reader.finish();\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(item.is_execution_request == false);\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 let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PublicCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\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 block_header: BlockHeader::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\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_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 new_l2_to_l1_msgs: BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n block_header: BlockHeader,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n contract_storage_update_requests: BoundedVec::new(empty_storage_update),\n contract_storage_reads: BoundedVec::new(empty_storage_read),\n public_call_stack_hashes: BoundedVec::new(0),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n \n unencrypted_logs_hash: BoundedVec::new(0),\n unencrypted_logs_preimages_length: 0,\n\n block_header: inputs.block_header,\n prover_address: AztecAddress::zero(),\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 }\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.public_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.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 unencrypted_logs_hash: unencrypted_logs_hash,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n block_header: self.inputs.block_header,\n prover_address: self.prover_address,\n };\n pub_circuit_pub_inputs\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: 0, // cannot nullify pending notes in public context\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 message_portal(&mut self, content: Field) {\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 pub fn consume_l1_to_l2_message(&mut self, msg_key: Field, content: Field, secret: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(self.block_header.l1_to_l2_message_tree_root, this, 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\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\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;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: 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 call_public_function_internal(\n contract_address, \n function_selector, \n args_hash,\n )\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(\n contract_address, \n function_selector, \n 0,\n )\n }\n\n}\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context {\n private: Option::some(context),\n public: Option::none()\n }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context {\n public: Option::some(context),\n private: Option::none()\n }\n }\n\n pub fn none() -> Context {\n Context {\n public: Option::none(),\n private: Option::none()\n }\n }\n}\n",
|
|
2761
|
+
"70": {
|
|
2762
|
+
"source": "use crate::{\n abi::{\n PrivateContextInputs,\n PublicContextInputs,\n },\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 public_call::call_public_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 types::vec::BoundedVec,\n utils::Reader,\n};\nuse dep::protocol_types::{\n abis::{\n append_only_tree_snapshot::AppendOnlyTreeSnapshot,\n call_context::CallContext,\n global_variables::GlobalVariables,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_stack_item::PrivateCallStackItem,\n call_stack_item::PublicCallStackItem,\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 contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n grumpkin_point::GrumpkinPoint,\n grumpkin_private_key::GrumpkinPrivateKey,\n hash::hash_args,\n header::Header,\n state_reference::StateReference,\n};\nuse dep::std::{\n option::Option,\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 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 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\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\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\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 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 fields = call_private_function_internal(\n contract_address,\n function_selector, \n args_hash,\n self.side_effect_counter,\n );\n let mut reader = Reader::new(fields);\n\n let item = PrivateCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PrivateCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]), // +1\n read_requests: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_READ_REQUESTS_PER_CALL]),\n nullifier_key_validation_requests: reader.read_struct_array(NullifierKeyValidationRequest::deserialise, [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialise, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n contract_deployment_data: ContractDeploymentData {\n deployer_public_key: GrumpkinPoint {\n x: reader.read(), \n y: reader.read()\n },\n constructor_vk_hash : reader.read(),\n function_tree_root : reader.read(),\n contract_address_salt : reader.read(),\n portal_contract_address : EthAddress::from_field(reader.read()),\n },\n chain_id: reader.read(),\n version: reader.read(),\n },\n is_execution_request: reader.read() as bool,\n };\n\n reader.finish();\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(item.is_execution_request == false);\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 let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PublicCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read() as u32,\n },\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\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_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 new_l2_to_l1_msgs: BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n historical_header: Header,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs: inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n contract_storage_update_requests: BoundedVec::new(empty_storage_update),\n contract_storage_reads: BoundedVec::new(empty_storage_read),\n public_call_stack_hashes: BoundedVec::new(0),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n \n unencrypted_logs_hash: BoundedVec::new(0),\n unencrypted_logs_preimages_length: 0,\n\n historical_header: inputs.historical_header,\n prover_address: AztecAddress::zero(),\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 }\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.public_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.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 unencrypted_logs_hash: unencrypted_logs_hash,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n historical_header: self.inputs.historical_header,\n prover_address: self.prover_address,\n };\n pub_circuit_pub_inputs\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: 0, // cannot nullify pending notes in public context\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 message_portal(&mut self, content: Field) {\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 pub fn consume_l1_to_l2_message(&mut self, msg_key: Field, content: Field, secret: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(self.historical_header.state.l1_to_l2_message_tree.root, this, 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\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\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;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: 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 call_public_function_internal(\n contract_address, \n function_selector, \n args_hash,\n )\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(\n contract_address, \n function_selector, \n 0,\n )\n }\n\n}\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context {\n private: Option::some(context),\n public: Option::none()\n }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context {\n public: Option::some(context),\n private: Option::none()\n }\n }\n\n pub fn none() -> Context {\n Context {\n public: Option::none(),\n private: Option::none()\n }\n }\n}\n",
|
|
1563
2763
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/context.nr"
|
|
1564
2764
|
},
|
|
1565
|
-
"
|
|
2765
|
+
"84": {
|
|
1566
2766
|
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n};\n\n// contract_address + \n// args_hash +\n// crate::abi::FUNCTION_DATA_SIZE +\n// crate::abi::CALL_CONTEXT_SIZE\n// = 2 + 4 + 8\nglobal ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: Field = 14;\n\n#[oracle(enqueuePublicFunctionCall)]\nfn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter\n )\n}\n",
|
|
1567
2767
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr"
|
|
1568
2768
|
},
|
|
1569
|
-
"
|
|
2769
|
+
"91": {
|
|
1570
2770
|
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::CALL_PRIVATE_FUNCTION_RETURN_SIZE,\n};\n\n#[oracle(callPrivateFunction)]\nfn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {\n call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter\n )\n}\n",
|
|
1571
2771
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr"
|
|
1572
2772
|
},
|
|
1573
|
-
"
|
|
2773
|
+
"97": {
|
|
1574
2774
|
"source": "#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<T, N>(storage_slot: Field, deserialize: fn([Field; N]) -> T) -> T {\n let fields = storage_read_oracle_wrapper(storage_slot);\n deserialize(fields)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\n// TODO: Remove return value.\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n",
|
|
1575
2775
|
"path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/storage.nr"
|
|
1576
2776
|
},
|
|
1577
|
-
"
|
|
1578
|
-
"source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 16;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue bellow is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field =
|
|
2777
|
+
"102": {
|
|
2778
|
+
"source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL: Field = 1;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX: Field = 4;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 16;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue bellow is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field = 25;\nglobal MAX_NOTE_FIELDS_LENGTH: Field = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: Field = 23;\nglobal MAX_NOTES_PER_PAGE: Field = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: Field = 212;\nglobal CALL_CONTEXT_LENGTH: Field = 8;\nglobal HEADER_LENGTH: Field = 18; // 2 for last_archive, 2 for body hash, 10 for state reference, 4 for global vars \nglobal FUNCTION_DATA_LENGTH: Field = 4;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we should change this\n// constant as well CALL_PRIVATE_FUNCTION_RETURN_SIZE and PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 200;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 3;\nglobal CONTRACT_STORAGE_READ_LENGTH: Field = 2;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 190;\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674;\nglobal CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 210;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 98;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 188;\nglobal COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__COMMITMENT = 1;\nglobal GENERATOR_INDEX__COMMITMENT_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_COMMITMENT = 3;\nglobal GENERATOR_INDEX__SILOED_COMMITMENT = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\n",
|
|
1579
2779
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/constants.nr"
|
|
1580
2780
|
},
|
|
2781
|
+
"103": {
|
|
2782
|
+
"source": "use crate::{\n abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot,\n traits::Empty,\n};\n\nstruct PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot,\n nullifier_tree: AppendOnlyTreeSnapshot,\n contract_tree: AppendOnlyTreeSnapshot,\n public_data_tree: AppendOnlyTreeSnapshot,\n}\n\nglobal PARTIAL_STATE_REFERENCE_LENGTH: Field = 8; // APPEND_ONLY_TREE_SNAPSHOT_LENGTH * 4;\n\nimpl PartialStateReference {\n pub fn eq(self, other: PartialStateReference) -> bool {\n self.note_hash_tree.eq(other.note_hash_tree) &\n self.nullifier_tree.eq(other.nullifier_tree) &\n self.contract_tree.eq(other.contract_tree) &\n self.public_data_tree.eq(other.public_data_tree)\n }\n\n pub fn serialize(self) -> [Field; PARTIAL_STATE_REFERENCE_LENGTH] {\n let serialized_note_hash_tree = self.note_hash_tree.serialize();\n let serialized_nullifier_tree = self.nullifier_tree.serialize();\n let serialized_contract_tree = self.contract_tree.serialize();\n let serialized_public_data_tree = self.public_data_tree.serialize();\n\n [\n serialized_note_hash_tree[0],\n serialized_note_hash_tree[1],\n serialized_nullifier_tree[0],\n serialized_nullifier_tree[1],\n serialized_contract_tree[0],\n serialized_contract_tree[1],\n serialized_public_data_tree[0],\n serialized_public_data_tree[1],\n ]\n }\n\n pub fn deserialize(serialized: [Field; PARTIAL_STATE_REFERENCE_LENGTH]) -> PartialStateReference {\n PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[0], serialized[1]]\n ),\n nullifier_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[2], serialized[3]]\n ),\n contract_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[4], serialized[5]]\n ),\n public_data_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[6], serialized[7]]\n ),\n }\n }\n}\n\nimpl Empty for PartialStateReference {\n fn empty() -> Self {\n Self {\n note_hash_tree: AppendOnlyTreeSnapshot::zero(),\n nullifier_tree: AppendOnlyTreeSnapshot::zero(),\n contract_tree: AppendOnlyTreeSnapshot::zero(),\n public_data_tree: AppendOnlyTreeSnapshot::zero(),\n }\n }\n}\n",
|
|
2783
|
+
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/partial_state_reference.nr"
|
|
2784
|
+
},
|
|
2785
|
+
"104": {
|
|
2786
|
+
"source": "use crate::{\n abis::append_only_tree_snapshot::{\n AppendOnlyTreeSnapshot,\n APPEND_ONLY_TREE_SNAPSHOT_LENGTH,\n },\n partial_state_reference::{\n PartialStateReference,\n PARTIAL_STATE_REFERENCE_LENGTH,\n },\n traits::Empty,\n utils::{\n arr_copy_slice,\n bounded_vec::BoundedVec,\n },\n};\n\nstruct StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot,\n partial: PartialStateReference,\n}\n\nglobal STATE_REFERENCE_LENGTH: Field = 10; // 2 for snap + 8 for partial\n\nimpl StateReference {\n fn eq(self, other: StateReference) -> bool {\n self.l1_to_l2_message_tree.eq(other.l1_to_l2_message_tree) &\n self.partial.eq(other.partial)\n }\n\n fn serialize(self) -> [Field; STATE_REFERENCE_LENGTH] {\n let mut fields: BoundedVec<Field, STATE_REFERENCE_LENGTH> = BoundedVec::new(0);\n\n fields.push_array(self.l1_to_l2_message_tree.serialize());\n fields.push_array(self.partial.serialize());\n\n fields.storage\n }\n\n fn deserialize(serialized: [Field; STATE_REFERENCE_LENGTH]) -> StateReference {\n let mut offset = 0;\n\n let l1_to_l2_message_tree_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let partial_fields = arr_copy_slice(serialized, [0; PARTIAL_STATE_REFERENCE_LENGTH], offset);\n\n StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::deserialize(l1_to_l2_message_tree_fields),\n partial: PartialStateReference::deserialize(partial_fields),\n }\n }\n}\n\nimpl Empty for StateReference {\n fn empty() -> Self {\n Self {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::zero(),\n partial: PartialStateReference::empty(),\n }\n }\n}\n",
|
|
2787
|
+
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/state_reference.nr"
|
|
2788
|
+
},
|
|
1581
2789
|
"107": {
|
|
2790
|
+
"source": "use crate::{\n abis::{\n append_only_tree_snapshot::{\n AppendOnlyTreeSnapshot,\n APPEND_ONLY_TREE_SNAPSHOT_LENGTH,\n },\n global_variables::{\n GlobalVariables,\n GLOBAL_VARIABLES_LENGTH,\n },\n },\n constants::{\n GENERATOR_INDEX__BLOCK_HASH,\n HEADER_LENGTH,\n NUM_FIELDS_PER_SHA256,\n },\n hash::pedersen_hash,\n state_reference::{\n StateReference,\n STATE_REFERENCE_LENGTH,\n },\n traits::Empty,\n utils::{\n arr_copy_slice,\n bounded_vec::BoundedVec,\n },\n};\n\n// docs:start:header\nstruct Header {\n last_archive: AppendOnlyTreeSnapshot,\n body_hash: [Field; NUM_FIELDS_PER_SHA256],\n state: StateReference,\n global_variables: GlobalVariables,\n}\n// docs:end:header\n\nimpl Header {\n\n pub fn serialize(self) -> [Field; HEADER_LENGTH] {\n let mut fields: BoundedVec<Field, HEADER_LENGTH> = BoundedVec::new(0);\n\n fields.push_array(self.last_archive.serialize());\n fields.push_array(self.body_hash);\n fields.push_array(self.state.serialize());\n fields.push_array(self.global_variables.serialize());\n\n fields.storage\n }\n\n pub fn deserialize(serialized: [Field; HEADER_LENGTH]) -> Self {\n let mut offset = 0;\n\n let last_archive_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let body_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset);\n offset = offset + NUM_FIELDS_PER_SHA256;\n\n let state_fields = arr_copy_slice(serialized, [0; STATE_REFERENCE_LENGTH], offset);\n offset = offset + STATE_REFERENCE_LENGTH;\n\n let global_variables_fields = arr_copy_slice(serialized, [0; GLOBAL_VARIABLES_LENGTH], offset);\n\n Header {\n last_archive: AppendOnlyTreeSnapshot::deserialize(last_archive_fields),\n body_hash,\n state: StateReference::deserialize(state_fields),\n global_variables: GlobalVariables::deserialize(global_variables_fields),\n }\n }\n\n // TODO(#3941) Rename this as hash() and make it hash the whole header\n pub fn block_hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n pedersen_hash([\n self.global_variables.hash(),\n self.state.partial.note_hash_tree.root,\n self.state.partial.nullifier_tree.root,\n self.state.partial.contract_tree.root,\n self.state.l1_to_l2_message_tree.root,\n self.state.partial.public_data_tree.root,\n ], GENERATOR_INDEX__BLOCK_HASH)\n }\n}\n\nimpl Empty for Header {\n fn empty() -> Self {\n Self {\n last_archive: AppendOnlyTreeSnapshot::zero(),\n body_hash: [0; NUM_FIELDS_PER_SHA256],\n state: StateReference::empty(),\n global_variables: GlobalVariables::empty(),\n }\n }\n}\n",
|
|
2791
|
+
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/header.nr"
|
|
2792
|
+
},
|
|
2793
|
+
"108": {
|
|
1582
2794
|
"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::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::utils::bounded_vec::BoundedVec;\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 function_tree_root: Field,\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, function_tree_root };\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 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",
|
|
1583
2795
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
|
|
1584
2796
|
},
|
|
1585
|
-
"
|
|
2797
|
+
"125": {
|
|
1586
2798
|
"source": "use crate::{\n constants::{\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n },\n hash::pedersen_hash,\n utils,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, ToField};\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 AztecAddress {\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(pub_key: GrumpkinPoint, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_key.x, pub_key.y, 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 {\n inner : result\n }\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 {\n inner: fields[0]\n }\n }\n}\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl EthAddress{\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\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 {\n inner : result\n }\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 {\n inner: fields[0]\n }\n }\n}\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(contract_address_salt : Field, function_tree_root : Field, constructor_hash : Field) -> Self {\n PartialAddress::from_field(\n pedersen_hash([\n // TODO why the zeroes?\n 0,\n 0,\n contract_address_salt,\n function_tree_root,\n constructor_hash\n ], GENERATOR_INDEX__PARTIAL_ADDRESS)\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n",
|
|
1587
2799
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/address.nr"
|
|
1588
2800
|
},
|
|
1589
|
-
"
|
|
2801
|
+
"130": {
|
|
1590
2802
|
"source": "use crate::address::EthAddress;\nuse crate::constants::{\n CONTRACT_DEPLOYMENT_DATA_LENGTH,\n GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA,\n};\nuse crate::hash::pedersen_hash;\nuse crate::grumpkin_point::GrumpkinPoint;\nuse crate::traits::Hash;\n\n// docs:start:contract-deployment-data\nstruct ContractDeploymentData {\n deployer_public_key : GrumpkinPoint,\n constructor_vk_hash : Field,\n function_tree_root : Field,\n contract_address_salt : Field,\n portal_contract_address : EthAddress,\n}\n// docs:end:contract-deployment-data\n\nimpl Hash for ContractDeploymentData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA)\n }\n}\n\nimpl ContractDeploymentData {\n fn serialize(self) -> [Field; CONTRACT_DEPLOYMENT_DATA_LENGTH] {\n [\n self.deployer_public_key.x,\n self.deployer_public_key.y,\n self.constructor_vk_hash,\n self.function_tree_root,\n self.contract_address_salt,\n self.portal_contract_address.to_field(),\n ]\n }\n\n fn assert_is_zero(self) {\n self.deployer_public_key.assert_is_zero();\n assert(self.constructor_vk_hash == 0);\n assert(self.function_tree_root == 0);\n assert(self.contract_address_salt == 0);\n self.portal_contract_address.assert_is_zero();\n }\n\n}\n",
|
|
1591
2803
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"
|
|
1592
2804
|
},
|
|
1593
|
-
"
|
|
2805
|
+
"131": {
|
|
1594
2806
|
"source": "use crate::{\n constants::{\n CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Hash, Empty};\n\nstruct StorageUpdateRequest{\n storage_slot : Field,\n old_value : Field,\n new_value : Field,\n}\n\nimpl Eq for StorageUpdateRequest {\n fn eq(self, request: Self) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n (request.storage_slot == self.storage_slot)\n & (request.old_value == self.old_value)\n & (request.new_value == self.new_value)\n }\n}\n\nimpl Empty for StorageUpdateRequest {\n fn empty() -> Self {\n StorageUpdateRequest {\n storage_slot: 0,\n old_value: 0,\n new_value: 0,\n }\n }\n}\n\nimpl Hash for StorageUpdateRequest {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST)\n }\n}\n\nimpl StorageUpdateRequest {\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH] {\n [self.storage_slot, self.old_value, self.new_value]\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
|
|
1595
2807
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr"
|
|
1596
2808
|
},
|
|
1597
|
-
"
|
|
2809
|
+
"132": {
|
|
1598
2810
|
"source": "use crate::{\n constants::{\n CONTRACT_STORAGE_READ_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_READ,\n },\n hash::pedersen_hash,\n};\nuse crate::traits::Empty;\n\nstruct StorageRead {\n storage_slot: Field,\n current_value: Field,\n}\n\nimpl Empty for StorageRead { \n fn empty() -> Self {\n Self {\n storage_slot: 0,\n current_value: 0,\n }\n }\n}\n\nimpl StorageRead {\n\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_READ_LENGTH] {\n [self.storage_slot, self.current_value]\n }\n\n pub fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
|
|
1599
2811
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr"
|
|
1600
2812
|
},
|
|
1601
|
-
"
|
|
2813
|
+
"140": {
|
|
1602
2814
|
"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__CALL_STACK_ITEM,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCallStackItem {\n // This is the _actual_ contract address relating to where this function's code resides in the\n // contract tree. Regardless of whether this is a call or delegatecall, this\n // `contract_address` _does not change_. Amongst other things, it's used as a lookup for\n // getting the correct code from the tree. There is a separate `storage_contract_address`\n // within a CallStackItem which varies depending on whether this is a call or delegatecall.\n contract_address: AztecAddress,\n public_inputs: PrivateCircuitPublicInputs,\n function_data: FunctionData,\n // Not really needed for PrivateCallStackItem.\n is_execution_request: bool,\n}\n\nimpl Hash for PrivateCallStackItem {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.contract_address.to_field(),\n self.function_data.hash(),\n self.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs,\n };\n call_stack_item\n }\n}\n",
|
|
1603
2815
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_stack_item.nr"
|
|
1604
2816
|
},
|
|
1605
|
-
"
|
|
2817
|
+
"144": {
|
|
1606
2818
|
"source": "use crate::constants::{GENERATOR_INDEX__SIDE_EFFECT};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\nstruct SideEffect{\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffect {\n pub fn serialize(self) -> [Field; 2] {\n [self.value, self.counter as Field]\n }\n\n pub fn deserialise(values: [Field; 2]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.counter == 0)\n }\n}\n\nstruct SideEffectLinkedToNoteHash{\n value: Field,\n note_hash: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffectLinkedToNoteHash {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffectLinkedToNoteHash {\n fn eq(self, side_effect: SideEffectLinkedToNoteHash) -> bool {\n (self.value == side_effect.value)\n & (self.note_hash == side_effect.note_hash) \n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffectLinkedToNoteHash {\n fn empty() -> Self {\n SideEffectLinkedToNoteHash {\n value: 0,\n note_hash: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffectLinkedToNoteHash {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffectLinkedToNoteHash{\n pub fn serialize(self) -> [Field; 3] {\n [self.value, self.note_hash, self.counter as Field]\n }\n\n pub fn deserialise(values: [Field; 3]) -> Self {\n Self {\n value: values[0],\n note_hash: values[1],\n counter: values[2] as u32,\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.note_hash == 0)\n & (self.counter == 0)\n }\n}\n\n",
|
|
1607
2819
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"
|
|
1608
2820
|
},
|
|
1609
|
-
"
|
|
1610
|
-
"source": "use crate::constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_NEW_COMMITMENTS_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 NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n};\nuse crate::{\n abis::{\n call_context::CallContext,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n
|
|
2821
|
+
"147": {
|
|
2822
|
+
"source": "use crate::constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_NEW_COMMITMENTS_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 NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n};\nuse crate::{\n abis::{\n call_context::CallContext,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n header::Header,\n utils::bounded_vec::BoundedVec,\n};\n\nstruct PublicCircuitPublicInputs{\n call_context: CallContext,\n\n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n historical_header: Header,\n\n prover_address: AztecAddress,\n}\n\nimpl PublicCircuitPublicInputs{\n fn hash(self) -> Field { \n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595) have mercy por favor \n let mut inputs: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0);\n inputs.push(self.call_context.hash());\n inputs.push(self.args_hash);\n inputs.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n inputs.push(self.contract_storage_update_requests[i].hash());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n inputs.push(self.contract_storage_reads[i].hash());\n }\n inputs.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n inputs.push(self.new_commitments[i].hash());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n inputs.push(self.new_nullifiers[i].hash());\n }\n inputs.push_array(self.new_l2_to_l1_msgs);\n inputs.push_array(self.unencrypted_logs_hash);\n inputs.push(self.unencrypted_log_preimages_length);\n inputs.push_array(self.historical_header.serialize());\n inputs.push(self.prover_address.to_field());\n\n assert_eq(inputs.len(), PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PublicCircuitPublicInputs\");\n\n dep::std::hash::pedersen_hash_with_separator(inputs.storage, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n\n pub fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize()); \n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.push_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.push_array(self.contract_storage_reads[i].serialize());\n }\n fields.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
|
|
1611
2823
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr"
|
|
1612
2824
|
},
|
|
1613
|
-
"
|
|
1614
|
-
"source": "use crate::{\n abis::{\n call_context::CallContext,\n
|
|
2825
|
+
"150": {
|
|
2826
|
+
"source": "use crate::{\n abis::{\n call_context::CallContext,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n pedersen_hash,\n },\n header::Header,\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL,\n MAX_NEW_COMMITMENTS_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_NEW_L2_TO_L1_MSGS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n \n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n read_requests: [SideEffect; MAX_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest; MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n end_side_effect_counter : u32,\n\n encrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n // Header of the block the transaction is executing against (not the block the transaction is included in).\n historical_header: Header,\n\n contract_deployment_data: ContractDeploymentData,\n\n chain_id: Field,\n version: Field,\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0); \n fields.push(self.call_context.hash());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push(self.contract_deployment_data.hash());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PrivateCircuitPublicInputs\");\n\n pedersen_hash(fields.storage, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter as Field);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.historical_header.serialize());\n fields.push_array(self.contract_deployment_data.serialize());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\n#[test]\nfn serialization_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _serialized = pcpi.serialize();\n}\n\n#[test]\nfn hash_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _hashed = pcpi.hash();\n}\n",
|
|
1615
2827
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/private_circuit_public_inputs.nr"
|
|
1616
2828
|
},
|
|
1617
|
-
"
|
|
2829
|
+
"153": {
|
|
1618
2830
|
"source": "use crate::abis::function_selector::FunctionSelector;\nuse crate::constants::GENERATOR_INDEX__FUNCTION_DATA;\n\nstruct FunctionData {\n // First four bytes of the abi encoding \n // of a function. \n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n is_constructor : bool,\n}\n\nimpl FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.is_constructor as Field,\n ], GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n",
|
|
1619
2831
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"
|
|
1620
2832
|
},
|
|
1621
|
-
"
|
|
2833
|
+
"154": {
|
|
2834
|
+
"source": "use dep::std::cmp::Eq;\n\nstruct AppendOnlyTreeSnapshot {\n root : Field,\n next_available_leaf_index : u32\n}\n\nglobal APPEND_ONLY_TREE_SNAPSHOT_LENGTH: Field = 2;\n\nimpl AppendOnlyTreeSnapshot {\n pub fn serialize(self) -> [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH] {\n [self.root, self.next_available_leaf_index as Field]\n }\n\n pub fn deserialize(serialized: [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH]) -> AppendOnlyTreeSnapshot {\n AppendOnlyTreeSnapshot {\n root : serialized[0],\n next_available_leaf_index : serialized[1] as u32\n }\n }\n\n pub fn zero() -> Self {\n Self {\n root: 0,\n next_available_leaf_index: 0,\n }\n }\n}\n\nimpl Eq for AppendOnlyTreeSnapshot {\n fn eq(self, other : AppendOnlyTreeSnapshot) -> bool {\n (self.root == other.root) & (self.next_available_leaf_index == other.next_available_leaf_index)\n }\n}\n",
|
|
2835
|
+
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/append_only_tree_snapshot.nr"
|
|
2836
|
+
},
|
|
2837
|
+
"158": {
|
|
1622
2838
|
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{EthAddress,AztecAddress},\n constants::{\n CALL_CONTEXT_LENGTH,\n GENERATOR_INDEX__CALL_CONTEXT,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::Hash;\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n portal_contract_address : EthAddress,\n\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n is_contract_deployment : bool,\n\n start_side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl Eq for CallContext {\n fn eq(self, call_context: CallContext) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n call_context.msg_sender.eq(self.msg_sender)\n & call_context.storage_contract_address.eq(self.storage_contract_address)\n & call_context.portal_contract_address.eq(self.portal_contract_address)\n & call_context.function_selector.eq(self.function_selector)\n & (call_context.is_delegate_call == self.is_delegate_call)\n & (call_context.is_static_call == self.is_static_call)\n & (call_context.is_contract_deployment == self.is_contract_deployment)\n & (call_context.start_side_effect_counter == self.start_side_effect_counter)\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n [\n self.msg_sender.to_field(),\n self.storage_contract_address.to_field(),\n self.portal_contract_address.to_field(),\n self.function_selector.to_field(),\n self.is_delegate_call as Field,\n self.is_static_call as Field,\n self.is_contract_deployment as Field,\n self.start_side_effect_counter as Field,\n ]\n }\n\n fn assert_is_zero(self) {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n assert(self.msg_sender.to_field() == 0);\n assert(self.storage_contract_address.to_field() == 0);\n assert(self.portal_contract_address.to_field() == 0);\n assert(self.function_selector.to_field() == 0);\n assert(self.is_delegate_call == false);\n assert(self.is_static_call == false);\n assert(self.is_contract_deployment == false);\n assert(self.start_side_effect_counter == 0);\n }\n}\n",
|
|
1623
2839
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr"
|
|
1624
2840
|
},
|
|
1625
|
-
"
|
|
2841
|
+
"164": {
|
|
1626
2842
|
"source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_u32(value: u32) -> Self {\n Self {\n inner : value,\n }\n }\n\n pub fn from_field(value : Field) -> Self {\n Self {\n inner : value as u32,\n }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n",
|
|
1627
2843
|
"path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"
|
|
1628
2844
|
},
|
|
1629
|
-
"
|
|
2845
|
+
"188": {
|
|
1630
2846
|
"source": "use dep::aztec::abi;\nuse dep::aztec::types::vec::BoundedVec;\nuse dep::aztec::context::PrivateContext;\nuse dep::aztec::protocol_types::{\n abis::{\n call_stack_item::{\n PrivateCallStackItem,\n PublicCallStackItem,\n },\n function_selector::FunctionSelector,\n },\n address::AztecAddress,\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::pedersen_hash,\n};\n\nglobal ACCOUNT_MAX_CALLS: Field = 4;\n// 1 (ARGS_HASH) + 1 (FUNCTION_SELECTOR) + 1 (TARGET_ADDRESS) + 1 (IS_PUBLIC)\nglobal FUNCTION_CALL_SIZE: Field = 4;\n// 3 * 32 + 1\nglobal FUNCTION_CALL_SIZE_IN_BYTES: Field = 97;\n\nstruct FunctionCall {\n args_hash: Field,\n function_selector: FunctionSelector,\n target_address: AztecAddress,\n is_public: bool,\n}\n\nimpl FunctionCall {\n fn serialize(self) -> [Field; FUNCTION_CALL_SIZE] {\n [self.args_hash, self.function_selector.to_field(), self.target_address.to_field(), self.is_public as Field]\n }\n\n fn to_be_bytes(self) -> [u8; FUNCTION_CALL_SIZE_IN_BYTES] {\n let mut bytes: [u8; FUNCTION_CALL_SIZE_IN_BYTES] = [0; FUNCTION_CALL_SIZE_IN_BYTES];\n let args_hash_bytes = self.args_hash.to_be_bytes(32);\n for i in 0..32 { bytes[i] = args_hash_bytes[i]; }\n let function_selector_bytes = self.function_selector.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 32] = function_selector_bytes[i]; }\n let target_address_bytes = self.target_address.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 64] = target_address_bytes[i]; }\n bytes[96] = self.is_public as u8;\n bytes\n }\n}\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal ENTRYPOINT_PAYLOAD_SIZE: Field = 17;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES: Field = 420;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:entrypoint-struct\nstruct EntrypointPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:entrypoint-struct\n\nimpl EntrypointPayload {\n fn hash(self) -> Field {\n pedersen_hash(\n self.serialize(), \n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; ENTRYPOINT_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, ENTRYPOINT_PAYLOAD_SIZE> = BoundedVec::new(0); \n for call in self.function_calls {\n fields.push_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] = [0; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES];\n\n for i in 0..ACCOUNT_MAX_CALLS {\n let item_bytes = self.function_calls[i].to_be_bytes();\n for j in 0..FUNCTION_CALL_SIZE_IN_BYTES { \n bytes[i * FUNCTION_CALL_SIZE_IN_BYTES + j] = item_bytes[j];\n }\n }\n\n let nonce_bytes = self.nonce.to_be_bytes(32);\n let nonce_offset = FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS;\n for j in 0..32 {\n bytes[nonce_offset + j] = nonce_bytes[j];\n }\n \n bytes\n }\n\n // Executes all private and public calls \n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n",
|
|
1631
2847
|
"path": "/usr/src/yarn-project/aztec-nr/authwit/src/entrypoint.nr"
|
|
1632
2848
|
},
|
|
1633
|
-
"
|
|
2849
|
+
"189": {
|
|
1634
2850
|
"source": "use dep::aztec::context::{PrivateContext, PublicContext, Context};\nuse dep::aztec::state_vars::{map::Map, public_state::PublicState};\nuse dep::aztec::types::type_serialization::bool_serialization::{BoolSerializationMethods,BOOL_SERIALIZED_LEN};\n\nuse crate::entrypoint::EntrypointPayload;\nuse crate::auth::IS_VALID_SELECTOR;\n\nstruct AccountActions {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n approved_action: Map<Field, PublicState<bool, BOOL_SERIALIZED_LEN>>,\n}\n\nimpl AccountActions {\n pub fn init(context: Context, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions {\n context: context,\n is_valid_impl: is_valid_impl,\n approved_action: Map::new(\n context,\n approved_action_storage_slot,\n |context, slot| {\n PublicState::new(context, slot, BoolSerializationMethods)\n },\n ),\n }\n }\n\n pub fn private(context: &mut PrivateContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::private(context), approved_action_storage_slot, is_valid_impl)\n }\n\n pub fn public(context: &mut PublicContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::public(context), approved_action_storage_slot, is_valid_impl)\n }\n \n // docs:start:entrypoint\n pub fn entrypoint(self, payload: EntrypointPayload) {\n let message_hash = payload.hash();\n let valid_fn = self.is_valid_impl;\n let private_context = self.context.private.unwrap();\n assert(valid_fn(private_context, message_hash));\n payload.execute_calls(private_context);\n }\n // docs:end:entrypoint\n\n pub fn is_valid(self, message_hash: Field) -> Field {\n let valid_fn = self.is_valid_impl;\n if (valid_fn(self.context.private.unwrap(), message_hash)) {\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn is_valid_public(self, message_hash: Field) -> Field {\n let value = self.approved_action.at(message_hash).read();\n if (value){\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn internal_set_is_valid_storage(self, message_hash: Field, value: bool) {\n self.approved_action.at(message_hash).write(value);\n }\n}\n",
|
|
1635
2851
|
"path": "/usr/src/yarn-project/aztec-nr/authwit/src/account.nr"
|
|
1636
2852
|
},
|
|
1637
|
-
"
|
|
2853
|
+
"192": {
|
|
1638
2854
|
"source": "#[oracle(getAuthWitness)]\nfn get_auth_witness_oracle<N>(_message_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn get_auth_witness<N>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n",
|
|
1639
2855
|
"path": "/usr/src/yarn-project/aztec-nr/authwit/src/auth_witness.nr"
|
|
1640
2856
|
},
|
|
1641
|
-
"
|
|
2857
|
+
"213": {
|
|
1642
2858
|
"source": "mod util;\nmod auth_oracle;\n\ncontract SchnorrSingleKeyAccount {\n use dep::std::{\n option::Option,\n };\n use dep::aztec::context::{ PrivateContext, PublicContext, Context };\n\n use dep::authwit::{\n entrypoint::EntrypointPayload,\n account::AccountActions,\n };\n\n use crate::{ util::recover_address, auth_oracle::get_auth_witness };\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 1;\n\n #[aztec(private)]\n fn constructor() {}\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(payload: pub EntrypointPayload) {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.entrypoint(payload);\n }\n\n #[aztec(private)]\n fn is_valid(message_hash: Field) -> Field {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid(message_hash)\n }\n\n #[aztec(public)]\n fn is_valid_public(message_hash: Field) -> Field {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid_public(message_hash)\n }\n\n #[aztec(public)]\n internal fn set_is_valid_storage(message_hash: Field, value: bool) {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.internal_set_is_valid_storage(message_hash, value)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, message_hash: Field) -> pub bool {\n let witness = get_auth_witness(message_hash);\n assert(recover_address(message_hash, witness).eq(context.this_address()));\n true\n }\n}\n",
|
|
1643
2859
|
"path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr"
|
|
1644
2860
|
},
|
|
1645
|
-
"
|
|
2861
|
+
"214": {
|
|
1646
2862
|
"source": "use dep::authwit::auth_witness;\nuse dep::aztec::protocol_types::{\n address::PartialAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\nstruct AuthWitness {\n owner: GrumpkinPoint,\n signature: [u8; 64],\n partial_address: PartialAddress,\n}\n\nimpl AuthWitness {\n fn deserialize(values: [Field; 67]) -> Self {\n let mut signature = [0; 64];\n for i in 0..64 {\n signature[i] = values[i + 2] as u8;\n }\n Self {\n owner: GrumpkinPoint::new(values[0], values[1]),\n signature,\n partial_address: PartialAddress::from_field(values[66]),\n }\n }\n}\n\nunconstrained pub fn get_auth_witness(message_hash: Field) -> AuthWitness {\n let witness: [Field; 67] = auth_witness::get_auth_witness(message_hash);\n AuthWitness::deserialize(witness)\n}\n",
|
|
1647
2863
|
"path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr"
|
|
1648
2864
|
},
|
|
1649
|
-
"
|
|
2865
|
+
"215": {
|
|
1650
2866
|
"source": "use dep::aztec::protocol_types::address::AztecAddress;\nuse dep::std::{schnorr::verify_signature};\nuse crate::auth_oracle::{AuthWitness};\n\npub fn recover_address(message_hash: Field, witness: AuthWitness) -> AztecAddress {\n let message_bytes = message_hash.to_be_bytes(32);\n let verification = verify_signature(\n witness.owner.x,\n witness.owner.y,\n witness.signature,\n message_bytes\n );\n assert(verification == true);\n\n AztecAddress::compute(witness.owner, witness.partial_address)\n}\n",
|
|
1651
2867
|
"path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_single_key_account_contract/src/util.nr"
|
|
1652
2868
|
}
|