@aztec/accounts 0.19.0 → 0.20.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.
@@ -1,1090 +1,1741 @@
1
1
  {
2
+ "noir_version": "0.23.0+602f23f4fb698cf6e37071936a2a46593a998d08",
2
3
  "name": "SchnorrAccount",
3
4
  "functions": [
4
5
  {
5
- "name": "compute_note_hash_and_nullifier",
6
- "functionType": "unconstrained",
7
- "isInternal": false,
8
- "parameters": [
9
- {
10
- "name": "contract_address",
11
- "type": {
12
- "kind": "struct",
13
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
14
- "fields": [
15
- {
16
- "name": "inner",
17
- "type": {
18
- "kind": "field"
19
- }
20
- }
21
- ]
22
- },
23
- "visibility": "private"
24
- },
25
- {
26
- "name": "nonce",
27
- "type": {
28
- "kind": "field"
29
- },
30
- "visibility": "private"
31
- },
32
- {
33
- "name": "storage_slot",
34
- "type": {
35
- "kind": "field"
36
- },
37
- "visibility": "private"
38
- },
39
- {
40
- "name": "serialized_note",
41
- "type": {
42
- "kind": "array",
43
- "length": 3,
6
+ "name": "set_is_valid_storage",
7
+ "function_type": "Open",
8
+ "is_internal": true,
9
+ "abi": {
10
+ "parameters": [
11
+ {
12
+ "name": "inputs",
44
13
  "type": {
45
- "kind": "field"
46
- }
47
- },
48
- "visibility": "private"
49
- }
50
- ],
51
- "returnTypes": [
52
- {
53
- "kind": "array",
54
- "length": 4,
55
- "type": {
56
- "kind": "field"
57
- }
58
- }
59
- ],
60
- "bytecode": "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",
61
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
62
- },
63
- {
64
- "name": "constructor",
65
- "functionType": "secret",
66
- "isInternal": false,
67
- "parameters": [
68
- {
69
- "name": "signing_pub_key_x",
70
- "type": {
71
- "kind": "field"
72
- },
73
- "visibility": "public"
74
- },
75
- {
76
- "name": "signing_pub_key_y",
77
- "type": {
78
- "kind": "field"
79
- },
80
- "visibility": "public"
81
- }
82
- ],
83
- "returnTypes": [],
84
- "bytecode": "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",
85
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
86
- },
87
- {
88
- "name": "entrypoint",
89
- "functionType": "secret",
90
- "isInternal": false,
91
- "parameters": [
92
- {
93
- "name": "payload",
94
- "type": {
95
- "kind": "struct",
96
- "path": "authwit::entrypoint::EntrypointPayload",
97
- "fields": [
98
- {
99
- "name": "function_calls",
100
- "type": {
101
- "kind": "array",
102
- "length": 4,
14
+ "kind": "struct",
15
+ "path": "authwit::aztec::abi::PublicContextInputs",
16
+ "fields": [
17
+ {
18
+ "name": "call_context",
103
19
  "type": {
104
20
  "kind": "struct",
105
- "path": "authwit::entrypoint::FunctionCall",
21
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
106
22
  "fields": [
107
23
  {
108
- "name": "args_hash",
24
+ "name": "msg_sender",
109
25
  "type": {
110
- "kind": "field"
26
+ "kind": "struct",
27
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
28
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
111
29
  }
112
30
  },
113
31
  {
114
- "name": "function_selector",
32
+ "name": "storage_contract_address",
115
33
  "type": {
116
34
  "kind": "struct",
117
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
118
- "fields": [
119
- {
120
- "name": "inner",
121
- "type": {
122
- "kind": "integer",
123
- "sign": "unsigned",
124
- "width": 32
125
- }
126
- }
127
- ]
35
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
36
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
128
37
  }
129
38
  },
130
39
  {
131
- "name": "target_address",
40
+ "name": "portal_contract_address",
132
41
  "type": {
133
42
  "kind": "struct",
134
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
135
- "fields": [
136
- {
137
- "name": "inner",
138
- "type": {
139
- "kind": "field"
140
- }
141
- }
142
- ]
43
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
44
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
143
45
  }
144
46
  },
145
47
  {
146
- "name": "is_public",
48
+ "name": "function_selector",
147
49
  "type": {
148
- "kind": "boolean"
50
+ "kind": "struct",
51
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
52
+ "fields": [
53
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
54
+ ]
149
55
  }
56
+ },
57
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
58
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
59
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
60
+ {
61
+ "name": "start_side_effect_counter",
62
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
150
63
  }
151
64
  ]
152
65
  }
153
- }
154
- },
155
- {
156
- "name": "nonce",
157
- "type": {
158
- "kind": "field"
159
- }
160
- }
161
- ]
162
- },
163
- "visibility": "public"
164
- }
165
- ],
166
- "returnTypes": [],
167
- "bytecode": "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",
168
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
169
- },
170
- {
171
- "name": "is_valid",
172
- "functionType": "secret",
173
- "isInternal": false,
174
- "parameters": [
175
- {
176
- "name": "message_hash",
177
- "type": {
178
- "kind": "field"
179
- },
180
- "visibility": "private"
181
- }
182
- ],
183
- "returnTypes": [],
184
- "bytecode": "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",
185
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
186
- },
187
- {
188
- "name": "is_valid_public",
189
- "functionType": "open",
190
- "isInternal": false,
191
- "parameters": [
192
- {
193
- "name": "message_hash",
194
- "type": {
195
- "kind": "field"
196
- },
197
- "visibility": "private"
198
- }
199
- ],
200
- "returnTypes": [
201
- {
202
- "kind": "struct",
203
- "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
204
- "fields": [
205
- {
206
- "name": "call_context",
207
- "type": {
208
- "kind": "struct",
209
- "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
210
- "fields": [
211
- {
212
- "name": "msg_sender",
213
- "type": {
214
- "kind": "struct",
215
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
216
- "fields": [
217
- {
218
- "name": "inner",
219
- "type": {
220
- "kind": "field"
221
- }
222
- }
223
- ]
224
- }
225
- },
226
- {
227
- "name": "storage_contract_address",
228
- "type": {
229
- "kind": "struct",
230
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
231
- "fields": [
232
- {
233
- "name": "inner",
234
- "type": {
235
- "kind": "field"
236
- }
237
- }
238
- ]
239
- }
240
- },
241
- {
242
- "name": "portal_contract_address",
243
- "type": {
244
- "kind": "struct",
245
- "path": "authwit::aztec::protocol_types::address::EthAddress",
246
- "fields": [
247
- {
248
- "name": "inner",
249
- "type": {
250
- "kind": "field"
251
- }
252
- }
253
- ]
254
- }
255
- },
256
- {
257
- "name": "function_selector",
258
- "type": {
259
- "kind": "struct",
260
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
261
- "fields": [
262
- {
263
- "name": "inner",
264
- "type": {
265
- "kind": "integer",
266
- "sign": "unsigned",
267
- "width": 32
268
- }
269
- }
270
- ]
271
- }
272
- },
273
- {
274
- "name": "is_delegate_call",
275
- "type": {
276
- "kind": "boolean"
277
- }
278
- },
279
- {
280
- "name": "is_static_call",
281
- "type": {
282
- "kind": "boolean"
283
- }
284
- },
285
- {
286
- "name": "is_contract_deployment",
287
- "type": {
288
- "kind": "boolean"
289
- }
290
- },
291
- {
292
- "name": "start_side_effect_counter",
293
- "type": {
294
- "kind": "integer",
295
- "sign": "unsigned",
296
- "width": 32
297
- }
66
+ },
67
+ {
68
+ "name": "block_header",
69
+ "type": {
70
+ "kind": "struct",
71
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
72
+ "fields": [
73
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
74
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
75
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
76
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
77
+ { "name": "archive_root", "type": { "kind": "field" } },
78
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
79
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
80
+ ]
81
+ }
82
+ },
83
+ {
84
+ "name": "public_global_variables",
85
+ "type": {
86
+ "kind": "struct",
87
+ "path": "authwit::aztec::abi::PublicGlobalVariables",
88
+ "fields": [
89
+ { "name": "chain_id", "type": { "kind": "field" } },
90
+ { "name": "version", "type": { "kind": "field" } },
91
+ { "name": "block_number", "type": { "kind": "field" } },
92
+ { "name": "timestamp", "type": { "kind": "field" } }
93
+ ]
298
94
  }
299
- ]
300
- }
301
- },
302
- {
303
- "name": "args_hash",
304
- "type": {
305
- "kind": "field"
306
- }
307
- },
308
- {
309
- "name": "return_values",
310
- "type": {
311
- "kind": "array",
312
- "length": 4,
313
- "type": {
314
- "kind": "field"
315
95
  }
316
- }
96
+ ]
317
97
  },
318
- {
319
- "name": "contract_storage_update_requests",
320
- "type": {
321
- "kind": "array",
322
- "length": 16,
98
+ "visibility": "private"
99
+ },
100
+ { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" },
101
+ { "name": "value", "type": { "kind": "boolean" }, "visibility": "private" }
102
+ ],
103
+ "param_witnesses": {
104
+ "inputs": [{ "start": 0, "end": 19 }],
105
+ "message_hash": [{ "start": 19, "end": 20 }],
106
+ "value": [{ "start": 20, "end": 21 }]
107
+ },
108
+ "return_type": {
109
+ "abi_type": {
110
+ "kind": "struct",
111
+ "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
112
+ "fields": [
113
+ {
114
+ "name": "call_context",
323
115
  "type": {
324
116
  "kind": "struct",
325
- "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
117
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
326
118
  "fields": [
327
119
  {
328
- "name": "storage_slot",
120
+ "name": "msg_sender",
329
121
  "type": {
330
- "kind": "field"
122
+ "kind": "struct",
123
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
124
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
331
125
  }
332
126
  },
333
127
  {
334
- "name": "old_value",
128
+ "name": "storage_contract_address",
335
129
  "type": {
336
- "kind": "field"
130
+ "kind": "struct",
131
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
132
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
337
133
  }
338
134
  },
339
135
  {
340
- "name": "new_value",
136
+ "name": "portal_contract_address",
341
137
  "type": {
342
- "kind": "field"
138
+ "kind": "struct",
139
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
140
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
343
141
  }
344
- }
345
- ]
346
- }
347
- }
348
- },
349
- {
350
- "name": "contract_storage_reads",
351
- "type": {
352
- "kind": "array",
353
- "length": 16,
354
- "type": {
355
- "kind": "struct",
356
- "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
357
- "fields": [
142
+ },
358
143
  {
359
- "name": "storage_slot",
144
+ "name": "function_selector",
360
145
  "type": {
361
- "kind": "field"
146
+ "kind": "struct",
147
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
148
+ "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
362
149
  }
363
150
  },
151
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
152
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
153
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
364
154
  {
365
- "name": "current_value",
366
- "type": {
367
- "kind": "field"
368
- }
155
+ "name": "start_side_effect_counter",
156
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
369
157
  }
370
158
  ]
371
159
  }
372
- }
373
- },
374
- {
375
- "name": "public_call_stack_hashes",
376
- "type": {
377
- "kind": "array",
378
- "length": 4,
160
+ },
161
+ { "name": "args_hash", "type": { "kind": "field" } },
162
+ { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
163
+ {
164
+ "name": "contract_storage_update_requests",
379
165
  "type": {
380
- "kind": "field"
166
+ "kind": "array",
167
+ "length": 16,
168
+ "type": {
169
+ "kind": "struct",
170
+ "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
171
+ "fields": [
172
+ { "name": "storage_slot", "type": { "kind": "field" } },
173
+ { "name": "old_value", "type": { "kind": "field" } },
174
+ { "name": "new_value", "type": { "kind": "field" } }
175
+ ]
176
+ }
381
177
  }
382
- }
383
- },
384
- {
385
- "name": "new_commitments",
386
- "type": {
387
- "kind": "array",
388
- "length": 16,
178
+ },
179
+ {
180
+ "name": "contract_storage_reads",
389
181
  "type": {
390
- "kind": "struct",
391
- "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
392
- "fields": [
393
- {
394
- "name": "value",
395
- "type": {
396
- "kind": "field"
397
- }
398
- },
399
- {
400
- "name": "counter",
401
- "type": {
402
- "kind": "integer",
403
- "sign": "unsigned",
404
- "width": 32
405
- }
406
- }
407
- ]
182
+ "kind": "array",
183
+ "length": 16,
184
+ "type": {
185
+ "kind": "struct",
186
+ "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
187
+ "fields": [
188
+ { "name": "storage_slot", "type": { "kind": "field" } },
189
+ { "name": "current_value", "type": { "kind": "field" } }
190
+ ]
191
+ }
408
192
  }
409
- }
410
- },
411
- {
412
- "name": "new_nullifiers",
413
- "type": {
414
- "kind": "array",
415
- "length": 16,
193
+ },
194
+ {
195
+ "name": "public_call_stack_hashes",
196
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
197
+ },
198
+ {
199
+ "name": "new_commitments",
200
+ "type": {
201
+ "kind": "array",
202
+ "length": 16,
203
+ "type": {
204
+ "kind": "struct",
205
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
206
+ "fields": [
207
+ { "name": "value", "type": { "kind": "field" } },
208
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
209
+ ]
210
+ }
211
+ }
212
+ },
213
+ {
214
+ "name": "new_nullifiers",
215
+ "type": {
216
+ "kind": "array",
217
+ "length": 16,
218
+ "type": {
219
+ "kind": "struct",
220
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
221
+ "fields": [
222
+ { "name": "value", "type": { "kind": "field" } },
223
+ { "name": "note_hash", "type": { "kind": "field" } },
224
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
225
+ ]
226
+ }
227
+ }
228
+ },
229
+ { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
230
+ {
231
+ "name": "unencrypted_logs_hash",
232
+ "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
233
+ },
234
+ { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
235
+ {
236
+ "name": "block_header",
416
237
  "type": {
417
238
  "kind": "struct",
418
- "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
239
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
419
240
  "fields": [
420
- {
421
- "name": "value",
422
- "type": {
423
- "kind": "field"
424
- }
425
- },
426
- {
427
- "name": "note_hash",
428
- "type": {
429
- "kind": "field"
430
- }
431
- },
432
- {
433
- "name": "counter",
434
- "type": {
435
- "kind": "integer",
436
- "sign": "unsigned",
437
- "width": 32
438
- }
439
- }
241
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
242
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
243
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
244
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
245
+ { "name": "archive_root", "type": { "kind": "field" } },
246
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
247
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
440
248
  ]
441
249
  }
442
- }
443
- },
444
- {
445
- "name": "new_l2_to_l1_msgs",
446
- "type": {
447
- "kind": "array",
448
- "length": 2,
449
- "type": {
450
- "kind": "field"
451
- }
452
- }
453
- },
454
- {
455
- "name": "unencrypted_logs_hash",
456
- "type": {
457
- "kind": "array",
458
- "length": 2,
250
+ },
251
+ {
252
+ "name": "prover_address",
459
253
  "type": {
460
- "kind": "field"
254
+ "kind": "struct",
255
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
256
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
461
257
  }
462
258
  }
463
- },
464
- {
465
- "name": "unencrypted_log_preimages_length",
466
- "type": {
467
- "kind": "field"
468
- }
469
- },
470
- {
471
- "name": "block_header",
472
- "type": {
473
- "kind": "struct",
474
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
475
- "fields": [
476
- {
477
- "name": "note_hash_tree_root",
478
- "type": {
479
- "kind": "field"
480
- }
481
- },
482
- {
483
- "name": "nullifier_tree_root",
484
- "type": {
485
- "kind": "field"
486
- }
487
- },
488
- {
489
- "name": "contract_tree_root",
490
- "type": {
491
- "kind": "field"
492
- }
493
- },
494
- {
495
- "name": "l1_to_l2_message_tree_root",
496
- "type": {
497
- "kind": "field"
498
- }
499
- },
500
- {
501
- "name": "archive_root",
502
- "type": {
503
- "kind": "field"
504
- }
505
- },
506
- {
507
- "name": "public_data_tree_root",
508
- "type": {
509
- "kind": "field"
510
- }
511
- },
512
- {
513
- "name": "global_variables_hash",
514
- "type": {
515
- "kind": "field"
516
- }
517
- }
518
- ]
519
- }
520
- },
521
- {
522
- "name": "prover_address",
523
- "type": {
524
- "kind": "struct",
525
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
526
- "fields": [
527
- {
528
- "name": "inner",
529
- "type": {
530
- "kind": "field"
531
- }
532
- }
533
- ]
534
- }
535
- }
536
- ]
537
- }
538
- ],
539
- "bytecode": "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",
540
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
541
- },
542
- {
543
- "name": "set_is_valid_storage",
544
- "functionType": "open",
545
- "isInternal": true,
546
- "parameters": [
547
- {
548
- "name": "message_hash",
549
- "type": {
550
- "kind": "field"
259
+ ]
551
260
  },
552
- "visibility": "private"
261
+ "visibility": "public"
553
262
  },
554
- {
555
- "name": "value",
556
- "type": {
557
- "kind": "boolean"
558
- },
559
- "visibility": "private"
560
- }
561
- ],
562
- "returnTypes": [
563
- {
564
- "kind": "struct",
565
- "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
566
- "fields": [
567
- {
568
- "name": "call_context",
569
- "type": {
570
- "kind": "struct",
571
- "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
572
- "fields": [
573
- {
574
- "name": "msg_sender",
575
- "type": {
576
- "kind": "struct",
577
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
578
- "fields": [
579
- {
580
- "name": "inner",
581
- "type": {
582
- "kind": "field"
583
- }
263
+ "return_witnesses": [
264
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
265
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
266
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
267
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
268
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
269
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
270
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
271
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210
272
+ ]
273
+ },
274
+ "bytecode": "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",
275
+ "debug_symbols": "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X+J0f4nT/SVO95c43V/idH+J0/0lTveXuNxf4nJ/icv9JS73l7jcX+Jyf4nL/SUu95e43F/icn+J2/0lbveXuN1f4nZ/idv9JW73l7jdX+J2f4nb/SVu95d43F/icX+Jx/0lHveXeNxf4nF/icf9JR73l3jcX+Jxf4mv+0t83V/i6/4SX/eX+Lq/xNf9Jb7uL/F1f4mv+0t8zV/i9Zi/xOsxf4nXY/4Sr8f8JV6P+Uu8HvOXeD3mL/F6zF/i9Zi/xOtxf4mX+0u83F/i5f4SL/eXeLm/xMv9JV7uL/Fyf4mX+0u83F/i7f4Sb/eXeLu/xNv9Jd7uL/F2f4m3+0u83V9i98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2wt98bWcm9sLffG1nJvbC33xtZyb2xt98bWdm9sbffG1nZvbO3H/CXe7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3t3tja7o2t7d7Y2u6Nre3e2Nruja3j3tg67o2t497YOu6NrfOYv8THvbF13Btbx72xddwbW8e9sXXcG1vH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"
276
+ },
277
+ {
278
+ "name": "is_valid",
279
+ "function_type": "Secret",
280
+ "is_internal": false,
281
+ "abi": {
282
+ "parameters": [
283
+ {
284
+ "name": "inputs",
285
+ "type": {
286
+ "kind": "struct",
287
+ "path": "authwit::aztec::abi::PrivateContextInputs",
288
+ "fields": [
289
+ {
290
+ "name": "call_context",
291
+ "type": {
292
+ "kind": "struct",
293
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
294
+ "fields": [
295
+ {
296
+ "name": "msg_sender",
297
+ "type": {
298
+ "kind": "struct",
299
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
300
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
584
301
  }
585
- ]
586
- }
587
- },
588
- {
589
- "name": "storage_contract_address",
590
- "type": {
591
- "kind": "struct",
592
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
593
- "fields": [
594
- {
595
- "name": "inner",
596
- "type": {
597
- "kind": "field"
598
- }
302
+ },
303
+ {
304
+ "name": "storage_contract_address",
305
+ "type": {
306
+ "kind": "struct",
307
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
308
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
599
309
  }
600
- ]
601
- }
602
- },
603
- {
604
- "name": "portal_contract_address",
605
- "type": {
606
- "kind": "struct",
607
- "path": "authwit::aztec::protocol_types::address::EthAddress",
608
- "fields": [
609
- {
610
- "name": "inner",
611
- "type": {
612
- "kind": "field"
613
- }
310
+ },
311
+ {
312
+ "name": "portal_contract_address",
313
+ "type": {
314
+ "kind": "struct",
315
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
316
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
614
317
  }
615
- ]
616
- }
617
- },
618
- {
619
- "name": "function_selector",
620
- "type": {
621
- "kind": "struct",
622
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
623
- "fields": [
624
- {
625
- "name": "inner",
626
- "type": {
627
- "kind": "integer",
628
- "sign": "unsigned",
629
- "width": 32
630
- }
318
+ },
319
+ {
320
+ "name": "function_selector",
321
+ "type": {
322
+ "kind": "struct",
323
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
324
+ "fields": [
325
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
326
+ ]
631
327
  }
632
- ]
633
- }
634
- },
635
- {
636
- "name": "is_delegate_call",
637
- "type": {
638
- "kind": "boolean"
639
- }
640
- },
641
- {
642
- "name": "is_static_call",
643
- "type": {
644
- "kind": "boolean"
645
- }
646
- },
647
- {
648
- "name": "is_contract_deployment",
649
- "type": {
650
- "kind": "boolean"
651
- }
652
- },
653
- {
654
- "name": "start_side_effect_counter",
655
- "type": {
656
- "kind": "integer",
657
- "sign": "unsigned",
658
- "width": 32
659
- }
328
+ },
329
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
330
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
331
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
332
+ {
333
+ "name": "start_side_effect_counter",
334
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
335
+ }
336
+ ]
337
+ }
338
+ },
339
+ {
340
+ "name": "block_header",
341
+ "type": {
342
+ "kind": "struct",
343
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
344
+ "fields": [
345
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
346
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
347
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
348
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
349
+ { "name": "archive_root", "type": { "kind": "field" } },
350
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
351
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
352
+ ]
353
+ }
354
+ },
355
+ {
356
+ "name": "contract_deployment_data",
357
+ "type": {
358
+ "kind": "struct",
359
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
360
+ "fields": [
361
+ {
362
+ "name": "deployer_public_key",
363
+ "type": {
364
+ "kind": "struct",
365
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
366
+ "fields": [
367
+ { "name": "x", "type": { "kind": "field" } },
368
+ { "name": "y", "type": { "kind": "field" } }
369
+ ]
370
+ }
371
+ },
372
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
373
+ { "name": "function_tree_root", "type": { "kind": "field" } },
374
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
375
+ {
376
+ "name": "portal_contract_address",
377
+ "type": {
378
+ "kind": "struct",
379
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
380
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
381
+ }
382
+ }
383
+ ]
384
+ }
385
+ },
386
+ {
387
+ "name": "private_global_variables",
388
+ "type": {
389
+ "kind": "struct",
390
+ "path": "authwit::aztec::abi::PrivateGlobalVariables",
391
+ "fields": [
392
+ { "name": "chain_id", "type": { "kind": "field" } },
393
+ { "name": "version", "type": { "kind": "field" } }
394
+ ]
660
395
  }
661
- ]
662
- }
663
- },
664
- {
665
- "name": "args_hash",
666
- "type": {
667
- "kind": "field"
668
- }
669
- },
670
- {
671
- "name": "return_values",
672
- "type": {
673
- "kind": "array",
674
- "length": 4,
675
- "type": {
676
- "kind": "field"
677
396
  }
678
- }
397
+ ]
679
398
  },
680
- {
681
- "name": "contract_storage_update_requests",
682
- "type": {
683
- "kind": "array",
684
- "length": 16,
399
+ "visibility": "private"
400
+ },
401
+ { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
402
+ ],
403
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 23 }], "message_hash": [{ "start": 23, "end": 24 }] },
404
+ "return_type": {
405
+ "abi_type": {
406
+ "kind": "struct",
407
+ "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
408
+ "fields": [
409
+ {
410
+ "name": "call_context",
685
411
  "type": {
686
412
  "kind": "struct",
687
- "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
413
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
688
414
  "fields": [
689
415
  {
690
- "name": "storage_slot",
416
+ "name": "msg_sender",
691
417
  "type": {
692
- "kind": "field"
418
+ "kind": "struct",
419
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
420
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
693
421
  }
694
422
  },
695
423
  {
696
- "name": "old_value",
424
+ "name": "storage_contract_address",
697
425
  "type": {
698
- "kind": "field"
426
+ "kind": "struct",
427
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
428
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
699
429
  }
700
430
  },
701
431
  {
702
- "name": "new_value",
432
+ "name": "portal_contract_address",
703
433
  "type": {
704
- "kind": "field"
434
+ "kind": "struct",
435
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
436
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
705
437
  }
706
- }
707
- ]
708
- }
709
- }
710
- },
711
- {
712
- "name": "contract_storage_reads",
713
- "type": {
714
- "kind": "array",
715
- "length": 16,
716
- "type": {
717
- "kind": "struct",
718
- "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
719
- "fields": [
438
+ },
720
439
  {
721
- "name": "storage_slot",
440
+ "name": "function_selector",
722
441
  "type": {
723
- "kind": "field"
442
+ "kind": "struct",
443
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
444
+ "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
724
445
  }
725
446
  },
447
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
448
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
449
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
726
450
  {
727
- "name": "current_value",
728
- "type": {
729
- "kind": "field"
730
- }
451
+ "name": "start_side_effect_counter",
452
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
731
453
  }
732
454
  ]
733
455
  }
734
- }
735
- },
736
- {
737
- "name": "public_call_stack_hashes",
738
- "type": {
739
- "kind": "array",
740
- "length": 4,
456
+ },
457
+ { "name": "args_hash", "type": { "kind": "field" } },
458
+ { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
459
+ {
460
+ "name": "read_requests",
461
+ "type": {
462
+ "kind": "array",
463
+ "length": 32,
464
+ "type": {
465
+ "kind": "struct",
466
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
467
+ "fields": [
468
+ { "name": "value", "type": { "kind": "field" } },
469
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
470
+ ]
471
+ }
472
+ }
473
+ },
474
+ {
475
+ "name": "new_commitments",
741
476
  "type": {
742
- "kind": "field"
477
+ "kind": "array",
478
+ "length": 16,
479
+ "type": {
480
+ "kind": "struct",
481
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
482
+ "fields": [
483
+ { "name": "value", "type": { "kind": "field" } },
484
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
485
+ ]
486
+ }
743
487
  }
744
- }
745
- },
746
- {
747
- "name": "new_commitments",
748
- "type": {
749
- "kind": "array",
750
- "length": 16,
488
+ },
489
+ {
490
+ "name": "new_nullifiers",
491
+ "type": {
492
+ "kind": "array",
493
+ "length": 16,
494
+ "type": {
495
+ "kind": "struct",
496
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
497
+ "fields": [
498
+ { "name": "value", "type": { "kind": "field" } },
499
+ { "name": "note_hash", "type": { "kind": "field" } },
500
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
501
+ ]
502
+ }
503
+ }
504
+ },
505
+ {
506
+ "name": "private_call_stack_hashes",
507
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
508
+ },
509
+ {
510
+ "name": "public_call_stack_hashes",
511
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
512
+ },
513
+ { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
514
+ { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
515
+ { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
516
+ {
517
+ "name": "unencrypted_logs_hash",
518
+ "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
519
+ },
520
+ { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
521
+ { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
522
+ {
523
+ "name": "block_header",
524
+ "type": {
525
+ "kind": "struct",
526
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
527
+ "fields": [
528
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
529
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
530
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
531
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
532
+ { "name": "archive_root", "type": { "kind": "field" } },
533
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
534
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
535
+ ]
536
+ }
537
+ },
538
+ {
539
+ "name": "contract_deployment_data",
751
540
  "type": {
752
541
  "kind": "struct",
753
- "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
542
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
754
543
  "fields": [
755
544
  {
756
- "name": "value",
545
+ "name": "deployer_public_key",
757
546
  "type": {
758
- "kind": "field"
547
+ "kind": "struct",
548
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
549
+ "fields": [
550
+ { "name": "x", "type": { "kind": "field" } },
551
+ { "name": "y", "type": { "kind": "field" } }
552
+ ]
759
553
  }
760
554
  },
555
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
556
+ { "name": "function_tree_root", "type": { "kind": "field" } },
557
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
761
558
  {
762
- "name": "counter",
559
+ "name": "portal_contract_address",
763
560
  "type": {
764
- "kind": "integer",
765
- "sign": "unsigned",
766
- "width": 32
561
+ "kind": "struct",
562
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
563
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
767
564
  }
768
565
  }
769
566
  ]
770
567
  }
771
- }
568
+ },
569
+ { "name": "chain_id", "type": { "kind": "field" } },
570
+ { "name": "version", "type": { "kind": "field" } }
571
+ ]
572
+ },
573
+ "visibility": "public"
574
+ },
575
+ "return_witnesses": [
576
+ 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
577
+ 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
578
+ 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
579
+ 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076,
580
+ 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094,
581
+ 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
582
+ 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
583
+ 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
584
+ 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
585
+ 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
586
+ 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193
587
+ ]
588
+ },
589
+ "bytecode": "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",
590
+ "debug_symbols": "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0pvecnrlviW96S0nWO5b0pvecorlviW96S0nWe5b0pvecprlviW96S0nWu5b0pvecqrlviW56W16rqXpuZam51qanmu5fyuvtyW56W16rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lqbnWpqea2l6rqXpuZam51qanmtpeq6l6bmWpudamp5raXqupem5lq7nWrqea+l6rqXruZa+yU1v13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0PdfS9VxL13MtXc+1dD3X0vVcS9dzLV3PtXQ919L1XEvXcy1dz7V0Pdcy9FzL0HMtQ8+1DD3XMja56R16rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmWoedahp5rGXquZei5lqHnWoaeaxl6rmXouZah51qGnmsZeq5l6LmW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"
591
+ },
592
+ {
593
+ "name": "constructor",
594
+ "function_type": "Secret",
595
+ "is_internal": false,
596
+ "abi": {
597
+ "parameters": [
598
+ {
599
+ "name": "inputs",
600
+ "type": {
601
+ "kind": "struct",
602
+ "path": "authwit::aztec::abi::PrivateContextInputs",
603
+ "fields": [
604
+ {
605
+ "name": "call_context",
606
+ "type": {
607
+ "kind": "struct",
608
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
609
+ "fields": [
610
+ {
611
+ "name": "msg_sender",
612
+ "type": {
613
+ "kind": "struct",
614
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
615
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
616
+ }
617
+ },
618
+ {
619
+ "name": "storage_contract_address",
620
+ "type": {
621
+ "kind": "struct",
622
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
623
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
624
+ }
625
+ },
626
+ {
627
+ "name": "portal_contract_address",
628
+ "type": {
629
+ "kind": "struct",
630
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
631
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
632
+ }
633
+ },
634
+ {
635
+ "name": "function_selector",
636
+ "type": {
637
+ "kind": "struct",
638
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
639
+ "fields": [
640
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
641
+ ]
642
+ }
643
+ },
644
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
645
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
646
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
647
+ {
648
+ "name": "start_side_effect_counter",
649
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
650
+ }
651
+ ]
652
+ }
653
+ },
654
+ {
655
+ "name": "block_header",
656
+ "type": {
657
+ "kind": "struct",
658
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
659
+ "fields": [
660
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
661
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
662
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
663
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
664
+ { "name": "archive_root", "type": { "kind": "field" } },
665
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
666
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
667
+ ]
668
+ }
669
+ },
670
+ {
671
+ "name": "contract_deployment_data",
672
+ "type": {
673
+ "kind": "struct",
674
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
675
+ "fields": [
676
+ {
677
+ "name": "deployer_public_key",
678
+ "type": {
679
+ "kind": "struct",
680
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
681
+ "fields": [
682
+ { "name": "x", "type": { "kind": "field" } },
683
+ { "name": "y", "type": { "kind": "field" } }
684
+ ]
685
+ }
686
+ },
687
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
688
+ { "name": "function_tree_root", "type": { "kind": "field" } },
689
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
690
+ {
691
+ "name": "portal_contract_address",
692
+ "type": {
693
+ "kind": "struct",
694
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
695
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
696
+ }
697
+ }
698
+ ]
699
+ }
700
+ },
701
+ {
702
+ "name": "private_global_variables",
703
+ "type": {
704
+ "kind": "struct",
705
+ "path": "authwit::aztec::abi::PrivateGlobalVariables",
706
+ "fields": [
707
+ { "name": "chain_id", "type": { "kind": "field" } },
708
+ { "name": "version", "type": { "kind": "field" } }
709
+ ]
710
+ }
711
+ }
712
+ ]
772
713
  },
773
- {
774
- "name": "new_nullifiers",
775
- "type": {
776
- "kind": "array",
777
- "length": 16,
714
+ "visibility": "private"
715
+ },
716
+ { "name": "signing_pub_key_x", "type": { "kind": "field" }, "visibility": "public" },
717
+ { "name": "signing_pub_key_y", "type": { "kind": "field" }, "visibility": "public" }
718
+ ],
719
+ "param_witnesses": {
720
+ "inputs": [{ "start": 0, "end": 23 }],
721
+ "signing_pub_key_x": [{ "start": 23, "end": 24 }],
722
+ "signing_pub_key_y": [{ "start": 24, "end": 25 }]
723
+ },
724
+ "return_type": {
725
+ "abi_type": {
726
+ "kind": "struct",
727
+ "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
728
+ "fields": [
729
+ {
730
+ "name": "call_context",
778
731
  "type": {
779
732
  "kind": "struct",
780
- "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
733
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
781
734
  "fields": [
782
735
  {
783
- "name": "value",
736
+ "name": "msg_sender",
737
+ "type": {
738
+ "kind": "struct",
739
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
740
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
741
+ }
742
+ },
743
+ {
744
+ "name": "storage_contract_address",
784
745
  "type": {
785
- "kind": "field"
746
+ "kind": "struct",
747
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
748
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
786
749
  }
787
750
  },
788
751
  {
789
- "name": "note_hash",
752
+ "name": "portal_contract_address",
790
753
  "type": {
791
- "kind": "field"
754
+ "kind": "struct",
755
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
756
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
792
757
  }
793
758
  },
794
759
  {
795
- "name": "counter",
760
+ "name": "function_selector",
796
761
  "type": {
797
- "kind": "integer",
798
- "sign": "unsigned",
799
- "width": 32
762
+ "kind": "struct",
763
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
764
+ "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
800
765
  }
766
+ },
767
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
768
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
769
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
770
+ {
771
+ "name": "start_side_effect_counter",
772
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
801
773
  }
802
774
  ]
803
775
  }
804
- }
805
- },
806
- {
807
- "name": "new_l2_to_l1_msgs",
808
- "type": {
809
- "kind": "array",
810
- "length": 2,
811
- "type": {
812
- "kind": "field"
813
- }
814
- }
815
- },
816
- {
817
- "name": "unencrypted_logs_hash",
818
- "type": {
819
- "kind": "array",
820
- "length": 2,
776
+ },
777
+ { "name": "args_hash", "type": { "kind": "field" } },
778
+ { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
779
+ {
780
+ "name": "read_requests",
821
781
  "type": {
822
- "kind": "field"
782
+ "kind": "array",
783
+ "length": 32,
784
+ "type": {
785
+ "kind": "struct",
786
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
787
+ "fields": [
788
+ { "name": "value", "type": { "kind": "field" } },
789
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
790
+ ]
791
+ }
823
792
  }
824
- }
793
+ },
794
+ {
795
+ "name": "new_commitments",
796
+ "type": {
797
+ "kind": "array",
798
+ "length": 16,
799
+ "type": {
800
+ "kind": "struct",
801
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
802
+ "fields": [
803
+ { "name": "value", "type": { "kind": "field" } },
804
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
805
+ ]
806
+ }
807
+ }
808
+ },
809
+ {
810
+ "name": "new_nullifiers",
811
+ "type": {
812
+ "kind": "array",
813
+ "length": 16,
814
+ "type": {
815
+ "kind": "struct",
816
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
817
+ "fields": [
818
+ { "name": "value", "type": { "kind": "field" } },
819
+ { "name": "note_hash", "type": { "kind": "field" } },
820
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
821
+ ]
822
+ }
823
+ }
824
+ },
825
+ {
826
+ "name": "private_call_stack_hashes",
827
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
828
+ },
829
+ {
830
+ "name": "public_call_stack_hashes",
831
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
832
+ },
833
+ { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
834
+ { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
835
+ { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
836
+ {
837
+ "name": "unencrypted_logs_hash",
838
+ "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
839
+ },
840
+ { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
841
+ { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
842
+ {
843
+ "name": "block_header",
844
+ "type": {
845
+ "kind": "struct",
846
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
847
+ "fields": [
848
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
849
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
850
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
851
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
852
+ { "name": "archive_root", "type": { "kind": "field" } },
853
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
854
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
855
+ ]
856
+ }
857
+ },
858
+ {
859
+ "name": "contract_deployment_data",
860
+ "type": {
861
+ "kind": "struct",
862
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
863
+ "fields": [
864
+ {
865
+ "name": "deployer_public_key",
866
+ "type": {
867
+ "kind": "struct",
868
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
869
+ "fields": [
870
+ { "name": "x", "type": { "kind": "field" } },
871
+ { "name": "y", "type": { "kind": "field" } }
872
+ ]
873
+ }
874
+ },
875
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
876
+ { "name": "function_tree_root", "type": { "kind": "field" } },
877
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
878
+ {
879
+ "name": "portal_contract_address",
880
+ "type": {
881
+ "kind": "struct",
882
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
883
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
884
+ }
885
+ }
886
+ ]
887
+ }
888
+ },
889
+ { "name": "chain_id", "type": { "kind": "field" } },
890
+ { "name": "version", "type": { "kind": "field" } }
891
+ ]
892
+ },
893
+ "visibility": "public"
894
+ },
895
+ "return_witnesses": [
896
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
897
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
898
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
899
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
900
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
901
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
902
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
903
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
904
+ 228, 229
905
+ ]
906
+ },
907
+ "bytecode": "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",
908
+ "debug_symbols": "5ZbbSiNBEIbfpa9DqGNXVV5l8SLsuiBIXDa5C3l3R2N3j7FxcJRo9CoE/iq++evU+3R793u9u7nbbNNqnzStfu3T9t968/Bvu1v/36UVLNL15s/we1ikvze312lF4IfFCx0B6JOUgKyqBXtiFiliAaxiBOuoEcJKbkTgeKa/WqR8qeB2PnAxL2Jlfy+498Axew2yzJP4RBU/pOFTDwgJKk9QE+sc+rhoeoQPwEeofYwygW9k+CQ2isaT/REHvxYOfQSO1sli4CmcXGislda4I821DbK0rCY9hKgfycOcj4BjVs/wF3ZFiysG8LorTFFMGWfNsyyRM1viViyJcfX5EUY/EcZPYfKZYUIrzGie+83iVjZFDqDT4beLJfczkw9TEHU80F9nZ5WSmdVkYhsR1dQDx9TuUiiLTrUxx9GV+KmuGNalqDZ2pdODbhWZ2/ch8Zy1SPBjLbdiuY/u0LERCb+RK4yVQ3xKzbmIRUcPMzie0GX/YaFRWjJjs1K5BMmcoO6JlFoB1dbLTseduuzeA85laQvm043jS58REzNi+u/4qSB8axDhsn8WJZd+l/CTyj4E+ZygrhFai5RHzzYcpuzqcLgH"
909
+ },
910
+ {
911
+ "name": "compute_note_hash_and_nullifier",
912
+ "function_type": "Unconstrained",
913
+ "is_internal": false,
914
+ "abi": {
915
+ "parameters": [
916
+ {
917
+ "name": "contract_address",
918
+ "type": {
919
+ "kind": "struct",
920
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
921
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
825
922
  },
826
- {
827
- "name": "unencrypted_log_preimages_length",
828
- "type": {
829
- "kind": "field"
830
- }
923
+ "visibility": "private"
924
+ },
925
+ { "name": "nonce", "type": { "kind": "field" }, "visibility": "private" },
926
+ { "name": "storage_slot", "type": { "kind": "field" }, "visibility": "private" },
927
+ {
928
+ "name": "serialized_note",
929
+ "type": { "kind": "array", "length": 3, "type": { "kind": "field" } },
930
+ "visibility": "private"
931
+ }
932
+ ],
933
+ "param_witnesses": {
934
+ "contract_address": [{ "start": 0, "end": 1 }],
935
+ "nonce": [{ "start": 1, "end": 2 }],
936
+ "serialized_note": [{ "start": 3, "end": 6 }],
937
+ "storage_slot": [{ "start": 2, "end": 3 }]
938
+ },
939
+ "return_type": {
940
+ "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } },
941
+ "visibility": "public"
942
+ },
943
+ "return_witnesses": [6, 7, 8, 9]
944
+ },
945
+ "bytecode": "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",
946
+ "debug_symbols": "7d3NbiTLcQbQd5m1YHRmREZk6lUMLwT/AAYM2bC0E/TubgGXnBFM37FGPeRpdu8GgypWRCb7q6xin6o/ffmP//zn3/3x3//z93/48ts/fbn8w1hffvuPf/ryh//63e//8h9/+OPv/vuPX36b84zffPnX3//L9Z9x2X/+zZd/+/f/+Ncvv53Xf//Tb/6yW/3Ybv1ju+0f2+28tdvll30uf7XDb/7XdrNz7l+2vf475+v29dbmo/tl48s3P/qXUubFKWU4pUynlHBKSaeU5ZRSTintlLKdUpy0DSdtw0nbcNI2nLQNJ23DSdtw0jactA0nbcNJ23TSNp20TSdt00nbdNI2nbRNJ23TSdt00jadtF1O2i4nbZeTtstJ2+Wk7XLSdjlpu5y0XU7aLidty0nbctK2nLQtJ23LSdty0ractC0nbctJ23LStp20bSdt20nbdtK2nbRtJ23bSdt20radtG0nbbeTtttJ2+2k7XbSdjtpu5203U7abidtt5O220nb46TtcdL2OGl7nLQ9TtoeJ22Pk7bHSdvjpO1x0nZcnLgdFydvx8UJ3HFxEndcnMgdFydzx8UJ3XFxUndcnNgdFyh3B5S7A8rdAeXugHJ3QLk7oNwdUO4OKHcHlLuQLxsQMBuQMBsQMRuQMRsQMhuQMhsQMxuQMxsQNBuQNBsQNRuQNRsQNhuQNhsQNxuQNxsQOBuQOBsQORuQORsQOhuQOhsQOxuQOxsQPBuQPBsQPRuQPRsQPhuQPhsQPxuQPxsQQBuQQBsQQRuQQRsQQhuQQhsQQxuQQxsQRBuQRBsQRRuQRRsQRhuQRhsQRxuQRxsQSBuQSBsQSRuQSRsQShuQShsQSxuQSxsQTBuQTBsQTRuQTRsQThuQThsQTxuQTxsQUBuQUBsQURuQURsQUhuQUhsQUxuQUxsQVBuQVBsQVRuQVRsQVhuQVhsQVxuQV5uQV5uQV5uQV5uQV5sXJ3cn5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NUm5NWm9D406YVo1BvRoNyV3okmvRRNeiua9Fo06b1o0ovRIK82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia82Ia8WkFcLyKsF5NUC8mpxcXI3IK8WkFcLyKsF5NUC8moBebWAvFpAXi0grxaQVwvIqwXk1QLyagF5tYC8WkBeLSCvFpBXC8irBeTVAvJqAXm1gLxaQF4tIK8WkFcLyKsF5NUC8moBebWAvFpAXi0grxaQVwvIqwXk1QLyagF5tYC8WkBeLSCvFpBXC8irBeTVAvJqAXm1gLxaQF4tIK8WkFcLyKsF5NUC8moBebWAvFpAXi0grxaQVwvIqwXk1QLyagF5tYC8WkBeLSCvFpBXC8irBeTVAvJqAXm1gLxaQF4tIK8WkFcLyKsF5NUC8moBebWAvFpAXi0grxaQVwvIqwXk1QLyagF5tYC8WkBeLSCvFpBXC8irBeTVAvJqAXm1gLxaQl4tIa+WkFdLyKvlxcndhLxaQl4tIa+WkFdLyKsl5NUS8moJebWEvFpCXi0hr5aQV0vIqyXk1RLyagl5tYS8WkJeLSGvlpBXS8irJeTVEvJqCXm1hLxaQl4tIa+WkFdLyKsl5NUS8moJebWEvFpCXi0hr5aQV0vIqyXk1RLyagl5tYS8WkJeLSGvlpBXS8irJeTVEvJqCXm1hLxaQl4tIa+WkFdLyKsl5NUS8moJebWEvFpCXi0hr5aQV0vIqyXk1RLyagl5tYS8WkJeLSGvlpBXS8irJeTVEvJqCXm1hLxaQl4tIa+WkFdLyKsl5NUS8moJebWEvFpCXi0hr5aQV0vIqyXk1RLyagl5tYS8WkJeLSGvlpBXS8irJeTVEvJqC/JqC/JqC/JqC/Jq6+Lk7oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK82oK8WkFerSCvVpBXK8ir1cXJ3YK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1QryagV5tYK8WkFerSCvVpBXK8irFeTVCvJqBXm1grxaQV6tIK9WkFcryKsV5NUK8moFebWCvFpBXq0gr1aQVyvIqxXk1Qryag15tYa8WkNerSGv1hcndxvyag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIqzXk1Rryag15tYa8WkNerSGv1pBXa8irNeTVGvJqDXm1hrxaQ16tIa/WkFdryKs15NUa8moNebWGvFpDXq0hr9aQV2vIq23Iq23Iq23Iq23Iq+2Lk7sb8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8mob8moH8moH8moH8moH8mrn4uTugbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbzagbza+bu9Wq2vtfT5+2ppqJYN1XKcWv5ur3bLWgZUy4RqCaiWhGpZUC1Q7jaUuw3lbkO5u6Hc3VDubih3N5S7G8rdDeXuhnJ3Q7m7odzdUO4eKHcPlLsHyt0D5e6BcvdAuXug3D1Q7h4od4+Tu+NycYL3WoyTvNdinOi9FuNk77UYJ3yvxTjpey3Gid9rMU7+XotxAvhajJTAQ0rgISXwkBJ4SAk8pAQeUgIPKYGHlMBDSuAhJfCUEnhKCTylBJ5SAk8pgaeUwFNK4Ckl8JQSeEoJHFICh5TAISVwSAkcUgKHlMAhJXBICRxSAoeUwCklcEoJnFICp5TAKSVwSgmcUgKnlMApJXBKCbykBF5SAi8pgZeUwEtK4CUl8JISeEkJvKQEXlICl5TAJSVwSQlcUgKXlMAlJTBE3q7FSAkMobdrMVICQ+ztWoyUwBB8uxYjJTBE367FSAkM4bdrMVICQ/ztWoyUwBCAuxYjJTBE4K7FSAkMIbhrMVICQwzuWoyUwBCEuxYjJTBE4a7FSAkMYbhrMVICQxzuWoyUwBCIuxYjJTBE4q7FQAk8JBM3JBM3JBM3JBN3/VuyVAyUwEMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMycUMy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"
947
+ },
948
+ {
949
+ "name": "entrypoint",
950
+ "function_type": "Secret",
951
+ "is_internal": false,
952
+ "abi": {
953
+ "parameters": [
954
+ {
955
+ "name": "inputs",
956
+ "type": {
957
+ "kind": "struct",
958
+ "path": "authwit::aztec::abi::PrivateContextInputs",
959
+ "fields": [
960
+ {
961
+ "name": "call_context",
962
+ "type": {
963
+ "kind": "struct",
964
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
965
+ "fields": [
966
+ {
967
+ "name": "msg_sender",
968
+ "type": {
969
+ "kind": "struct",
970
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
971
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
972
+ }
973
+ },
974
+ {
975
+ "name": "storage_contract_address",
976
+ "type": {
977
+ "kind": "struct",
978
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
979
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
980
+ }
981
+ },
982
+ {
983
+ "name": "portal_contract_address",
984
+ "type": {
985
+ "kind": "struct",
986
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
987
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
988
+ }
989
+ },
990
+ {
991
+ "name": "function_selector",
992
+ "type": {
993
+ "kind": "struct",
994
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
995
+ "fields": [
996
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
997
+ ]
998
+ }
999
+ },
1000
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1001
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
1002
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1003
+ {
1004
+ "name": "start_side_effect_counter",
1005
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1006
+ }
1007
+ ]
1008
+ }
1009
+ },
1010
+ {
1011
+ "name": "block_header",
1012
+ "type": {
1013
+ "kind": "struct",
1014
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1015
+ "fields": [
1016
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1017
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1018
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
1019
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1020
+ { "name": "archive_root", "type": { "kind": "field" } },
1021
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
1022
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
1023
+ ]
1024
+ }
1025
+ },
1026
+ {
1027
+ "name": "contract_deployment_data",
1028
+ "type": {
1029
+ "kind": "struct",
1030
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1031
+ "fields": [
1032
+ {
1033
+ "name": "deployer_public_key",
1034
+ "type": {
1035
+ "kind": "struct",
1036
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1037
+ "fields": [
1038
+ { "name": "x", "type": { "kind": "field" } },
1039
+ { "name": "y", "type": { "kind": "field" } }
1040
+ ]
1041
+ }
1042
+ },
1043
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
1044
+ { "name": "function_tree_root", "type": { "kind": "field" } },
1045
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
1046
+ {
1047
+ "name": "portal_contract_address",
1048
+ "type": {
1049
+ "kind": "struct",
1050
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
1051
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1052
+ }
1053
+ }
1054
+ ]
1055
+ }
1056
+ },
1057
+ {
1058
+ "name": "private_global_variables",
1059
+ "type": {
1060
+ "kind": "struct",
1061
+ "path": "authwit::aztec::abi::PrivateGlobalVariables",
1062
+ "fields": [
1063
+ { "name": "chain_id", "type": { "kind": "field" } },
1064
+ { "name": "version", "type": { "kind": "field" } }
1065
+ ]
1066
+ }
1067
+ }
1068
+ ]
831
1069
  },
832
- {
833
- "name": "block_header",
834
- "type": {
835
- "kind": "struct",
836
- "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
837
- "fields": [
838
- {
839
- "name": "note_hash_tree_root",
840
- "type": {
841
- "kind": "field"
842
- }
843
- },
844
- {
845
- "name": "nullifier_tree_root",
846
- "type": {
847
- "kind": "field"
848
- }
849
- },
850
- {
851
- "name": "contract_tree_root",
852
- "type": {
853
- "kind": "field"
854
- }
855
- },
856
- {
857
- "name": "l1_to_l2_message_tree_root",
858
- "type": {
859
- "kind": "field"
860
- }
861
- },
862
- {
863
- "name": "archive_root",
1070
+ "visibility": "private"
1071
+ },
1072
+ {
1073
+ "name": "payload",
1074
+ "type": {
1075
+ "kind": "struct",
1076
+ "path": "authwit::entrypoint::EntrypointPayload",
1077
+ "fields": [
1078
+ {
1079
+ "name": "function_calls",
1080
+ "type": {
1081
+ "kind": "array",
1082
+ "length": 4,
864
1083
  "type": {
865
- "kind": "field"
1084
+ "kind": "struct",
1085
+ "path": "authwit::entrypoint::FunctionCall",
1086
+ "fields": [
1087
+ { "name": "args_hash", "type": { "kind": "field" } },
1088
+ {
1089
+ "name": "function_selector",
1090
+ "type": {
1091
+ "kind": "struct",
1092
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
1093
+ "fields": [
1094
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1095
+ ]
1096
+ }
1097
+ },
1098
+ {
1099
+ "name": "target_address",
1100
+ "type": {
1101
+ "kind": "struct",
1102
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1103
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1104
+ }
1105
+ },
1106
+ { "name": "is_public", "type": { "kind": "boolean" } }
1107
+ ]
866
1108
  }
867
- },
868
- {
869
- "name": "public_data_tree_root",
870
- "type": {
871
- "kind": "field"
1109
+ }
1110
+ },
1111
+ { "name": "nonce", "type": { "kind": "field" } }
1112
+ ]
1113
+ },
1114
+ "visibility": "public"
1115
+ }
1116
+ ],
1117
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 23 }], "payload": [{ "start": 23, "end": 40 }] },
1118
+ "return_type": {
1119
+ "abi_type": {
1120
+ "kind": "struct",
1121
+ "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs",
1122
+ "fields": [
1123
+ {
1124
+ "name": "call_context",
1125
+ "type": {
1126
+ "kind": "struct",
1127
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
1128
+ "fields": [
1129
+ {
1130
+ "name": "msg_sender",
1131
+ "type": {
1132
+ "kind": "struct",
1133
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1134
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1135
+ }
1136
+ },
1137
+ {
1138
+ "name": "storage_contract_address",
1139
+ "type": {
1140
+ "kind": "struct",
1141
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1142
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1143
+ }
1144
+ },
1145
+ {
1146
+ "name": "portal_contract_address",
1147
+ "type": {
1148
+ "kind": "struct",
1149
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
1150
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1151
+ }
1152
+ },
1153
+ {
1154
+ "name": "function_selector",
1155
+ "type": {
1156
+ "kind": "struct",
1157
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
1158
+ "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
1159
+ }
1160
+ },
1161
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1162
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
1163
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1164
+ {
1165
+ "name": "start_side_effect_counter",
1166
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
872
1167
  }
873
- },
874
- {
875
- "name": "global_variables_hash",
876
- "type": {
877
- "kind": "field"
1168
+ ]
1169
+ }
1170
+ },
1171
+ { "name": "args_hash", "type": { "kind": "field" } },
1172
+ { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
1173
+ {
1174
+ "name": "read_requests",
1175
+ "type": {
1176
+ "kind": "array",
1177
+ "length": 32,
1178
+ "type": {
1179
+ "kind": "struct",
1180
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
1181
+ "fields": [
1182
+ { "name": "value", "type": { "kind": "field" } },
1183
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1184
+ ]
1185
+ }
1186
+ }
1187
+ },
1188
+ {
1189
+ "name": "new_commitments",
1190
+ "type": {
1191
+ "kind": "array",
1192
+ "length": 16,
1193
+ "type": {
1194
+ "kind": "struct",
1195
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
1196
+ "fields": [
1197
+ { "name": "value", "type": { "kind": "field" } },
1198
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1199
+ ]
1200
+ }
1201
+ }
1202
+ },
1203
+ {
1204
+ "name": "new_nullifiers",
1205
+ "type": {
1206
+ "kind": "array",
1207
+ "length": 16,
1208
+ "type": {
1209
+ "kind": "struct",
1210
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
1211
+ "fields": [
1212
+ { "name": "value", "type": { "kind": "field" } },
1213
+ { "name": "note_hash", "type": { "kind": "field" } },
1214
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1215
+ ]
1216
+ }
1217
+ }
1218
+ },
1219
+ {
1220
+ "name": "private_call_stack_hashes",
1221
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1222
+ },
1223
+ {
1224
+ "name": "public_call_stack_hashes",
1225
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1226
+ },
1227
+ { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1228
+ { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } },
1229
+ { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1230
+ {
1231
+ "name": "unencrypted_logs_hash",
1232
+ "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1233
+ },
1234
+ { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } },
1235
+ { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1236
+ {
1237
+ "name": "block_header",
1238
+ "type": {
1239
+ "kind": "struct",
1240
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1241
+ "fields": [
1242
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1243
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1244
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
1245
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1246
+ { "name": "archive_root", "type": { "kind": "field" } },
1247
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
1248
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
1249
+ ]
1250
+ }
1251
+ },
1252
+ {
1253
+ "name": "contract_deployment_data",
1254
+ "type": {
1255
+ "kind": "struct",
1256
+ "path": "authwit::aztec::protocol_types::contrakt::deployment_data::ContractDeploymentData",
1257
+ "fields": [
1258
+ {
1259
+ "name": "deployer_public_key",
1260
+ "type": {
1261
+ "kind": "struct",
1262
+ "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint",
1263
+ "fields": [
1264
+ { "name": "x", "type": { "kind": "field" } },
1265
+ { "name": "y", "type": { "kind": "field" } }
1266
+ ]
1267
+ }
1268
+ },
1269
+ { "name": "constructor_vk_hash", "type": { "kind": "field" } },
1270
+ { "name": "function_tree_root", "type": { "kind": "field" } },
1271
+ { "name": "contract_address_salt", "type": { "kind": "field" } },
1272
+ {
1273
+ "name": "portal_contract_address",
1274
+ "type": {
1275
+ "kind": "struct",
1276
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
1277
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1278
+ }
878
1279
  }
1280
+ ]
1281
+ }
1282
+ },
1283
+ { "name": "chain_id", "type": { "kind": "field" } },
1284
+ { "name": "version", "type": { "kind": "field" } }
1285
+ ]
1286
+ },
1287
+ "visibility": "public"
1288
+ },
1289
+ "return_witnesses": [
1290
+ 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954,
1291
+ 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972,
1292
+ 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990,
1293
+ 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
1294
+ 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026,
1295
+ 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044,
1296
+ 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062,
1297
+ 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080,
1298
+ 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098,
1299
+ 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116,
1300
+ 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125
1301
+ ]
1302
+ },
1303
+ "bytecode": "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",
1304
+ "debug_symbols": "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djsORdKOQ5G041Ak7TgUyTBJiKQdhyJpx6FI2nEoknYciqQdByI57DgUSTsORdKOQ5G041AkwyQhknYciqQdhyJpx6FI2nEoknYciORqx6FI2nEoknYciqQdhyIZJgmRtONQJO04FEk7DkXSjkORtONAJDc7DkXSjkORtONQJO04FMlQJ7mV7SC510WXpLzjvAxJecd5GZLyjvMyJOUd52VIyjvOq5Dc5R3nZUjKO87LkJR3nJchKe84L0MyTBIiacehSNpxKJJ2HIqkHYciacdhSMZix6FI2nEoknYciqQdhyIZJgmRtONQJO04FEk7DkXSjkORtONAJIsdhyJpx6FI2nEoknYcimSYJETSjkORtONQJO04FEk7DkXSjgORrHYciqQdhyJpx6FI2nEokmGSEEk7DkXSjkORtONQJO04FEk7DkSy2XEoknYciqQdhyJpx6FIhklCJO04FEk7DkXSjkORtONQJO04EMmw41Ak7TgUSTsORdKOQ5EMk4RI2nEoknYciqQdhyJpx6FI2nEgkt2OQ5G041Ak7TgUSTsORTJMEiJpx6FI2nEoknYciqQdhyJpx4FIDjsORdKOQ5G041Ak7TgUyTBJiKQdhyJpx6FI2nEoknYciqQdByK52nEoknYciqQdhyJpx6FIhklCJO04FEk7DkXSjkORtONQJO04EMnNjkORtONQJO04FEk7DkUyTBIiacehSNpxKJJ2HIqkHYciaceBSO52HIqkHYciacehSNpxKJJhkhBJOw5F0o5DkbTjUCTtOBRJOw5Dsi92HIqkHYciacehSNpxKJJhkhBJOw5F0o5DkbTjUCTtOBRJOw5EsthxKJJ2HIqkHYciacehSIZJQiTtOBRJOw5F0o5DkbTjUCTtOBDJasehSNpxKJJ2HIqkHYciGSYJkbTjUCTtOBRJOw5F0o5DkbTjQCSbHYciacehSNpxKJJ2HIpkmCRE0o5DkbTjUCTtOBRJOw5F0o4DkQw7DkXSjkORtONQJO04FMkwSYikHYciacehSNpxKJJ2HIqkHQci2e04FEk7DkXSjkORtONQJMMkIZJ2HIqkHYciacehSNpxKJJ2HIjkkHecvcflyT9efn0WydpavyBpvTwgKe84L0NS3nFehqS847wMyTBJiKS847wMSXnHeRmS8o7zMiTlHedlSMo7zquQXO04FEk7DkXS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JXtuley5VbLnVsmeWyVlWZLHleRxNXlcSx4XyeN68riRPG5NHrclj0uul5JcLyW5XkpyvZTkeinJ9VKS66Uk10tJrpeSXC8luV5qcr3U5HqpyfVSk+ulJtdLTa6XmlwvNbleanK9JHdmS3JrtiT3Zktyc7Ykd2dLcnu2JPdnS3KDtiR3aEtyi7Yk92hLcpO2JHdpS3KbtiT3aUtyo7Ykd2pLcqu2JPdqS3KztiR3a0tyu7Yk92tLcsO2JHdsS3LLtiT3bEty07Ykd21Lctu2JPdtS3LjtiR3bkty67Yk925LcvO2JHdvS3L7tiT3b0tyA7ckd3BLcgu3JPdwS3ITtyR3cUtyG7ck93FLciO3JHdyS3IrtyT3cktyM7ckd3NLcju3JPdzS3JDtyR3dEtyS7ck93RLclO3JHd1S3JbtyT3dUtyY7ckd3ZLcmu3JPd2S3JztyR3d0tye7ck93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/tyb3d2tyf7cm93drcn+3Jvd3a3J/t+7ZSdbkKGtyf7cl93fb39nfXR8dF8njevK4+XrZx+1x93PLY1wGqMd6vTlK3Y6XWL/+Jbavf4n9y1/i7+xFP/ob/p296IfH1eRxybVdkmu7JNf239mLfnjcmjxuSx63546ryfVSk+ulJtdLTa6XmlwvNbleanK91OR6qcn1UpPrpSXXS/xsjbgctyaP25LH7bnj/sYe2uPjSvK4mjyuJY+L5HE9eVxyvfTkeunJ9dKT62Uk18tIrpeRXC8juV7+4kI5H3sz34/72OW+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"
1305
+ },
1306
+ {
1307
+ "name": "is_valid_public",
1308
+ "function_type": "Open",
1309
+ "is_internal": false,
1310
+ "abi": {
1311
+ "parameters": [
1312
+ {
1313
+ "name": "inputs",
1314
+ "type": {
1315
+ "kind": "struct",
1316
+ "path": "authwit::aztec::abi::PublicContextInputs",
1317
+ "fields": [
1318
+ {
1319
+ "name": "call_context",
1320
+ "type": {
1321
+ "kind": "struct",
1322
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
1323
+ "fields": [
1324
+ {
1325
+ "name": "msg_sender",
1326
+ "type": {
1327
+ "kind": "struct",
1328
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1329
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1330
+ }
1331
+ },
1332
+ {
1333
+ "name": "storage_contract_address",
1334
+ "type": {
1335
+ "kind": "struct",
1336
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1337
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1338
+ }
1339
+ },
1340
+ {
1341
+ "name": "portal_contract_address",
1342
+ "type": {
1343
+ "kind": "struct",
1344
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
1345
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1346
+ }
1347
+ },
1348
+ {
1349
+ "name": "function_selector",
1350
+ "type": {
1351
+ "kind": "struct",
1352
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
1353
+ "fields": [
1354
+ { "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1355
+ ]
1356
+ }
1357
+ },
1358
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1359
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
1360
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1361
+ {
1362
+ "name": "start_side_effect_counter",
1363
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
1364
+ }
1365
+ ]
879
1366
  }
880
- ]
881
- }
1367
+ },
1368
+ {
1369
+ "name": "block_header",
1370
+ "type": {
1371
+ "kind": "struct",
1372
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1373
+ "fields": [
1374
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1375
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1376
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
1377
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1378
+ { "name": "archive_root", "type": { "kind": "field" } },
1379
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
1380
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
1381
+ ]
1382
+ }
1383
+ },
1384
+ {
1385
+ "name": "public_global_variables",
1386
+ "type": {
1387
+ "kind": "struct",
1388
+ "path": "authwit::aztec::abi::PublicGlobalVariables",
1389
+ "fields": [
1390
+ { "name": "chain_id", "type": { "kind": "field" } },
1391
+ { "name": "version", "type": { "kind": "field" } },
1392
+ { "name": "block_number", "type": { "kind": "field" } },
1393
+ { "name": "timestamp", "type": { "kind": "field" } }
1394
+ ]
1395
+ }
1396
+ }
1397
+ ]
882
1398
  },
883
- {
884
- "name": "prover_address",
885
- "type": {
886
- "kind": "struct",
887
- "path": "authwit::aztec::protocol_types::address::AztecAddress",
888
- "fields": [
889
- {
890
- "name": "inner",
891
- "type": {
892
- "kind": "field"
1399
+ "visibility": "private"
1400
+ },
1401
+ { "name": "message_hash", "type": { "kind": "field" }, "visibility": "private" }
1402
+ ],
1403
+ "param_witnesses": { "inputs": [{ "start": 0, "end": 19 }], "message_hash": [{ "start": 19, "end": 20 }] },
1404
+ "return_type": {
1405
+ "abi_type": {
1406
+ "kind": "struct",
1407
+ "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
1408
+ "fields": [
1409
+ {
1410
+ "name": "call_context",
1411
+ "type": {
1412
+ "kind": "struct",
1413
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
1414
+ "fields": [
1415
+ {
1416
+ "name": "msg_sender",
1417
+ "type": {
1418
+ "kind": "struct",
1419
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1420
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1421
+ }
1422
+ },
1423
+ {
1424
+ "name": "storage_contract_address",
1425
+ "type": {
1426
+ "kind": "struct",
1427
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1428
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1429
+ }
1430
+ },
1431
+ {
1432
+ "name": "portal_contract_address",
1433
+ "type": {
1434
+ "kind": "struct",
1435
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
1436
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1437
+ }
1438
+ },
1439
+ {
1440
+ "name": "function_selector",
1441
+ "type": {
1442
+ "kind": "struct",
1443
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
1444
+ "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }]
1445
+ }
1446
+ },
1447
+ { "name": "is_delegate_call", "type": { "kind": "boolean" } },
1448
+ { "name": "is_static_call", "type": { "kind": "boolean" } },
1449
+ { "name": "is_contract_deployment", "type": { "kind": "boolean" } },
1450
+ {
1451
+ "name": "start_side_effect_counter",
1452
+ "type": { "kind": "integer", "sign": "unsigned", "width": 32 }
893
1453
  }
1454
+ ]
1455
+ }
1456
+ },
1457
+ { "name": "args_hash", "type": { "kind": "field" } },
1458
+ { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } },
1459
+ {
1460
+ "name": "contract_storage_update_requests",
1461
+ "type": {
1462
+ "kind": "array",
1463
+ "length": 16,
1464
+ "type": {
1465
+ "kind": "struct",
1466
+ "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
1467
+ "fields": [
1468
+ { "name": "storage_slot", "type": { "kind": "field" } },
1469
+ { "name": "old_value", "type": { "kind": "field" } },
1470
+ { "name": "new_value", "type": { "kind": "field" } }
1471
+ ]
1472
+ }
1473
+ }
1474
+ },
1475
+ {
1476
+ "name": "contract_storage_reads",
1477
+ "type": {
1478
+ "kind": "array",
1479
+ "length": 16,
1480
+ "type": {
1481
+ "kind": "struct",
1482
+ "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
1483
+ "fields": [
1484
+ { "name": "storage_slot", "type": { "kind": "field" } },
1485
+ { "name": "current_value", "type": { "kind": "field" } }
1486
+ ]
1487
+ }
1488
+ }
1489
+ },
1490
+ {
1491
+ "name": "public_call_stack_hashes",
1492
+ "type": { "kind": "array", "length": 4, "type": { "kind": "field" } }
1493
+ },
1494
+ {
1495
+ "name": "new_commitments",
1496
+ "type": {
1497
+ "kind": "array",
1498
+ "length": 16,
1499
+ "type": {
1500
+ "kind": "struct",
1501
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
1502
+ "fields": [
1503
+ { "name": "value", "type": { "kind": "field" } },
1504
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1505
+ ]
1506
+ }
1507
+ }
1508
+ },
1509
+ {
1510
+ "name": "new_nullifiers",
1511
+ "type": {
1512
+ "kind": "array",
1513
+ "length": 16,
1514
+ "type": {
1515
+ "kind": "struct",
1516
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
1517
+ "fields": [
1518
+ { "name": "value", "type": { "kind": "field" } },
1519
+ { "name": "note_hash", "type": { "kind": "field" } },
1520
+ { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }
1521
+ ]
894
1522
  }
895
- ]
1523
+ }
1524
+ },
1525
+ { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } },
1526
+ {
1527
+ "name": "unencrypted_logs_hash",
1528
+ "type": { "kind": "array", "length": 2, "type": { "kind": "field" } }
1529
+ },
1530
+ { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } },
1531
+ {
1532
+ "name": "block_header",
1533
+ "type": {
1534
+ "kind": "struct",
1535
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
1536
+ "fields": [
1537
+ { "name": "note_hash_tree_root", "type": { "kind": "field" } },
1538
+ { "name": "nullifier_tree_root", "type": { "kind": "field" } },
1539
+ { "name": "contract_tree_root", "type": { "kind": "field" } },
1540
+ { "name": "l1_to_l2_message_tree_root", "type": { "kind": "field" } },
1541
+ { "name": "archive_root", "type": { "kind": "field" } },
1542
+ { "name": "public_data_tree_root", "type": { "kind": "field" } },
1543
+ { "name": "global_variables_hash", "type": { "kind": "field" } }
1544
+ ]
1545
+ }
1546
+ },
1547
+ {
1548
+ "name": "prover_address",
1549
+ "type": {
1550
+ "kind": "struct",
1551
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
1552
+ "fields": [{ "name": "inner", "type": { "kind": "field" } }]
1553
+ }
896
1554
  }
897
- }
898
- ]
899
- }
900
- ],
901
- "bytecode": "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",
902
- "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
1555
+ ]
1556
+ },
1557
+ "visibility": "public"
1558
+ },
1559
+ "return_witnesses": [
1560
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1561
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1562
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
1563
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
1564
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
1565
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
1566
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1567
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209
1568
+ ]
1569
+ },
1570
+ "bytecode": "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",
1571
+ "debug_symbols": "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nLhkcuKKyYkrJieumJy4YnLi6kE0gYvJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGJy4orJiSsmJ66YnLhicuKKyYkrJieumJy4YnLiismJKyYnrpicuGZy4prJiWsmJ66ZnLh+EE3gZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJieumZy4ZnLimsmJayYnrpmcuGZy4prJiWsmJ66ZnLhmcuKayYlrJidumJy4YXLihsmJGyYnbh5EE3iYnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy4obJiRsmJ26YnLhhcuKGyYkbJidumJy4YXLihsmJGyYnbpicuGFy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"
903
1572
  }
904
1573
  ],
905
1574
  "events": [],
906
- "debug": {
907
- "debugSymbols": [
908
- "eJzt3d+uI8dxx/F32WsjmPrfo1cJciEkDmDAkIPId4be3RQi8hxDvZrdsHn6e2b6yoJBLqtqlr+p4fLD+ceXv/7tP3/8+1/+9tPPX374x5ft3yS+/PDv//jy8//8+NOv/8fPf//xf//+5YftT1/+/NN/3f73lz99+e+//PXPX35Quf337x6n2Sp+e+ztv9v+eHxW5+FSdX/w9u6Pbr/8x59+LSU5pRSnlMYpZceUohunFOGUopxSjFOKc0rhpK1y0lY5aauctFVO2honbY2TtsZJW+OkrXHS1jhpa5y0NU7aGidtjZO2zklb56Stc9LWOWnrnLR1Tto6J22dk7bOSVvnpG1w0jY4aRuctA1O2gYnbYOTtsFJ2+CkbXDSNjhpm5y0TU7aJidtk5O2yUnb5KRtctI2OWmbnLRNTtoWJ22Lk7bFSdvipG1x0rY4aVuctC1O2hYnbYuTto2Tto2Tto2Tto2Tto2Tto2Tto2Tto2Tto2Tto2TtjsnbXdO2u6ctN05abtz0nbnpO3OSdudk7Y7J213TtrKxolb2Th5KxsncGXjJK5snMiVjZO5snFCVzZO6srGiV3ZQLkroNwVUO4KKHcFlLsCyl2SLSPhMpIuI/EykC8TEDATkDATEDETkDETEDITkDITEDMTkDMTEDQTkDQTEDUTkDUTEDYTkDYTEDcTkDcTEDgTkDgTEDkTkDkTEDoTkDoTEDsTkDsTEDwTkDwTED0TkD0TED4TkD4TED8TkD8TEEATkEATEEETkEETEEITkEITEEMTkEMTEEQTkEQTEEUTkEUTEEYTkEYTEEcTkEcTEEgTkEgTEEkTkEkTEEoTkEoTEEsTkEsTEEwTkEwTEE0TkE0TEE4TkE4TEE8TkE8TEFATkFATEFETkFETEFITkFITEFMTkFMTEFQTkFQTEFUTkFUTEFYTkFYTEFcTkFdTkFdTkFdTkFdTkFfTjZO7CvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqCvJqBvJqBvJqBvJqBvJqtnFy10BezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUBezUFezUFezUFezUFezTdO7jrIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqznIqwXIqwXIqwXIqwXIq8XGyd0AebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUAebUA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OCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCGZOCWZOCWZOCWZOCWZON1ACawkE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE6ckE2ckE2ckE2ckE2ckE2cbKIGNZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKMZOKcZOKcZOKcZOKcZOJ8AyWwk0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0yck0xckExckExckExckExcbKAEDpKJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJC5KJS5KJS5KJS5KJS5KJyw2UwEkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUkycUUycUUycUUycUUycbWBErhIJq5IJq5IJq5I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",
909
- "eJzVltFuwjAMRf8lzwjFdhzH/Mq0B7QxCQmxafCG+PeV0aRdZxENOkSfKNJ1dXpj5/rgNu8vy/36fbtzi4Njt3g6uN3Hcnv6t9svP/du4WdutX1tfo8z97berNwCoXn+pUPvuZWiRynqAJaYQsji4KGIwbOhBq+S3w3gSX/on2cuThVc7gceJGUxU7oVPFngEFMpkkgVfFCRgk/c4aMhTkqtVmNPehW7Tpgd/O3w6EPXN6kCL0C5HwW465so3zjwWDg4Bo7GjIMhVHAwa0WwSMWSskIrjdC9VcicVe3NKvaArcmu9ww9risRiysCl10h1FZK/bdeN0bhzpYkyVoN1LfkBGPm7p1g0hDGzNJ/hFEuMKqVZhGi0i0RhsNvhukkyEdI0z+Rgxct4wHpMjsqlNtIg9Ruo+QzB6Tq3cU+jz9z94V6ntERcnqargiUjGPpu2L0YJKCTJ0bgFclBY6yXUzScsmWJ+8HjYijLDmP4krAsmwBVNQU8ycG7jH7c4TO7cWCNbdkhM7KZrzbIjN6a0VmRIZyAsxdL6czXpqbeUAxn0OAOLxx0ty8iSs15j1VqbH3+FqR2YiXihDmdiyGmPu92TUHJ3sqMn2oFZlGcDmk2FvbtAm+4/ELxMrILw==",
910
- "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pB2HImnHoUjacSCS8o9vOA5JOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5EUv7BOMchacehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHYciaceBSMo/uuo4JO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04DMkk/5y/45C041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G040Ak5Z+behySdhyKpB2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyIpPxzqI9D0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o4DkSx2HIqkHYciacehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHQciWe04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkSy2XEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciORox6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEgkpMdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx4FIznYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdByK52HEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYchmQe7DgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORDLZcSiSdhyKpB2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyIZLbjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBDJYsehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHYciacehSNpxIJLVjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONAJJsdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx4FIjnYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdByI52XEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciORsx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEgkosdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx2FIlsGOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G040Akkx2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyKpB2HImnHgUhmOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o4DkSx2HIqkHYciacehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHQciWe04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkSy2XEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciORox6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEgkpMdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx4FIznYciqQdhyJpx6FI2nEokvKOk8e2kiy/8KmSlHecw5CUd5zDkJR3nMOQlHecw5CUd5yjkFzkHecwJOUd5zAk5R3nMCTlHecwJO04FEk7DkXSjkORtONQJO04FEk7DkOyDnYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdByKZ7DgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORDLbcSiSdhyKpB2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyIZLHjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBDJasehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHYciacehSNpxIJLNjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONAJEc7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjgORnOw4FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkRytuNQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04EMnFjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtOMwJNtgx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEgksmOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G040Aksx2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyKpB2HImnHgUgW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hyJpx6FI2nEoknYciqQdhyJpx4FILnYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyFZBzsORdKOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORdKOA5FMdhyKpB2HImnHoUjacSiSdhyKpB2HImnHoUjacSiSdhyKpB0HIpntOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5EsthxKJJ2HIqkHYciacehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIhkteNQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04EMlmx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEgkqMdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciqQdhyIp7zh5bCvJ8gufKMlJ3nEOQ1LecQ5DUt5xDkNS3nEOQ1LecQ5DUt5xDkNS3nEOQ1LecQ5DUt5xDkPSjgORnO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkRyseNQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04DMk22HEoknYciqQdhyJpx6FI2nEoknYciqQdhyJpx6FI2nEoknYciGSy41Ak7TgUSTsORdKOQ5G041Ak7TgUSTsORdKOQ5G041Ak7TgQyWzHoUjacSiSdhyKpB2HImnHoUjacSiSdhyKpB2HImnHoUjacSCSxY5DkbTjUCTtOBRJOw5F0o5DkbTjUCTtOBRJOw5F0o5DkbTjQCSrHYciacehSNpxKJJ2HIqkHYciacehSNpxKJJ2HIqkHYciaceBSDY7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjgORHO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkRysuNQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04EMnZjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjkORtONAJBc7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjsOQHAc7DkXSjkORtONQJO04FEk7DkXSjkORtONQJO04FEk7DkXSjgORTHYciqQdhyJpx6FI2nEoknYc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E+s690vvH952nu8+GK59Yl3nfuk8330wPfnEus790nm++2A87ol1nful83z3wfxTvK7zfPfBVM4T6zr3S+f5bu48382d57u583w3d57v5s7z3dx5vps7z3dz5/lu7jzfzZ3nu7nzfDd3nu/mzvPd3Hm+mzvPd3Pn+W7uPN/Nnee7D8asnljXuV86z3dz5/lu7jzfzZ3nu7nzfDd3nu/mzvPd3Hm+mzvPd3Pn+W7uPN/Nnee7ufN8N3ee7+bO893ceb6bO893c+f5bu48382d57u583w3d57v5s7z3dx5vps7z3dz5/lu7jzfzZ3nu7nzfDc/c747ba17Yr9srntiv2yue2K/bK57Yr9srntiv2yue2K/bKwrz5zvbq57Yr9srntiv2yu69sv5Znz3c11ffulPHO+u7mub7+UZ853N9d17pdnznc313Xul2fOdzfXde6XZ853N9d17pdnznc318X7ZRlv191P44/j5bYA43R9zGm+/oh4a/3jHxHvwn/6I544YP6nP+KJM7Tff8Rl3au/w8u6V38xl3Wv0v5a98QZ2va6+DO/vS7+zG+viz/z2+viz/z2uvgzv72uc788cYa2va5zvzxxhra57okztO11nfvliTO07XWd+2X7DC1/uPbXulzn67105mFdt33fvXjd9i3s4nXbd4OL123fWC1et32PsnDd9hnaE+u275wVr9u+VVG8bvsGQfG6zv2yfYb2xLrO/bJ9hvbEus79sn2GFq/bPkN7Yl3nftk+Q3tiXed+2T5De2Jd537ZPkN7Yl3nftk+Q3tiXed+2T5De2Jd537ZPkN7Yl3nftk+Q3tiXed+2T5De2Jd537ZPkN7Yl3nftk+Q3tiXed+2T5De2Jd53558Nz7eF3nfnnwjPd4Xed+efA883hd336pD55THa/r2y/1wfOE43V9+6Vun6E9sa5vv9QHD16N1/Xtl/rgcaDxus798uAhlfG6zv3y4NGJ8brO/fLggX7xus798uAxc/G6zv3y4OFn8brO/fLgkVzxus798uBBUfG6zv3y4PFF8brO/fLgoTrxus798uBRL/G6zv3y4AEk8brO/fLgsRjxus798uBhDfG6zv3y4BEC8brO/fLgxvbxus798uB26/G6zv3y4Cbg8brO/bJ9vvvEus79sn2++8S6zv2yfb77xLrO/bJ9vvvEus79sn2++8S6zv3Seb5bO893a+f5bu08362d57u183y3dp7v1s7z3dp5vls7z3dr5/lu7TzfrZ3nu7XzfLd2nu/WzvPd2nm+WzvPd2vn+W7tPN+tnee7tfN8t3ae79bO893aeb5bO893a+f5bu08362d57u183y3dp7v1s7z3dp5vls7z3dr5/lu7TzfrZ3nu7XzfLd2nu/WzvPd2nm+WzvPd2vn+W7tPN+tnee7tfN8t3We77bO893Web7bOs93W+f5bus8322d57ut83y3dZ7vts7z3dZ5vts6z3db5/lu6zzfbZ3nu63zfLd1nu+2zvPd1nm+2zrPd1vn+W7rPN9tnee7rfN8t3We77bO893Web7bOs93W+f5bus8322d57ut83y3dZ7vts7z3dZ5vts6z3db5/lu6zzfbZ3nu63zfLd1nu+2zvPd1nm+2zrPd1vn+W7rPN9tnee7rfN8t3We77bO893Web7bOs93W+f5bntwvvvRl17WfbQqW+u290u8bnu/xOu298vtupy21m3vl3jd9n6J123vlzZd181b+R6c78brtvdLvG57v0zD5fmkHztn3lq3vV/iddu/v3jd9u8vXPdgRrzOl89D2f48PJgRj9dt//18vG777+fjdZufv3jdg3O+qa7XiakNW+u291m87sE+C9c92Gc368a8tW57LmQo6zN9h3Hrc/tgNjletz0XMlwf6fpg3fZcSLjuwWzyMK/r0jBurdve1/G67X2d6riu236f2/s6Xre9r1NZruu2fu8PZpPjddv75XbdtLU/H8wmx+u290u8bnu/lOv+LLXdrxsfzCbH67b3S7xue7/kZbmu+22fbT0PObiIjQ8GmeEfsr0T4R+yvW3hH7K9x+Efsv2BgH/I9qcH/iHbHzX2hzyYAYd/yPaHGP4hP/GJfzCKDv+Qn/jEPxhyh3/IT3ziH4zPwz/kJz7xD0bo2R/yYIge/iE/8Yl/cP9X+If8xCf+wZ1l4R/yE5/4B/eshX/IT3ziH9yd9pUfkobL9HlK1x8xtvVH/PNPSfgj/vnOSnm+/Ii8bP2If76vwh/xz3dV+CP++Z4Kf8Q/ryHhj3i1gnyte3BbkHjdqzv4su7VS/dl3fbVuKzHjKUO5XuEOZXLRyandnXxnNL6U7Y/NPRP2f7c0D9l+6Pz2k8Z11PcdHOtvP0p258e+qdsf4Don/LgiOOVn5Lz+lNy3fwpD26sQv+UB8cn8E/Z/jQ//imXda9+mi/rXv18Xta9+om7rHv1M3RZ9+qn4rLu1X1+Wffqzv1a9+DGx/G6V3fXZV3nfnlw4+N4Xed+eXDj43hd5355cOPjeF3nfnlw4+Nw3YMvteJ1nfvlwZda8boHX2ql9cuGGjVceWqXF+dpvp6I/7r6vfbqy3va3ov7vqftfb7ve9r+DO37nrY/n/u+p+3P/r7vafu6sut7enDz7cfv6bLuwRfx4boHX8SH6169Zl3WvXpduax78NmPjkcefMEdr3vwGQrXPdjn4boHezFa9+AL7nhd3x9ujA++4I7X9f3hxvjgC+54Xed+efAFd7yuc788+II7Xte3X6YHX3DH6/r2y/TgC+54Xd9+mYa+/TI9+GY5Xte3X6YH3//G6/r2y/TgW9pw3YMvXuN1nfvlwdej8brO/fLgS8x4Xed+efBVY7yuc788+EIwXte5Xx58bRev69wvD75ci9d17pcHX4HF6zr3y4MvquJ1nfvlwcMV43Wd++XB11fxus798uDhivG6zv3y4IuteF3nfnnwFVS8rnO/PPiyKF7XuV8efAMUr+vcLw++AYrXde6XB9/pxOs698uD713idZ375cF3I/G6zv3y4PuLeF3nfnnwHUO8rnO/PPiOIV7XuV8efMcQr+vcLw++Y4jXde6XB98xxOs698uD7xjidZ375cF3DPG6zv3y4DuGeF3nfnnwHUO8rnO/dA7OTJ2DM1Pn4MzUOTgzdQ7OTI/O6sN1nfvl0Zl3uK5zvzw6O47WPTrfDdd17pdH57vhus798uh8N1zXuV86z3enzvPdqfN8d+o83506z3enzvPdqfN8d+o83506z3enzvPdqfN8d+o83506z3enzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdufN8d+483507z3fnzvPdpfOcduk8p12AOy4Fs/8LcL+l8EcAU/PRjwCm5qMf8c/vuxL9COA+S6lcRjlSnbZ+BHA3iVLWHzFv/Yh/fseV8Ef88/utBDdJWID7K4U/4o/fE2MB7q0U/og/fk+MBbivUvgjgE938COAeyqFPwL4dEc/Avh0Rz/iz3+6gXsphT/iz3+6gfsohT/iz3+6H3wpgv6IP//pJu4EFf2IP//pfvAFDvoj/vyn+8/fz2r58/ezWv78/ayWP38/q+XP389qefl+Vq//iJdvfdXxI/78p/vlG2p1/Ig//+l+8CUe+iM2Pxfhqs2tHq7a3L0f9rYqUBs2HoqwbH/39sS6zX32xLrNzfPEus0d8cS6zV/zE+s2r8xPrNu83D6xbnuvxOu2d0u8bnu/tHS52Xmayta67e/enli3vV/iddv7JV63vV/iddv75dt1dfjP27+96fKZzel64/i05K9F27+6YNH27y1YtH0kFK7a/p19t2pq6T9vH6vMw+UxCMvNYcyc1lWb4MNVmx/TcNXmhzRctflL/m7VR9vygMbYLvtpWm6eCTGuqzZphKs2aYSrNmmEqzZpfLcqzUPr2Byfy17eHZ/LXt4en8te3h+fy17eIHnIpWOHfC57eYt8Lnt5j3wue3mTfC57eZfkpesS8rns5V3yuezlXfK57OVd8rns5V1S0jR27JLPZS/vks9lL++Sz2Uv75LPZS/vkpoefnC+I/m57OVd8rns5V3yuezlXfK57OVdUkurHbvkc9nLu+Rz2cu75HPZy7vkc9mLu+R//+//HzxWRqo=",
911
- "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kBvOg9xwHuSG8yA3nAe5neBBXnvgbUbbSP/ti91mYpda3//tLXpx9X57cd3axxf/870+/9vgvPf6/O+Z897r87/Bznuvz/9uPO+9Pv9b97z3+vzv8/Pe6/PvFE57ryd4vee91+ff3Zz3Xl/ovukEy/m89/pC900nmNnnvdcXum86wSY/772+0H3TCQb8ae/1BLf+vPf6QvdNJ5wHcN57faH7phPOMDjvvb7QfdMJ5y6c915f6L7phLMiznuvr3PftJ9wvsV57/V17pv2E87kOO+9vs590355nfum/YQTSs57r69z37SfcKrKee/1de6b9hNOgjntvZ5wxsx57/WF7ptOOBfnvPf6QvdNJ5zlc957faH7phPOHzrvvb7QfdMJZyad915f6L7phHOeznuvL3TfdMLZVOe91xe6bzrhPK3z3usL3TedcAbYee/1he6bTji37Lz3+kL3TSectXbee32h+6YTzoc7772+0H3TCWfanfdeX+i+6YRz+Fptt/e6X779t/85o+ff3ew27jMq4/sZPf8exPb9NiO3mvzbXut9JnW8v7p6NJHRb6Xml2L3F+/9t/f6/HuQr3uv1zd4q/3rv/bNe/3+xf0uivde//VjOeGYQcrHMm6vHaV897E8/87mCz8Wq3Z7sV8uP/5Yru/xvoxK//AZluDFbdz+4e3DlMOXXqd5vzatfPzsLPwmGPutmZpdPvQuu7TfrtDz78d+j1do8/sV2pOXFn//snj/LPamXZ7n30JiLs/Y7//yt6vinx/M8+83fycfzPNvTn8nH8zz7xspH0yze6drH3tS1L6Gldv3+X758UvP/Nr6mW65ERfztG+4n+oPiq+7kvc5Xz/FnqzLcvs02tg+e31OOPqWcn3GuB8Ndmntx5+5eb9jlFK3w5bliT32hCOG/7jy5zfkE85x/vkv+2nd+3X/THroYpZ2W5dWL0mf3f32me/986vthf9c+x3wlxOOR//j8jxweV73b/rfxeX5qf5K98sdL/mWXJ6t3r8kttre90W2/bcP5qf6o/fAD+aEnxEol3vFl2BzF/czAjvuZwR23M8I7LifEdhxPyOw435GYMf9jMCO+xmBHfczAjvuZwR23M8I7Cf8jEA2I1zPPuFI/mxGuJ59wvH22YxwPfuEo+KzGeF69gnHrmczwvXsE44wz2aE69knHAeezQjXs084Wjub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",
912
- "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AfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwAfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwCfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwBfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdwDfdw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57Z6+duBz2318vcNn9vq5W8wPrZVbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzdAW3Axtwc3QFtwMbcHN0BbcDG3BzSAX3DyNr33rkqtonsbXvnXJpTFP42vfuq196y7tW3dp37pL+9Zd2rfu0r51l/atu7Rv3eO1XtfG1751jxd6XRl/Hm/zuja+9K07j/d4XRtf+tadN+lbdx6v77o2vvStO48Xd10bX/rWnccruy6Nf7yv69r42rfu8aaua+Nr37rHO7quja996x7v0ro2vvate7zz6tr42reutptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupprabamq7qaa2m2pqu6mmtptqarupTNtNZeRuKr/d7o/1sX6Nv/O81V9P2/X90BjfO+W+oI/cKfddfuROua/937fTFXs75X6HcOROud9MHLjTfUvL19PfnuwxVt0fmePnY+N7su9LVA579t33TIc9++5bmsOeffcdx1HPvi/wOOzZd+/rw55994487Nl376XDnn33Ljjs2U99re6rFw579lNfq/vigsOe/dTX6j72f9izn/pa3YfmD3v2U1+r+8j5Yc9+6mt1H9g+7NlPfa3u486HPfupr9V9WPiwZz/1tbqP2h727Ce+Vn28l33ebt/vxG/z5//D+dh7w9z+lWX71/75tv0W32ne2uvhad6aY4eneWvuHZ7mrTl5eJq35iqYpvP7//vG3E3z1hw+PM1bc/voNPt46sfSvHUvHJ7myln8PM2Fs3jN9Z0md1/h+2jnx9JcN2+2B39XY7dfrvBf01w3b15Jc928eSHNPpj3sTTXzZtX0lw3b15Jc928eSXNdfPmlTTXvfd7Jc117/1eSUM1i/eBsI+loZrF+7jWx9JQzeJ9mOpjaahm8T7q9LE0VLN4H0T6WBqqWbyPCX0sDdUs3od4PpaGahbvIzYfS0M1i/cBmI+loZrF+3jKx9JQzeJ9eORjaahm8T7a8bE0VLN4H7z4WBqqWbyPRXwsDdUs3ocWPpaGahbvIwUfS8M0ix98GfXH0jDN4gdfFf2xNEyz+MEXOX8sDdMsfvA1yx9LwzSLH3wJ8sfSUM3i/a8o/lgaqlm8/wXCH0tDNYv3v973Y2moZvF73Mjhaahm8XtcyuFpqGbxe9zL4WmoZvF7XM3haahm8XvczuFpqGbxe1zQ4WmoZvF73NHhaahm8Xtc0+FpqGbxe9zU4WmoZvF7XNbhaahm8Xvc1+FpqGbxe1zZ4WmoZvF73Nrhaahm8YVs2StpqGbxhWzZK2moZvGFbNkraahm8YVs2StpqGbxhWzZK2moZvGFbNkraahm8YVs2StpqGbx/pf6fSwN1Sym4u4efIPep9JQcXcPvt/uY2moZjEVd/fgy+Q+loZqFlNxdw++ue1jaahmMRV39+Br0j6WhmoWU3F3D76T7GNpqGYxFXf34AvAPpaGahZTcXcPvm3rU2mouLsH34X1sTRUs5iKu3vwxVMfS0M1i6m4uwff8vSxNFSzmIq7e/CVSh9LQzWLqbi7B99f9LE0VLOYirt78GVBH0tDNYupuLsH35hyUpr8+eBfvurj1zRXvsKfp7nwt3jG19dTbP9qu2ku/C1+Ic2Fv8UvpLnwHcXzNFcSSy+kue4dRY/4mjc9cnw/eK3vMNeNmxfCXDhtzP3rwX4bf3dO//jocVv19dxj3H79cptfzvXC9x8npL/w/coJ6S+8GU5If+FNckL6C2+ef5L+nuZKIuqFNBf+3+MLaS58b/lCGo5p/5WGY3p/peGYxl9pLpyu7vadxn03zYXT8oU0F06/F9Jc+L77eZoriagX0lw4i19Ic+EsfiHNhbP4hTQXzuIX0lw4i19IQzWLrySiXkhDNYuvJKKep7mSiHohDdUsvpKIeiEN1Sy+koh6IQ3VLL6SiHohDdUsvpKIeiEN1Sy+koh6IQ3VLL6SiHohDdUsvpKIeiEN1Sy+koh6IQ3VLL6S+hnz61sh59j/+9eV1M8LaS6cNy+kuXDevJDmwnnzQpoL580LaS6cN3+XZveTEVdSPy+kufC93wtpLnzv9zzNldTPC2munMX985MRY/eeupL6eSHNlfPmeZor583zNFfOm+dprpw3z9NcOW+eprmSbJnxPW9m7d6aV5ItL6S5cN68kObC934vpLnwvd8LaS6cxS+kufRzqE/TXPo51KdpLv0c6tM0l34O9VmaK8mWF9JQzeIryZYX0lDN4ivJlhfSXDqLn32a+kqy5YU0VEzAlWTLC2mYmAC/8hulXkhz6Sx+mubSWfw0zaWz+GmaS2fx0zRMs9ip+Cyn4rOcis9yKj7Lqfgsv/IbpV5IQzWLryS0XkhDNYuvJKheSEM1i68knF5IQzWLr/xGqedpruSnXkhDNYuv5KdeSEM1i6/kp15IQzX9riSWnqfZp3Lm7bv3+eVDRMu+V+2+Ep+u2n3FPF21+5v9dNXub+DTVbu39uNVf/vb/wM7aeoi",
913
- "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"
914
- ],
915
- "fileMap": {
916
- "16": {
917
- "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",
918
- "path": "std/field.nr"
919
- },
920
- "17": {
921
- "source": "struct GrumpkinScalar {\n low: Field,\n high: Field,\n}\n\nimpl GrumpkinScalar {\n pub fn new(low: Field, high: Field) -> Self {\n // TODO: check that the low and high value fit within the grumpkin modulus\n GrumpkinScalar { low, high }\n }\n}\n\nglobal GRUMPKIN_SCALAR_SERIALIZED_LEN: Field = 2;\n\npub fn deserialize_grumpkin_scalar(fields: [Field; GRUMPKIN_SCALAR_SERIALIZED_LEN]) -> GrumpkinScalar {\n GrumpkinScalar { low: fields[0], high: fields[1] }\n}\n\npub fn serialize_grumpkin_scalar(scalar: GrumpkinScalar) -> [Field; GRUMPKIN_SCALAR_SERIALIZED_LEN] {\n [scalar.low, scalar.high]\n}\n",
922
- "path": "std/grumpkin_scalar.nr"
923
- },
924
- "18": {
925
- "source": "use crate::grumpkin_scalar::GrumpkinScalar;\nuse crate::scalar_mul::fixed_base_embedded_curve;\n\npub fn grumpkin_fixed_base(scalar: GrumpkinScalar) -> [Field; 2] {\n // TODO: this should use both the low and high limbs to do the scalar multiplication\n fixed_base_embedded_curve(scalar.low, scalar.high)\n}\n",
926
- "path": "std/grumpkin_scalar_mul.nr"
927
- },
928
- "28": {
929
- "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",
930
- "path": "std/option.nr"
931
- },
932
- "40": {
933
- "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log);\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n",
934
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/log.nr"
935
- },
936
- "41": {
937
- "source": "use dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\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};\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 block_header: BlockHeader,\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 block_header: BlockHeader,\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",
938
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
939
- },
940
- "42": {
941
- "source": "use dep::std::option::Option;\nuse dep::protocol_types::{\n address::AztecAddress,\n};\n\nuse crate::context::{PrivateContext, Context};\nuse crate::note::{\n lifecycle::create_note,\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::singleton::compute_singleton_initialization_nullifier;\n\n// docs:start:struct\nstruct ImmutableSingleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> ImmutableSingleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n ImmutableSingleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note, \n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(\n context,\n self.storage_slot,\n note,\n self.note_interface,\n broadcast,\n );\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note(self) -> Note {\n let context = self.context.unwrap();\n let storage_slot = self.storage_slot;\n get_note(context, storage_slot, self.note_interface)\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
942
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr"
943
- },
944
- "43": {
945
- "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 writes 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",
946
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr"
947
- },
948
- "44": {
949
- "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",
950
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/map.nr"
951
- },
952
- "45": {
953
- "source": "use dep::std::option::Option;\n\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n },\n hash::pedersen_hash,\n};\n\nuse crate::context::{PrivateContext, PublicContext, Context};\nuse crate::note::{\n lifecycle::{create_note, destroy_note},\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::{\n get_secret_key::get_secret_key,\n notes::check_nullifier_exists,\n};\n\npub fn compute_singleton_initialization_nullifier(storage_slot: Field, owner: Option<AztecAddress>) -> Field {\n if owner.is_some() {\n let secret = get_secret_key(owner.unwrap_unchecked());\n pedersen_hash(\n [storage_slot, secret.low, secret.high],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n } else {\n pedersen_hash([storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER)\n }\n}\n\n// docs:start:struct\nstruct Singleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> Singleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Singleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note,\n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(context, self.storage_slot, note, self.note_interface, broadcast);\n }\n // docs:end:initialize\n\n // docs:start:replace\n pub fn replace(\n self,\n new_note: &mut Note,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n let prev_note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify previous note.\n destroy_note(context, prev_note, self.note_interface);\n\n // Add replacement note.\n create_note(context, self.storage_slot, new_note, self.note_interface, broadcast);\n }\n // docs:end:replace\n\n // docs:start:get_note\n pub fn get_note(self, broadcast: bool) -> Note {\n let context = self.context.unwrap();\n let mut note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify current note to make sure it's reading the latest note.\n destroy_note(context, note, self.note_interface);\n\n // Add the same note again.\n // Because a nonce is added to every note in the kernel, its nullifier will be different.\n create_note(context, self.storage_slot, &mut note, self.note_interface, broadcast);\n\n note\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
954
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr"
955
- },
956
- "51": {
957
- "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",
958
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr"
959
- },
960
- "53": {
961
- "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",
962
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/vec.nr"
963
- },
964
- "65": {
965
- "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",
966
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/utils.nr"
967
- },
968
- "67": {
969
- "source": "use 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};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\nuse crate::abi::{\n PrivateContextInputs,\n PublicContextInputs,\n};\n\n// l1 to l2 messaging\nuse crate::messaging::process_l1_to_l2_message;\n\nuse crate::types::{\n vec::BoundedVec,\n};\n\nuse crate::utils::Reader;\n\nuse crate::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};\n\nuse dep::std::option::Option;\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 // 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",
970
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/context.nr"
971
- },
972
- "72": {
973
- "source": "use crate::abi::PublicContextInputs;\nuse crate::context::{\n PrivateContext,\n PublicContext,\n};\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_inner_note_hash,\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>,\n broadcast: bool\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n let serialize = note_interface.serialize;\n let serialized_note = serialize(*note);\n assert(notify_created_note(storage_slot, serialized_note, inner_note_hash) == 0);\n\n context.push_new_note_hash(inner_note_hash);\n\n if broadcast {\n let broadcast = note_interface.broadcast;\n broadcast(context, storage_slot, *note);\n }\n}\n\npub fn create_note_hash_from_public<Note, N>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n context.push_new_note_hash(inner_note_hash);\n}\n\npub fn destroy_note<Note, N>(\n context: &mut PrivateContext,\n note: Note,\n note_interface: NoteInterface<Note, N>\n) {\n let mut nullifier = 0;\n let mut nullified_commitment: Field = 0;\n let compute_nullifier = note_interface.compute_nullifier;\n nullifier = compute_nullifier(note);\n\n // We also need the note commitment corresponding to the \"nullifier\"\n let get_header = note_interface.get_header;\n let header = get_header(note);\n // `nullified_commitment` is used to inform the kernel which pending commitment\n // the nullifier corresponds to so they can be matched and both squashed/deleted.\n // nonzero nonce implies \"persistable\" nullifier (nullifies a persistent/in-tree\n // commitment) in which case `nullified_commitment` is not used since the kernel\n // just siloes and forwards the nullifier to its output.\n if (header.is_transient) {\n // TODO(1718): Can we reuse the note commitment computed in `compute_nullifier`?\n nullified_commitment = compute_inner_note_hash(note_interface, note);\n }\n assert(notify_nullified_note(nullifier, nullified_commitment) == 0);\n\n context.push_new_nullifier(nullifier, nullified_commitment)\n}\n",
974
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr"
975
- },
976
- "73": {
977
- "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__OUTER_NULLIFIER,\n hash::pedersen_hash,\n};\nuse crate::{\n note::{\n note_hash::{compute_inner_hash, compute_siloed_hash, compute_unique_hash},\n note_header::NoteHeader,\n note_interface::NoteInterface,\n },\n utils::arr_copy_slice,\n};\n\npub fn compute_inner_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n\n compute_inner_hash(header.storage_slot, note_hash)\n}\n\npub fn compute_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let inner_note_hash = compute_inner_note_hash(note_interface, note_with_header);\n\n compute_siloed_hash(header.contract_address, inner_note_hash)\n}\n\npub fn compute_unique_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let siloed_note_hash = compute_siloed_note_hash(note_interface, note_with_header);\n\n compute_unique_hash(header.nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note_with_header);\n\n let input = [header.contract_address.to_field(), inner_nullifier];\n pedersen_hash(input, GENERATOR_INDEX__OUTER_NULLIFIER)\n}\n\npub fn compute_note_hash_for_read_or_nullify<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386)\n if (header.is_transient) {\n // If a note is transient, we just read the inner_note_hash (kernel will silo by contract address).\n compute_inner_note_hash(note_interface, note_with_header)\n } else if (header.nonce == 0) {\n // If not transient and nonce is zero, that means we are reading a public note.\n compute_siloed_note_hash(note_interface, note_with_header)\n } else {\n // When nonce is nonzero, that means we are reading a settled note (from tree) created in a\n // previous TX. So we need the unique_siloed_note_hash which has already been hashed with\n // contract address and then nonce. This hash will match the existing leaf in the private\n // data tree, so the kernel can just perform a membership check directly on this hash/leaf.\n compute_unique_siloed_note_hash(note_interface, note_with_header)\n }\n}\n\npub fn compute_note_hash_and_nullifier<Note, N, S>(\n note_interface: NoteInterface<Note, N>,\n note_header: NoteHeader,\n serialized_note: [Field; S]\n) -> [Field; 4] {\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0));\n set_header(&mut note, note_header);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n let inner_note_hash = compute_inner_hash(note_header.storage_slot, note_hash);\n\n let siloed_note_hash = compute_siloed_hash(note_header.contract_address, inner_note_hash);\n\n let unique_siloed_note_hash = compute_unique_hash(note_header.nonce, siloed_note_hash);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note);\n\n [inner_note_hash, siloed_note_hash, unique_siloed_note_hash, inner_nullifier]\n}\n",
978
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/utils.nr"
979
- },
980
- "75": {
981
- "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n },\n hash::pedersen_hash,\n};\n\npub fn compute_inner_hash(storage_slot: Field, note_hash: Field) -> Field {\n // TODO(#1205) Do we need a generator index here?\n pedersen_hash([storage_slot, note_hash], 0)\n}\n\npub fn compute_siloed_hash(contract_address: AztecAddress, inner_note_hash: Field) -> Field {\n let inputs = [contract_address.to_field(), inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__SILOED_COMMITMENT)\n}\n\npub fn compute_unique_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_COMMITMENT)\n}\n",
982
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_hash.nr"
983
- },
984
- "78": {
985
- "source": "use dep::std::option::Option;\nuse dep::protocol_types::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n GET_NOTE_ORACLE_RETURN_LENGTH,\n GET_NOTES_ORACLE_RETURN_LENGTH,\n MAX_NOTES_PER_PAGE,\n VIEW_NOTE_ORACLE_RETURN_LENGTH,\n};\nuse crate::context::PrivateContext;\nuse crate::note::{\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle;\nuse crate::types::vec::BoundedVec;\n\nfn check_note_header<Note, N>(\n context: PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n note: Note\n) {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address));\n assert(header.storage_slot == storage_slot);\n}\n\nfn check_note_fields<N>(fields: [Field; N], selects: BoundedVec<Option<Select>, N>) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n assert(fields[select.field_index] == select.value, \"Mismatch return note field.\");\n }\n}\n\nfn check_notes_order<N>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let eq = fields_0[sort.field_index] == fields_1[sort.field_index];\n let lt = fields_0[sort.field_index] as u120 < fields_1[sort.field_index] as u120;\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>\n) -> Note {\n let note = get_note_internal(storage_slot, note_interface);\n\n check_note_header(*context, storage_slot, note_interface, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n\n context.push_read_request(note_hash_for_read_request);\n note\n}\n\npub fn get_notes<Note, N, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let opt_notes = get_notes_internal(storage_slot, note_interface, options);\n let mut num_notes = 0;\n let mut prev_fields = [0; N];\n for i in 0..opt_notes.len() {\n let opt_note = opt_notes[i];\n if opt_note.is_some() {\n let note = opt_note.unwrap_unchecked();\n let serialize = note_interface.serialize;\n let fields = serialize(note);\n check_note_header(*context, storage_slot, note_interface, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_read_request(note_hash_for_read_request);\n\n num_notes += 1;\n };\n }\n if options.limit != 0 {\n assert(num_notes <= options.limit, \"Invalid number of return notes.\");\n }\n opt_notes\n}\n\nunconstrained fn get_note_internal<Note, N>(storage_slot: Field, note_interface: NoteInterface<Note, N>) -> Note {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n 0,\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n placeholder_note,\n placeholder_fields\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, N, FILTER_ARGS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n );\n\n let filter = options.filter;\n let filter_args = options.filter_args;\n filter(opt_notes, filter_args)\n}\n\nunconstrained pub fn view_notes<Note, N>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteViewerOptions<Note, N>\n) -> [Option<Note>; MAX_NOTES_PER_PAGE] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n )\n}\n\nunconstrained fn flatten_options<Note, N>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) {\n let mut num_selects = 0;\n let mut select_by = [0; N];\n let mut select_values = [0; N];\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by[num_selects] = select.unwrap_unchecked().field_index;\n select_values[num_selects] = select.unwrap_unchecked().value;\n num_selects += 1;\n };\n }\n\n let mut sort_by = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by[i] = sort.unwrap_unchecked().field_index;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (num_selects, select_by, select_values, sort_by, sort_order)\n}\n",
986
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_getter.nr"
987
- },
988
- "80": {
989
- "source": "use dep::std::option::Option;\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n};\nuse crate::utils::arr_copy_slice;\n\nuse dep::protocol_types::address::AztecAddress;\n\n#[oracle(notifyCreatedNote)]\nfn notify_created_note_oracle<N>(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_created_note<N>(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field {\n notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash)\n}\n\n#[oracle(notifyNullifiedNote)]\nfn notify_nullified_note_oracle<N>(_nullifier: Field, _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_nullified_note<N>(nullifier: Field, inner_note_hash: Field) -> Field {\n notify_nullified_note_oracle(nullifier, inner_note_hash)\n}\n\n#[oracle(getNotes)]\nfn get_notes_oracle<N, S>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by: [u8; N],\n _select_values: [Field; N],\n _sort_by: [u8; N],\n _sort_order: [u2; N],\n _limit: u32,\n _offset: u32,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<N, S>(\n storage_slot: Field,\n num_selects: u8,\n select_by: [u8; N],\n select_values: [Field; N],\n sort_by: [u8; N],\n sort_order: [u2; N],\n limit: u32,\n offset: u32,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, N, M, S, NS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n num_selects: u8,\n select_by: [u8; M],\n select_values: [Field; M],\n sort_by: [u8; M],\n sort_order: [u2; M],\n limit: u32,\n offset: u32,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array.\n) -> [Option<Note>; S] {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n for i in 0..placeholder_opt_notes.len() {\n if i as u32 < num_notes {\n // lengths named as per typescript.\n let return_header_length: Field = 2; // num_notes & contract_address.\n let extra_preimage_length: Field = 2; // nonce & is_transient.\n let read_offset: Field = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let is_transient = fields[read_offset + 1] as bool;\n let header = NoteHeader { contract_address, nonce, storage_slot, is_transient };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = deserialize(serialized_note);\n set_header(&mut note, header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n#[oracle(checkNullifierExists)]\nfn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n",
990
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/notes.nr"
991
- },
992
- "81": {
993
- "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",
994
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr"
995
- },
996
- "86": {
997
- "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",
998
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr"
999
- },
1000
- "93": {
1001
- "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",
1002
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/storage.nr"
1003
- },
1004
- "95": {
1005
- "source": "use dep::protocol_types::{\n address::{\n AztecAddress,\n PartialAddress,\n },\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getPublicKeyAndPartialAddress)]\nfn get_public_key_and_partial_address_oracle(_address: AztecAddress) -> [Field; 3] {}\n\nunconstrained fn get_public_key_and_partial_address_internal(address: AztecAddress) -> [Field; 3] {\n get_public_key_and_partial_address_oracle(address)\n}\n\npub fn get_public_key(address: AztecAddress) -> GrumpkinPoint {\n let result = get_public_key_and_partial_address_internal(address);\n let pub_key = GrumpkinPoint::new(result[0], result[1]);\n let partial_address = PartialAddress::from_field(result[2]);\n\n let calculated_address = AztecAddress::compute(pub_key, partial_address);\n assert(calculated_address.eq(address));\n\n pub_key\n}\n",
1006
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr"
1007
- },
1008
- "97": {
1009
- "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::NUM_FIELDS_PER_SHA256,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(_contract_address: AztecAddress, _event_selector: Field, _message: T) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n",
1010
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/logs.nr"
1011
- },
1012
- "98": {
1013
- "source": "use crate::oracle::get_public_key::get_public_key;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getSecretKey)]\nfn get_secret_key_oracle(_owner: GrumpkinPoint) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] {}\n\nunconstrained fn get_secret_key_internal(owner_public_key: GrumpkinPoint) -> dep::std::grumpkin_scalar::GrumpkinScalar {\n dep::std::grumpkin_scalar::deserialize_grumpkin_scalar(get_secret_key_oracle(owner_public_key))\n}\n\npub fn get_secret_key(owner: AztecAddress) -> dep::std::grumpkin_scalar::GrumpkinScalar {\n let owner_public_key = get_public_key(owner);\n let secret = get_secret_key_internal(owner_public_key);\n\n // Constrain the owner - Nullifier secret key is currently just the encryption private key so we can constrain\n // the owner by deriving the public key from the secret key and checking the result.\n let computed_public_key = dep::std::grumpkin_scalar_mul::grumpkin_fixed_base(secret);\n assert(owner_public_key.x == computed_public_key[0]);\n assert(owner_public_key.y == computed_public_key[1]);\n\n secret\n}\n",
1014
- "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr"
1015
- },
1016
- "99": {
1017
- "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 = 26;\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 BLOCK_HEADER_LENGTH: Field = 7;\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\n// should change this constant as well as the offsets in private_call_stack_item.nr\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 189;\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 = 195;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 87;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 177;\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",
1018
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/constants.nr"
1019
- },
1020
- "105": {
1021
- "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",
1022
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
1023
- },
1024
- "121": {
1025
- "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",
1026
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/address.nr"
1027
- },
1028
- "126": {
1029
- "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",
1030
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"
1031
- },
1032
- "127": {
1033
- "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",
1034
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr"
1035
- },
1036
- "128": {
1037
- "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",
1038
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr"
1039
- },
1040
- "136": {
1041
- "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",
1042
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_stack_item.nr"
1043
- },
1044
- "141": {
1045
- "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",
1046
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"
1047
- },
1048
- "144": {
1049
- "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 block_header::BlockHeader,\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\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 block_header: BlockHeader,\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.block_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.block_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
1050
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr"
1051
- },
1052
- "146": {
1053
- "source": "use crate::{\n abis::{\n call_context::CallContext,\n block_header::BlockHeader,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n pedersen_hash,\n },\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_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\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 block_header: BlockHeader,\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.block_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.block_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",
1054
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/private_circuit_public_inputs.nr"
1055
- },
1056
- "149": {
1057
- "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",
1058
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"
1059
- },
1060
- "154": {
1061
- "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",
1062
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr"
1063
- },
1064
- "160": {
1065
- "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",
1066
- "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"
1067
- },
1068
- "188": {
1069
- "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",
1070
- "path": "/usr/src/yarn-project/aztec-nr/authwit/src/entrypoint.nr"
1071
- },
1072
- "189": {
1073
- "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",
1074
- "path": "/usr/src/yarn-project/aztec-nr/authwit/src/account.nr"
1075
- },
1076
- "192": {
1077
- "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",
1078
- "path": "/usr/src/yarn-project/aztec-nr/authwit/src/auth_witness.nr"
1079
- },
1080
- "210": {
1081
- "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n use dep::std::option::Option;\n\n use dep::aztec::protocol_types::address::AztecAddress;\n\n use dep::aztec::{\n context::{PrivateContext, Context},\n note::{ note_header::NoteHeader, utils as note_utils },\n oracle::get_public_key::get_public_key,\n state_vars::immutable_singleton::ImmutableSingleton,\n };\n use dep::authwit:: {\n entrypoint::{ EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE },\n account::AccountActions,\n auth_witness::get_auth_witness,\n };\n\n use crate::public_key_note::{PublicKeyNote, PublicKeyNoteMethods, PUBLIC_KEY_NOTE_LEN};\n\n struct Storage {\n // docs:start:storage\n signing_public_key: ImmutableSingleton<PublicKeyNote, PUBLIC_KEY_NOTE_LEN>,\n // docs:end:storage\n }\n\n impl Storage {\n fn init(context: Context) -> Self {\n Storage {\n // docs:start:storage_init\n signing_public_key: ImmutableSingleton::new(context, 1, PublicKeyNoteMethods),\n // docs:end:storage_init\n }\n }\n }\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 2;\n\n // Constructs the contract\n #[aztec(private)]\n fn constructor(signing_pub_key_x: pub Field, signing_pub_key_y: pub Field) {\n let this = context.this_address();\n // docs:start:initialize\n let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n storage.signing_public_key.initialize(&mut pub_key_note, Option::none(), true);\n // docs:end:initialize\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts file\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 // docs:start:entrypoint\n // Load public key from storage\n let storage = Storage::init(Context::private(context));\n // docs:start:get_note\n let public_key = storage.signing_public_key.get_note();\n // docs:end:get_note\n // Load auth witness\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify signature of the payload bytes\n let verification = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes(32)\n );\n assert(verification == true);\n // docs:end:entrypoint\n true\n }\n\n // Computes notes hash and nullifier.\n // Note 1: Needs to be defined by every contract producing logs.\n // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes.\n unconstrained fn compute_note_hash_and_nullifier(\n contract_address: AztecAddress,\n nonce: Field,\n storage_slot: Field,\n serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]\n ) -> pub [Field; 4] {\n assert(storage_slot == 1);\n let note_header = NoteHeader::new(contract_address, nonce, storage_slot);\n note_utils::compute_note_hash_and_nullifier(PublicKeyNoteMethods, note_header, serialized_note)\n }\n}\n",
1082
- "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/main.nr"
1083
- },
1084
- "211": {
1085
- "source": "use dep::aztec::{\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_unique_siloed_note_hash,\n },\n hash::pedersen_hash,\n oracle::{\n get_secret_key::get_secret_key,\n get_public_key::get_public_key,\n },\n log::emit_encrypted_log,\n context::PrivateContext,\n};\nuse dep::aztec::protocol_types::address::AztecAddress;\n\nglobal PUBLIC_KEY_NOTE_LEN: Field = 3;\n\n// Stores a public key composed of two fields\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\nstruct PublicKeyNote {\n x: Field,\n y: Field,\n owner: AztecAddress, // We store the owner address only to get the secret key to compute the nullifier and to broadcast\n header: NoteHeader,\n}\n\nimpl PublicKeyNote {\n pub fn new(x: Field, y: Field, owner: AztecAddress) -> Self {\n PublicKeyNote {\n x,\n y,\n owner,\n header: NoteHeader::empty(),\n }\n }\n\n // serialize the note as 3 fields\n pub fn serialize(self) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n [self.x, self.y, self.owner.to_field()]\n }\n\n pub fn compute_nullifier(self) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(PublicKeyNoteMethods, self);\n let secret = get_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n // Broadcasts the note as an encrypted log on L1.\n pub fn broadcast(self, context: &mut PrivateContext, slot: Field) {\n let encryption_pub_key = get_public_key(self.owner);\n emit_encrypted_log(\n context,\n (*context).this_address(),\n slot,\n encryption_pub_key,\n self.serialize(),\n );\n }\n}\n\nfn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote {\n PublicKeyNote {\n x: serialized_note[0],\n y: serialized_note[1],\n owner: AztecAddress::from_field(serialized_note[2]),\n header: NoteHeader::empty()\n }\n}\n\nfn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n note.serialize()\n}\n\nfn compute_note_hash(note: PublicKeyNote) -> Field {\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash(note.serialize(), 0)\n}\n\nfn compute_nullifier(note: PublicKeyNote) -> Field {\n note.compute_nullifier()\n}\n\nfn get_header(note: PublicKeyNote) -> NoteHeader {\n note.header\n}\n\nfn set_header(note: &mut PublicKeyNote, header: NoteHeader) {\n note.set_header(header);\n}\n\n// Broadcasts the note as an encrypted log on L1.\nfn broadcast(context: &mut PrivateContext, slot: Field, note: PublicKeyNote) {\n note.broadcast(context, slot);\n}\n\nglobal PublicKeyNoteMethods = NoteInterface {\n deserialize,\n serialize,\n compute_note_hash,\n compute_nullifier,\n get_header,\n set_header,\n broadcast,\n};\n",
1086
- "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr"
1087
- }
1575
+ "file_map": {
1576
+ "16": {
1577
+ "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",
1578
+ "path": "std/field.nr"
1579
+ },
1580
+ "28": {
1581
+ "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",
1582
+ "path": "std/option.nr"
1583
+ },
1584
+ "40": {
1585
+ "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log);\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n",
1586
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/log.nr"
1587
+ },
1588
+ "41": {
1589
+ "source": "use dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\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};\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 block_header: BlockHeader,\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 block_header: BlockHeader,\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",
1590
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
1591
+ },
1592
+ "42": {
1593
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::{\n address::AztecAddress,\n};\n\nuse crate::context::{PrivateContext, Context};\nuse crate::note::{\n lifecycle::create_note,\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::singleton::compute_singleton_initialization_nullifier;\n\n// docs:start:struct\nstruct ImmutableSingleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>, Option<&mut PrivateContext>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> ImmutableSingleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n ImmutableSingleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, Option::none());\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note, \n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, self.context);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(\n context,\n self.storage_slot,\n note,\n self.note_interface,\n broadcast,\n );\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note(self) -> Note {\n let context = self.context.unwrap();\n let storage_slot = self.storage_slot;\n get_note(context, storage_slot, self.note_interface)\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
1594
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr"
1595
+ },
1596
+ "43": {
1597
+ "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",
1598
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr"
1599
+ },
1600
+ "44": {
1601
+ "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",
1602
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/map.nr"
1603
+ },
1604
+ "45": {
1605
+ "source": "use dep::std::option::Option;\n\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n },\n hash::pedersen_hash,\n};\n\nuse crate::context::{PrivateContext, PublicContext, Context};\nuse crate::note::{\n lifecycle::{create_note, destroy_note},\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::{\n nullifier_key::get_nullifier_secret_key,\n notes::check_nullifier_exists,\n};\n\npub fn compute_singleton_initialization_nullifier(\n storage_slot: Field,\n owner: Option<AztecAddress>,\n context: Option<&mut PrivateContext>\n) -> Field {\n if owner.is_some() {\n let secret = if context.is_some() {\n context.unwrap_unchecked().request_nullifier_secret_key(owner.unwrap_unchecked())\n } else {\n get_nullifier_secret_key(owner.unwrap_unchecked())\n };\n pedersen_hash(\n [storage_slot, secret.low, secret.high],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n } else {\n pedersen_hash([storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER)\n }\n}\n\n// docs:start:struct\nstruct Singleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>, Option<&mut PrivateContext>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> Singleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Singleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, Option::none());\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note,\n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner, self.context);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(context, self.storage_slot, note, self.note_interface, broadcast);\n }\n // docs:end:initialize\n\n // docs:start:replace\n pub fn replace(\n self,\n new_note: &mut Note,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n let prev_note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify previous note.\n destroy_note(context, prev_note, self.note_interface);\n\n // Add replacement note.\n create_note(context, self.storage_slot, new_note, self.note_interface, broadcast);\n }\n // docs:end:replace\n\n // docs:start:get_note\n pub fn get_note(self, broadcast: bool) -> Note {\n let context = self.context.unwrap();\n let mut note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify current note to make sure it's reading the latest note.\n destroy_note(context, note, self.note_interface);\n\n // Add the same note again.\n // Because a nonce is added to every note in the kernel, its nullifier will be different.\n create_note(context, self.storage_slot, &mut note, self.note_interface, broadcast);\n\n note\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
1606
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr"
1607
+ },
1608
+ "51": {
1609
+ "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",
1610
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr"
1611
+ },
1612
+ "53": {
1613
+ "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",
1614
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/vec.nr"
1615
+ },
1616
+ "66": {
1617
+ "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",
1618
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/utils.nr"
1619
+ },
1620
+ "68": {
1621
+ "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",
1622
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/context.nr"
1623
+ },
1624
+ "73": {
1625
+ "source": "use crate::abi::PublicContextInputs;\nuse crate::context::{\n PrivateContext,\n PublicContext,\n};\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_inner_note_hash,\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>,\n broadcast: bool\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n let serialize = note_interface.serialize;\n let serialized_note = serialize(*note);\n assert(notify_created_note(storage_slot, serialized_note, inner_note_hash) == 0);\n\n context.push_new_note_hash(inner_note_hash);\n\n if broadcast {\n let broadcast = note_interface.broadcast;\n broadcast(context, storage_slot, *note);\n }\n}\n\npub fn create_note_hash_from_public<Note, N>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n context.push_new_note_hash(inner_note_hash);\n}\n\npub fn destroy_note<Note, N>(\n context: &mut PrivateContext,\n note: Note,\n note_interface: NoteInterface<Note, N>\n) {\n let mut nullifier = 0;\n let mut nullified_commitment: Field = 0;\n let compute_nullifier = note_interface.compute_nullifier;\n nullifier = compute_nullifier(note, context);\n\n // We also need the note commitment corresponding to the \"nullifier\"\n let get_header = note_interface.get_header;\n let header = get_header(note);\n // `nullified_commitment` is used to inform the kernel which pending commitment\n // the nullifier corresponds to so they can be matched and both squashed/deleted.\n // nonzero nonce implies \"persistable\" nullifier (nullifies a persistent/in-tree\n // commitment) in which case `nullified_commitment` is not used since the kernel\n // just siloes and forwards the nullifier to its output.\n if (header.is_transient) {\n // TODO(1718): Can we reuse the note commitment computed in `compute_nullifier`?\n nullified_commitment = compute_inner_note_hash(note_interface, note);\n }\n assert(notify_nullified_note(nullifier, nullified_commitment) == 0);\n\n context.push_new_nullifier(nullifier, nullified_commitment)\n}\n",
1626
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr"
1627
+ },
1628
+ "74": {
1629
+ "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__OUTER_NULLIFIER,\n hash::pedersen_hash,\n};\nuse crate::{\n context::PrivateContext,\n note::{\n note_hash::{compute_inner_hash, compute_siloed_hash, compute_unique_hash},\n note_header::NoteHeader,\n note_interface::NoteInterface,\n },\n utils::arr_copy_slice,\n};\n\npub fn compute_inner_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n\n compute_inner_hash(header.storage_slot, note_hash)\n}\n\npub fn compute_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let inner_note_hash = compute_inner_note_hash(note_interface, note_with_header);\n\n compute_siloed_hash(header.contract_address, inner_note_hash)\n}\n\npub fn compute_unique_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let siloed_note_hash = compute_siloed_note_hash(note_interface, note_with_header);\n\n compute_unique_hash(header.nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier<Note, N>(\n note_interface: NoteInterface<Note, N>,\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note_with_header, context);\n\n let input = [header.contract_address.to_field(), inner_nullifier];\n pedersen_hash(input, GENERATOR_INDEX__OUTER_NULLIFIER)\n}\n\npub fn compute_note_hash_for_read_or_nullify<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386)\n if (header.is_transient) {\n // If a note is transient, we just read the inner_note_hash (kernel will silo by contract address).\n compute_inner_note_hash(note_interface, note_with_header)\n } else if (header.nonce == 0) {\n // If not transient and nonce is zero, that means we are reading a public note.\n compute_siloed_note_hash(note_interface, note_with_header)\n } else {\n // When nonce is nonzero, that means we are reading a settled note (from tree) created in a\n // previous TX. So we need the unique_siloed_note_hash which has already been hashed with\n // contract address and then nonce. This hash will match the existing leaf in the private\n // data tree, so the kernel can just perform a membership check directly on this hash/leaf.\n compute_unique_siloed_note_hash(note_interface, note_with_header)\n }\n}\n\npub fn compute_note_hash_and_nullifier<Note, N, S>(\n note_interface: NoteInterface<Note, N>,\n note_header: NoteHeader,\n serialized_note: [Field; S]\n) -> [Field; 4] {\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0));\n set_header(&mut note, note_header);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n let inner_note_hash = compute_inner_hash(note_header.storage_slot, note_hash);\n\n let siloed_note_hash = compute_siloed_hash(note_header.contract_address, inner_note_hash);\n\n let unique_siloed_note_hash = compute_unique_hash(note_header.nonce, siloed_note_hash);\n\n let compute_nullifier_without_context = note_interface.compute_nullifier_without_context;\n let inner_nullifier = compute_nullifier_without_context(note);\n\n [inner_note_hash, siloed_note_hash, unique_siloed_note_hash, inner_nullifier]\n}\n",
1630
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/utils.nr"
1631
+ },
1632
+ "76": {
1633
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n },\n hash::pedersen_hash,\n};\n\npub fn compute_inner_hash(storage_slot: Field, note_hash: Field) -> Field {\n // TODO(#1205) Do we need a generator index here?\n pedersen_hash([storage_slot, note_hash], 0)\n}\n\npub fn compute_siloed_hash(contract_address: AztecAddress, inner_note_hash: Field) -> Field {\n let inputs = [contract_address.to_field(), inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__SILOED_COMMITMENT)\n}\n\npub fn compute_unique_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_COMMITMENT)\n}\n",
1634
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_hash.nr"
1635
+ },
1636
+ "79": {
1637
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n GET_NOTE_ORACLE_RETURN_LENGTH,\n GET_NOTES_ORACLE_RETURN_LENGTH,\n MAX_NOTES_PER_PAGE,\n VIEW_NOTE_ORACLE_RETURN_LENGTH,\n};\nuse crate::context::PrivateContext;\nuse crate::note::{\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle;\nuse crate::types::vec::BoundedVec;\n\nfn check_note_header<Note, N>(\n context: PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n note: Note\n) {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address));\n assert(header.storage_slot == storage_slot);\n}\n\nfn check_note_fields<N>(fields: [Field; N], selects: BoundedVec<Option<Select>, N>) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n assert(fields[select.field_index] == select.value, \"Mismatch return note field.\");\n }\n}\n\nfn check_notes_order<N>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let eq = fields_0[sort.field_index] == fields_1[sort.field_index];\n let lt = fields_0[sort.field_index] as u120 < fields_1[sort.field_index] as u120;\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>\n) -> Note {\n let note = get_note_internal(storage_slot, note_interface);\n\n check_note_header(*context, storage_slot, note_interface, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n\n context.push_read_request(note_hash_for_read_request);\n note\n}\n\npub fn get_notes<Note, N, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let opt_notes = get_notes_internal(storage_slot, note_interface, options);\n let mut num_notes = 0;\n let mut prev_fields = [0; N];\n for i in 0..opt_notes.len() {\n let opt_note = opt_notes[i];\n if opt_note.is_some() {\n let note = opt_note.unwrap_unchecked();\n let serialize = note_interface.serialize;\n let fields = serialize(note);\n check_note_header(*context, storage_slot, note_interface, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_read_request(note_hash_for_read_request);\n\n num_notes += 1;\n };\n }\n if options.limit != 0 {\n assert(num_notes <= options.limit, \"Invalid number of return notes.\");\n }\n opt_notes\n}\n\nunconstrained fn get_note_internal<Note, N>(storage_slot: Field, note_interface: NoteInterface<Note, N>) -> Note {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n 0,\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n placeholder_note,\n placeholder_fields\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, N, FILTER_ARGS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n );\n\n let filter = options.filter;\n let filter_args = options.filter_args;\n filter(opt_notes, filter_args)\n}\n\nunconstrained pub fn view_notes<Note, N>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteViewerOptions<Note, N>\n) -> [Option<Note>; MAX_NOTES_PER_PAGE] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n )\n}\n\nunconstrained fn flatten_options<Note, N>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) {\n let mut num_selects = 0;\n let mut select_by = [0; N];\n let mut select_values = [0; N];\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by[num_selects] = select.unwrap_unchecked().field_index;\n select_values[num_selects] = select.unwrap_unchecked().value;\n num_selects += 1;\n };\n }\n\n let mut sort_by = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by[i] = sort.unwrap_unchecked().field_index;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (num_selects, select_by, select_values, sort_by, sort_order)\n}\n",
1638
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_getter.nr"
1639
+ },
1640
+ "82": {
1641
+ "source": "use dep::std::option::Option;\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n};\nuse crate::utils::arr_copy_slice;\n\nuse dep::protocol_types::address::AztecAddress;\n\n#[oracle(notifyCreatedNote)]\nfn notify_created_note_oracle<N>(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_created_note<N>(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field {\n notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash)\n}\n\n#[oracle(notifyNullifiedNote)]\nfn notify_nullified_note_oracle<N>(_nullifier: Field, _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_nullified_note<N>(nullifier: Field, inner_note_hash: Field) -> Field {\n notify_nullified_note_oracle(nullifier, inner_note_hash)\n}\n\n#[oracle(getNotes)]\nfn get_notes_oracle<N, S>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by: [u8; N],\n _select_values: [Field; N],\n _sort_by: [u8; N],\n _sort_order: [u2; N],\n _limit: u32,\n _offset: u32,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<N, S>(\n storage_slot: Field,\n num_selects: u8,\n select_by: [u8; N],\n select_values: [Field; N],\n sort_by: [u8; N],\n sort_order: [u2; N],\n limit: u32,\n offset: u32,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, N, M, S, NS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n num_selects: u8,\n select_by: [u8; M],\n select_values: [Field; M],\n sort_by: [u8; M],\n sort_order: [u2; M],\n limit: u32,\n offset: u32,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array.\n) -> [Option<Note>; S] {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n for i in 0..placeholder_opt_notes.len() {\n if i as u32 < num_notes {\n // lengths named as per typescript.\n let return_header_length: Field = 2; // num_notes & contract_address.\n let extra_preimage_length: Field = 2; // nonce & is_transient.\n let read_offset: Field = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let is_transient = fields[read_offset + 1] as bool;\n let header = NoteHeader { contract_address, nonce, storage_slot, is_transient };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = deserialize(serialized_note);\n set_header(&mut note, header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n#[oracle(checkNullifierExists)]\nfn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n",
1642
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/notes.nr"
1643
+ },
1644
+ "83": {
1645
+ "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",
1646
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr"
1647
+ },
1648
+ "87": {
1649
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::grumpkin_scalar::GrumpkinScalar;\n\nstruct KeyPair {\n public_key: GrumpkinPoint,\n secret_key: GrumpkinScalar,\n}\n\n#[oracle(getNullifierKeyPair)]\nfn get_nullifier_key_pair_oracle(_account: AztecAddress) -> [Field; 4] {}\n\nunconstrained fn get_nullifier_key_pair_internal(account: AztecAddress) -> KeyPair {\n let result = get_nullifier_key_pair_oracle(account);\n KeyPair {\n public_key: GrumpkinPoint { x: result[0], y: result[1] },\n secret_key: GrumpkinScalar { high: result[2], low: result[3] }\n }\n}\n\npub fn get_nullifier_key_pair(account: AztecAddress) -> KeyPair {\n get_nullifier_key_pair_internal(account)\n}\n\npub fn get_nullifier_secret_key(account: AztecAddress) -> GrumpkinScalar {\n get_nullifier_key_pair_internal(account).secret_key\n}\n",
1650
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/nullifier_key.nr"
1651
+ },
1652
+ "89": {
1653
+ "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",
1654
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr"
1655
+ },
1656
+ "96": {
1657
+ "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",
1658
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/storage.nr"
1659
+ },
1660
+ "98": {
1661
+ "source": "use dep::protocol_types::{\n address::{\n AztecAddress,\n PartialAddress,\n },\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getPublicKeyAndPartialAddress)]\nfn get_public_key_and_partial_address_oracle(_address: AztecAddress) -> [Field; 3] {}\n\nunconstrained fn get_public_key_and_partial_address_internal(address: AztecAddress) -> [Field; 3] {\n get_public_key_and_partial_address_oracle(address)\n}\n\npub fn get_public_key(address: AztecAddress) -> GrumpkinPoint {\n let result = get_public_key_and_partial_address_internal(address);\n let pub_key = GrumpkinPoint::new(result[0], result[1]);\n let partial_address = PartialAddress::from_field(result[2]);\n\n let calculated_address = AztecAddress::compute(pub_key, partial_address);\n assert(calculated_address.eq(address));\n\n pub_key\n}\n",
1662
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr"
1663
+ },
1664
+ "100": {
1665
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::NUM_FIELDS_PER_SHA256,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(_contract_address: AztecAddress, _event_selector: Field, _message: T) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n",
1666
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/logs.nr"
1667
+ },
1668
+ "101": {
1669
+ "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 = 26;\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 BLOCK_HEADER_LENGTH: Field = 7;\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\n// should change this constant as well as the offsets in private_call_stack_item.nr\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 189;\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 = 195;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 87;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 177;\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",
1670
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/constants.nr"
1671
+ },
1672
+ "107": {
1673
+ "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",
1674
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
1675
+ },
1676
+ "123": {
1677
+ "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",
1678
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/address.nr"
1679
+ },
1680
+ "128": {
1681
+ "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",
1682
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"
1683
+ },
1684
+ "129": {
1685
+ "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",
1686
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr"
1687
+ },
1688
+ "130": {
1689
+ "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",
1690
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr"
1691
+ },
1692
+ "138": {
1693
+ "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",
1694
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_stack_item.nr"
1695
+ },
1696
+ "143": {
1697
+ "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",
1698
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"
1699
+ },
1700
+ "146": {
1701
+ "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 block_header::BlockHeader,\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\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 block_header: BlockHeader,\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.block_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.block_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
1702
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr"
1703
+ },
1704
+ "148": {
1705
+ "source": "use crate::{\n abis::{\n call_context::CallContext,\n block_header::BlockHeader,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n pedersen_hash,\n },\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_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\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 block_header: BlockHeader,\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.block_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.block_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",
1706
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/private_circuit_public_inputs.nr"
1707
+ },
1708
+ "151": {
1709
+ "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",
1710
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"
1711
+ },
1712
+ "156": {
1713
+ "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",
1714
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr"
1715
+ },
1716
+ "162": {
1717
+ "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",
1718
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"
1719
+ },
1720
+ "186": {
1721
+ "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",
1722
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/entrypoint.nr"
1723
+ },
1724
+ "187": {
1725
+ "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",
1726
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/account.nr"
1727
+ },
1728
+ "190": {
1729
+ "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",
1730
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/auth_witness.nr"
1731
+ },
1732
+ "208": {
1733
+ "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\ncontract SchnorrAccount {\n use dep::std;\n use dep::std::option::Option;\n\n use dep::aztec::protocol_types::address::AztecAddress;\n\n use dep::aztec::{\n context::{PrivateContext, Context},\n note::{ note_header::NoteHeader, utils as note_utils },\n oracle::get_public_key::get_public_key,\n state_vars::immutable_singleton::ImmutableSingleton,\n };\n use dep::authwit:: {\n entrypoint::{ EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE },\n account::AccountActions,\n auth_witness::get_auth_witness,\n };\n\n use crate::public_key_note::{PublicKeyNote, PublicKeyNoteMethods, PUBLIC_KEY_NOTE_LEN};\n\n struct Storage {\n // docs:start:storage\n signing_public_key: ImmutableSingleton<PublicKeyNote, PUBLIC_KEY_NOTE_LEN>,\n // docs:end:storage\n }\n\n impl Storage {\n fn init(context: Context) -> Self {\n Storage {\n // docs:start:storage_init\n signing_public_key: ImmutableSingleton::new(context, 1, PublicKeyNoteMethods),\n // docs:end:storage_init\n }\n }\n }\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 2;\n\n // Constructs the contract\n #[aztec(private)]\n fn constructor(signing_pub_key_x: pub Field, signing_pub_key_y: pub Field) {\n let this = context.this_address();\n // docs:start:initialize\n let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n storage.signing_public_key.initialize(&mut pub_key_note, Option::none(), true);\n // docs:end:initialize\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts file\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 // docs:start:entrypoint\n // Load public key from storage\n let storage = Storage::init(Context::private(context));\n // docs:start:get_note\n let public_key = storage.signing_public_key.get_note();\n // docs:end:get_note\n // Load auth witness\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify signature of the payload bytes\n let verification = std::schnorr::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n message_hash.to_be_bytes(32)\n );\n assert(verification == true);\n // docs:end:entrypoint\n true\n }\n\n // Computes notes hash and nullifier.\n // Note 1: Needs to be defined by every contract producing logs.\n // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes.\n unconstrained fn compute_note_hash_and_nullifier(\n contract_address: AztecAddress,\n nonce: Field,\n storage_slot: Field,\n serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]\n ) -> pub [Field; 4] {\n assert(storage_slot == 1);\n let note_header = NoteHeader::new(contract_address, nonce, storage_slot);\n note_utils::compute_note_hash_and_nullifier(PublicKeyNoteMethods, note_header, serialized_note)\n }\n}\n",
1734
+ "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/main.nr"
1735
+ },
1736
+ "209": {
1737
+ "source": "use dep::aztec::{\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_unique_siloed_note_hash,\n },\n hash::pedersen_hash,\n oracle::{\n nullifier_key::get_nullifier_secret_key,\n get_public_key::get_public_key,\n },\n log::emit_encrypted_log,\n context::PrivateContext,\n};\nuse dep::aztec::protocol_types::address::AztecAddress;\n\nglobal PUBLIC_KEY_NOTE_LEN: Field = 3;\n\n// Stores a public key composed of two fields\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\nstruct PublicKeyNote {\n x: Field,\n y: Field,\n owner: AztecAddress, // We store the owner address only to get the secret key to compute the nullifier and to broadcast\n header: NoteHeader,\n}\n\nimpl PublicKeyNote {\n pub fn new(x: Field, y: Field, owner: AztecAddress) -> Self {\n PublicKeyNote {\n x,\n y,\n owner,\n header: NoteHeader::empty(),\n }\n }\n\n // serialize the note as 3 fields\n pub fn serialize(self) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n [self.x, self.y, self.owner.to_field()]\n }\n\n pub fn compute_nullifier(self, context: &mut PrivateContext) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(PublicKeyNoteMethods, self);\n let secret = context.request_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn compute_nullifier_without_context(self) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(PublicKeyNoteMethods, self);\n let secret = get_nullifier_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n // Broadcasts the note as an encrypted log on L1.\n pub fn broadcast(self, context: &mut PrivateContext, slot: Field) {\n let encryption_pub_key = get_public_key(self.owner);\n emit_encrypted_log(\n context,\n (*context).this_address(),\n slot,\n encryption_pub_key,\n self.serialize(),\n );\n }\n}\n\nfn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote {\n PublicKeyNote {\n x: serialized_note[0],\n y: serialized_note[1],\n owner: AztecAddress::from_field(serialized_note[2]),\n header: NoteHeader::empty()\n }\n}\n\nfn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] {\n note.serialize()\n}\n\nfn compute_note_hash(note: PublicKeyNote) -> Field {\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash(note.serialize(), 0)\n}\n\nfn compute_nullifier(note: PublicKeyNote, context: &mut PrivateContext) -> Field {\n note.compute_nullifier(context)\n}\n\nfn compute_nullifier_without_context(note: PublicKeyNote) -> Field {\n note.compute_nullifier_without_context()\n}\n\nfn get_header(note: PublicKeyNote) -> NoteHeader {\n note.header\n}\n\nfn set_header(note: &mut PublicKeyNote, header: NoteHeader) {\n note.set_header(header);\n}\n\n// Broadcasts the note as an encrypted log on L1.\nfn broadcast(context: &mut PrivateContext, slot: Field, note: PublicKeyNote) {\n note.broadcast(context, slot);\n}\n\nglobal PublicKeyNoteMethods = NoteInterface {\n deserialize,\n serialize,\n compute_note_hash,\n compute_nullifier,\n compute_nullifier_without_context,\n get_header,\n set_header,\n broadcast,\n};\n",
1738
+ "path": "/usr/src/yarn-project/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr"
1088
1739
  }
1089
1740
  }
1090
1741
  }