@aztec/accounts 0.66.0 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/EcdsaKAccount.json +297 -302
- package/artifacts/EcdsaRAccount.json +271 -276
- package/artifacts/SchnorrAccount.json +659 -672
- package/artifacts/SchnorrSingleKeyAccount.json +110 -110
- package/dest/testing/configuration.js +4 -4
- package/package.json +12 -8
- package/src/testing/configuration.ts +3 -3
|
@@ -1,183 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.0+
|
|
3
|
+
"noir_version": "1.0.0-beta.0+b3f4ad661c8c6f88544d714fd5b7b6f58a8ce4ad-x8664",
|
|
4
4
|
"name": "SchnorrAccount",
|
|
5
5
|
"functions": [
|
|
6
|
-
{
|
|
7
|
-
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
8
|
-
"is_unconstrained": true,
|
|
9
|
-
"custom_attributes": [],
|
|
10
|
-
"abi": {
|
|
11
|
-
"error_types": {
|
|
12
|
-
"11091894166229312484": {
|
|
13
|
-
"error_kind": "fmtstring",
|
|
14
|
-
"item_types": [],
|
|
15
|
-
"length": 20
|
|
16
|
-
},
|
|
17
|
-
"16761564377371454734": {
|
|
18
|
-
"error_kind": "string",
|
|
19
|
-
"string": "Array index out of bounds"
|
|
20
|
-
},
|
|
21
|
-
"17843811134343075018": {
|
|
22
|
-
"error_kind": "string",
|
|
23
|
-
"string": "Stack too deep"
|
|
24
|
-
},
|
|
25
|
-
"5019202896831570965": {
|
|
26
|
-
"error_kind": "string",
|
|
27
|
-
"string": "attempt to add with overflow"
|
|
28
|
-
},
|
|
29
|
-
"8270195893599566439": {
|
|
30
|
-
"error_kind": "string",
|
|
31
|
-
"string": "Invalid public keys hint for address"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"parameters": [
|
|
35
|
-
{
|
|
36
|
-
"name": "contract_address",
|
|
37
|
-
"type": {
|
|
38
|
-
"fields": [
|
|
39
|
-
{
|
|
40
|
-
"name": "inner",
|
|
41
|
-
"type": {
|
|
42
|
-
"kind": "field"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"kind": "struct",
|
|
47
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
48
|
-
},
|
|
49
|
-
"visibility": "private"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"name": "nonce",
|
|
53
|
-
"type": {
|
|
54
|
-
"kind": "field"
|
|
55
|
-
},
|
|
56
|
-
"visibility": "private"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"name": "storage_slot",
|
|
60
|
-
"type": {
|
|
61
|
-
"kind": "field"
|
|
62
|
-
},
|
|
63
|
-
"visibility": "private"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"name": "note_type_id",
|
|
67
|
-
"type": {
|
|
68
|
-
"kind": "field"
|
|
69
|
-
},
|
|
70
|
-
"visibility": "private"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"name": "compute_nullifier",
|
|
74
|
-
"type": {
|
|
75
|
-
"kind": "boolean"
|
|
76
|
-
},
|
|
77
|
-
"visibility": "private"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"name": "serialized_note",
|
|
81
|
-
"type": {
|
|
82
|
-
"kind": "array",
|
|
83
|
-
"length": 3,
|
|
84
|
-
"type": {
|
|
85
|
-
"kind": "field"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
"visibility": "private"
|
|
89
|
-
}
|
|
90
|
-
],
|
|
91
|
-
"return_type": {
|
|
92
|
-
"abi_type": {
|
|
93
|
-
"kind": "array",
|
|
94
|
-
"length": 4,
|
|
95
|
-
"type": {
|
|
96
|
-
"kind": "field"
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
"visibility": "public"
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
"bytecode": "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",
|
|
103
|
-
"debug_symbols": "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",
|
|
104
|
-
"brillig_names": [
|
|
105
|
-
"compute_note_hash_and_optionally_a_nullifier"
|
|
106
|
-
]
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"name": "lookup_validity",
|
|
110
|
-
"is_unconstrained": true,
|
|
111
|
-
"custom_attributes": [],
|
|
112
|
-
"abi": {
|
|
113
|
-
"error_types": {
|
|
114
|
-
"16761564377371454734": {
|
|
115
|
-
"error_kind": "string",
|
|
116
|
-
"string": "Array index out of bounds"
|
|
117
|
-
},
|
|
118
|
-
"16954218183513903507": {
|
|
119
|
-
"error_kind": "string",
|
|
120
|
-
"string": "Attempted to read past end of BoundedVec"
|
|
121
|
-
},
|
|
122
|
-
"17843811134343075018": {
|
|
123
|
-
"error_kind": "string",
|
|
124
|
-
"string": "Stack too deep"
|
|
125
|
-
},
|
|
126
|
-
"2920182694213909827": {
|
|
127
|
-
"error_kind": "string",
|
|
128
|
-
"string": "attempt to subtract with overflow"
|
|
129
|
-
},
|
|
130
|
-
"5019202896831570965": {
|
|
131
|
-
"error_kind": "string",
|
|
132
|
-
"string": "attempt to add with overflow"
|
|
133
|
-
},
|
|
134
|
-
"5727012404371710682": {
|
|
135
|
-
"error_kind": "string",
|
|
136
|
-
"string": "push out of bounds"
|
|
137
|
-
},
|
|
138
|
-
"7233212735005103307": {
|
|
139
|
-
"error_kind": "string",
|
|
140
|
-
"string": "attempt to multiply with overflow"
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
"parameters": [
|
|
144
|
-
{
|
|
145
|
-
"name": "consumer",
|
|
146
|
-
"type": {
|
|
147
|
-
"fields": [
|
|
148
|
-
{
|
|
149
|
-
"name": "inner",
|
|
150
|
-
"type": {
|
|
151
|
-
"kind": "field"
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
],
|
|
155
|
-
"kind": "struct",
|
|
156
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
157
|
-
},
|
|
158
|
-
"visibility": "private"
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"name": "inner_hash",
|
|
162
|
-
"type": {
|
|
163
|
-
"kind": "field"
|
|
164
|
-
},
|
|
165
|
-
"visibility": "private"
|
|
166
|
-
}
|
|
167
|
-
],
|
|
168
|
-
"return_type": {
|
|
169
|
-
"abi_type": {
|
|
170
|
-
"kind": "boolean"
|
|
171
|
-
},
|
|
172
|
-
"visibility": "public"
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
"bytecode": "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",
|
|
176
|
-
"debug_symbols": "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",
|
|
177
|
-
"brillig_names": [
|
|
178
|
-
"lookup_validity"
|
|
179
|
-
]
|
|
180
|
-
},
|
|
181
6
|
{
|
|
182
7
|
"name": "sync_notes",
|
|
183
8
|
"is_unconstrained": true,
|
|
@@ -193,7 +18,7 @@
|
|
|
193
18
|
"return_type": null
|
|
194
19
|
},
|
|
195
20
|
"bytecode": "H4sIAAAAAAAA/9VUyw6CMBBseURBOaiJ3kz8gyIYOJJ49x8akKMe8OKNT5eabbqpVRKlJkzSbEs3szNlW0oUKESPvAH9tGnIFdhBDCA6aN/tRgFr9hviQKs7JH/O0iQw+BtQ/5OfWtIvIPktnT+bAM+xVfzYi6w77UaIesKWZ/nPbHpe9fhc/MFnh32k1caghm+uIYci3RuYR4Y8iRlRd9prh/eV5YzJei7w++RVO67va/lrWIeafvmOFV/qrDMe1wmv+YFXVVrypcYv4KBzGnMvbGHe1wvY45yo3mjul/J0vZ0b0gNB8gCVxsvQjgYAAA==",
|
|
196
|
-
"debug_symbols": "
|
|
21
|
+
"debug_symbols": "ndLLCoQgFAbgdznrFnnpYq8SQ1hZCKJhNjBE7z4azdAMbWxz8Be/4+ZfoRftMjZSD2aGql5BmY47abRP65ZAa6VScmzO15CGgdD+fp64DnF23DqoMEUJCN2HE/N+kEpARUm6PRJAOJ6QeELjSRZN8OUvjLD8MIxi8kUM7Sa7YfIbprhhynhDLivAaJl9TJbSH7P59ORW8laJo2HDortT4dxrEn/dm6zpRL9YEVp4KqCfNSoSjP1av/oN",
|
|
197
22
|
"brillig_names": [
|
|
198
23
|
"sync_notes"
|
|
199
24
|
]
|
|
@@ -589,7 +414,7 @@
|
|
|
589
414
|
}
|
|
590
415
|
],
|
|
591
416
|
"kind": "struct",
|
|
592
|
-
"path": "authwit::aztec::protocol_types::
|
|
417
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
593
418
|
}
|
|
594
419
|
},
|
|
595
420
|
{
|
|
@@ -1688,7 +1513,7 @@
|
|
|
1688
1513
|
}
|
|
1689
1514
|
],
|
|
1690
1515
|
"kind": "struct",
|
|
1691
|
-
"path": "authwit::aztec::protocol_types::
|
|
1516
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
1692
1517
|
}
|
|
1693
1518
|
},
|
|
1694
1519
|
{
|
|
@@ -1799,8 +1624,8 @@
|
|
|
1799
1624
|
"visibility": "databus"
|
|
1800
1625
|
}
|
|
1801
1626
|
},
|
|
1802
|
-
"bytecode": "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",
|
|
1803
|
-
"debug_symbols": "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bzvr2vamara9qZptb6pm25uq2famara9qZptb6rG96Y6LBr43lTH4eOz7nH4tjvMfG+q41fXdta17U3VbHtTNdveVM22N1Wz7U3VbHtTNdveVM22N1Xje1MdFg18b6rj8G13mG17U3W+N9XRq9v53lTH4ZvOut22N1XfTGfdbtubqtv2puq2vam6bW+qbtubqvO9qQ6LBr431XH4pjvM3bY3Ved7Ux2/urazrm1vqm7bm6rb9qbqtr2pum1vqm7bm6rb9qbqtr2pOt+b6rBo4HtTHYdvusPcbXtTdb431fGrazvr2vam6ra9qbptb6pu25uq2/am6ra9qbptb6pu25uq872pDosGvjfVYfi2vam6bW+qzvemOnx1+d5Ux+Hbzrq2vam6bW+qbtubqtv2puq2vam6bW+qbtubqvO9qQ6LBr431XH4+Kx7HL7tDjPfm+r41bWddW17U3Xb3lTdtjdVt+1N1W17U3Xb3lTdtjdVt+1N1fneVIdFA9+b6jh82x1m295Une9Ndfjq8r2pjsO3nXVte1N1295U3bY3VbftTdVte1N1295U3bY3Ved7Ux0WDXxvquPwbXeYbXtTdb431fGrazvr2vam6ra9qbptb6pu25uq2/am6ra9qbptb6pu25uq872pDosGvjfVcfi2O8y2vak635vq+NU1nXXDZtucao/fdN7d4zedePf4TWfePX586h3Eb3rFu8dvesm7x296zbvHb/oPvHv8pv/CGzbbNlV7/Ka7zXv8xvMv36lqEL/x/Gvbq2qP33j+te1Wtcdvevm7x298/WvbsGqP3/j6l29ZdVw/8D2rBvHj8+8gftO95z1+4/mX71s1iN94/rXtXBU229ZVe/zG869t86o9fuPrX9v2VXv8xte/fAOr4/qB72A1iN94/9m2h1XY+CZWx+8v38VqEL/x/Gvbx2qP33j+te1ktcdvfP1r28tqj9/4+te2m1XY+HZWx/UD389qEL/x/rNtR6s9fuP5l+9pNYjfeP617Wq1x288/9r2tQqbbWOrPX7j61/b1lZ7/MbXv3xzq+P6ge9uNYjfeP/Ztr/VHr/x/Mt3uDqO37bF1R6/8fxr2+Rqj994/rVtc7XHb3z9a9voao/f+PqXb3V1XD/wva6O47dtdrXHb7z/zLe7On5/+X5Xg/iN51/bjld7/Mbzr23Pqz1+4+tf265X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",
|
|
1627
|
+
"bytecode": "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",
|
|
1628
|
+
"debug_symbols": "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",
|
|
1804
1629
|
"brillig_names": [
|
|
1805
1630
|
"get_note_internal",
|
|
1806
1631
|
"decompose_hint",
|
|
@@ -1810,61 +1635,35 @@
|
|
|
1810
1635
|
"directive_integer_quotient",
|
|
1811
1636
|
"directive_to_radix"
|
|
1812
1637
|
],
|
|
1813
|
-
"verification_key": "
|
|
1814
|
-
"artifact_hash": "
|
|
1638
|
+
"verification_key": "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",
|
|
1639
|
+
"artifact_hash": "ff6671ddb572df3d961df43ed4c3adf75a7d3763-e4cfe2403c455ce8bdee13ac07b713f5-client-ivc-true"
|
|
1815
1640
|
},
|
|
1816
1641
|
{
|
|
1817
|
-
"name": "
|
|
1642
|
+
"name": "entrypoint",
|
|
1818
1643
|
"is_unconstrained": false,
|
|
1819
1644
|
"custom_attributes": [
|
|
1820
1645
|
"private",
|
|
1821
|
-
"
|
|
1646
|
+
"noinitcheck"
|
|
1822
1647
|
],
|
|
1823
1648
|
"abi": {
|
|
1824
1649
|
"error_types": {
|
|
1825
|
-
"
|
|
1826
|
-
"error_kind": "
|
|
1827
|
-
"
|
|
1650
|
+
"11091894166229312484": {
|
|
1651
|
+
"error_kind": "fmtstring",
|
|
1652
|
+
"item_types": [],
|
|
1653
|
+
"length": 20
|
|
1828
1654
|
},
|
|
1829
1655
|
"16761564377371454734": {
|
|
1830
1656
|
"error_kind": "string",
|
|
1831
1657
|
"string": "Array index out of bounds"
|
|
1832
1658
|
},
|
|
1833
|
-
"
|
|
1659
|
+
"1705275289401561847": {
|
|
1834
1660
|
"error_kind": "string",
|
|
1835
|
-
"string": "
|
|
1661
|
+
"string": "Mismatch note header storage slot."
|
|
1836
1662
|
},
|
|
1837
1663
|
"17843811134343075018": {
|
|
1838
1664
|
"error_kind": "string",
|
|
1839
1665
|
"string": "Stack too deep"
|
|
1840
1666
|
},
|
|
1841
|
-
"2233873454491509486": {
|
|
1842
|
-
"error_kind": "string",
|
|
1843
|
-
"string": "Initializer address is not the contract deployer"
|
|
1844
|
-
},
|
|
1845
|
-
"2429784973622283587": {
|
|
1846
|
-
"error_kind": "string",
|
|
1847
|
-
"string": "Can only emit a note log for an existing note."
|
|
1848
|
-
},
|
|
1849
|
-
"2709101749560550278": {
|
|
1850
|
-
"error_kind": "string",
|
|
1851
|
-
"string": "Cannot serialize point at infinity as bytes."
|
|
1852
|
-
},
|
|
1853
|
-
"2920182694213909827": {
|
|
1854
|
-
"error_kind": "string",
|
|
1855
|
-
"string": "attempt to subtract with overflow"
|
|
1856
|
-
},
|
|
1857
|
-
"3151558035338938026": {
|
|
1858
|
-
"error_kind": "fmtstring",
|
|
1859
|
-
"item_types": [
|
|
1860
|
-
{
|
|
1861
|
-
"kind": "integer",
|
|
1862
|
-
"sign": "unsigned",
|
|
1863
|
-
"width": 32
|
|
1864
|
-
}
|
|
1865
|
-
],
|
|
1866
|
-
"length": 75
|
|
1867
|
-
},
|
|
1868
1667
|
"5019202896831570965": {
|
|
1869
1668
|
"error_kind": "string",
|
|
1870
1669
|
"string": "attempt to add with overflow"
|
|
@@ -1873,21 +1672,13 @@
|
|
|
1873
1672
|
"error_kind": "string",
|
|
1874
1673
|
"string": "push out of bounds"
|
|
1875
1674
|
},
|
|
1876
|
-
"
|
|
1675
|
+
"6869395374906889440": {
|
|
1877
1676
|
"error_kind": "string",
|
|
1878
|
-
"string": "
|
|
1677
|
+
"string": "Mismatch note header contract address."
|
|
1879
1678
|
},
|
|
1880
1679
|
"7233212735005103307": {
|
|
1881
1680
|
"error_kind": "string",
|
|
1882
1681
|
"string": "attempt to multiply with overflow"
|
|
1883
|
-
},
|
|
1884
|
-
"8193989641828211937": {
|
|
1885
|
-
"error_kind": "string",
|
|
1886
|
-
"string": "ciphertext length mismatch"
|
|
1887
|
-
},
|
|
1888
|
-
"8270195893599566439": {
|
|
1889
|
-
"error_kind": "string",
|
|
1890
|
-
"string": "Invalid public keys hint for address"
|
|
1891
1682
|
}
|
|
1892
1683
|
},
|
|
1893
1684
|
"parameters": [
|
|
@@ -2233,7 +2024,7 @@
|
|
|
2233
2024
|
}
|
|
2234
2025
|
],
|
|
2235
2026
|
"kind": "struct",
|
|
2236
|
-
"path": "authwit::aztec::protocol_types::
|
|
2027
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
2237
2028
|
}
|
|
2238
2029
|
},
|
|
2239
2030
|
{
|
|
@@ -2352,37 +2143,194 @@
|
|
|
2352
2143
|
"visibility": "private"
|
|
2353
2144
|
},
|
|
2354
2145
|
{
|
|
2355
|
-
"name": "
|
|
2356
|
-
"type": {
|
|
2357
|
-
"kind": "field"
|
|
2358
|
-
},
|
|
2359
|
-
"visibility": "private"
|
|
2360
|
-
},
|
|
2361
|
-
{
|
|
2362
|
-
"name": "signing_pub_key_y",
|
|
2146
|
+
"name": "app_payload",
|
|
2363
2147
|
"type": {
|
|
2364
|
-
"
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
{
|
|
2381
|
-
"
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2148
|
+
"fields": [
|
|
2149
|
+
{
|
|
2150
|
+
"name": "function_calls",
|
|
2151
|
+
"type": {
|
|
2152
|
+
"kind": "array",
|
|
2153
|
+
"length": 4,
|
|
2154
|
+
"type": {
|
|
2155
|
+
"fields": [
|
|
2156
|
+
{
|
|
2157
|
+
"name": "args_hash",
|
|
2158
|
+
"type": {
|
|
2159
|
+
"kind": "field"
|
|
2160
|
+
}
|
|
2161
|
+
},
|
|
2162
|
+
{
|
|
2163
|
+
"name": "function_selector",
|
|
2164
|
+
"type": {
|
|
2165
|
+
"fields": [
|
|
2166
|
+
{
|
|
2167
|
+
"name": "inner",
|
|
2168
|
+
"type": {
|
|
2169
|
+
"kind": "integer",
|
|
2170
|
+
"sign": "unsigned",
|
|
2171
|
+
"width": 32
|
|
2172
|
+
}
|
|
2173
|
+
}
|
|
2174
|
+
],
|
|
2175
|
+
"kind": "struct",
|
|
2176
|
+
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
2177
|
+
}
|
|
2178
|
+
},
|
|
2179
|
+
{
|
|
2180
|
+
"name": "target_address",
|
|
2181
|
+
"type": {
|
|
2182
|
+
"fields": [
|
|
2183
|
+
{
|
|
2184
|
+
"name": "inner",
|
|
2185
|
+
"type": {
|
|
2186
|
+
"kind": "field"
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
],
|
|
2190
|
+
"kind": "struct",
|
|
2191
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
2192
|
+
}
|
|
2193
|
+
},
|
|
2194
|
+
{
|
|
2195
|
+
"name": "is_public",
|
|
2196
|
+
"type": {
|
|
2197
|
+
"kind": "boolean"
|
|
2198
|
+
}
|
|
2199
|
+
},
|
|
2200
|
+
{
|
|
2201
|
+
"name": "is_static",
|
|
2202
|
+
"type": {
|
|
2203
|
+
"kind": "boolean"
|
|
2204
|
+
}
|
|
2205
|
+
}
|
|
2206
|
+
],
|
|
2207
|
+
"kind": "struct",
|
|
2208
|
+
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
},
|
|
2212
|
+
{
|
|
2213
|
+
"name": "nonce",
|
|
2214
|
+
"type": {
|
|
2215
|
+
"kind": "field"
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
],
|
|
2219
|
+
"kind": "struct",
|
|
2220
|
+
"path": "authwit::entrypoint::app::AppPayload"
|
|
2221
|
+
},
|
|
2222
|
+
"visibility": "private"
|
|
2223
|
+
},
|
|
2224
|
+
{
|
|
2225
|
+
"name": "fee_payload",
|
|
2226
|
+
"type": {
|
|
2227
|
+
"fields": [
|
|
2228
|
+
{
|
|
2229
|
+
"name": "function_calls",
|
|
2230
|
+
"type": {
|
|
2231
|
+
"kind": "array",
|
|
2232
|
+
"length": 2,
|
|
2233
|
+
"type": {
|
|
2234
|
+
"fields": [
|
|
2235
|
+
{
|
|
2236
|
+
"name": "args_hash",
|
|
2237
|
+
"type": {
|
|
2238
|
+
"kind": "field"
|
|
2239
|
+
}
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"name": "function_selector",
|
|
2243
|
+
"type": {
|
|
2244
|
+
"fields": [
|
|
2245
|
+
{
|
|
2246
|
+
"name": "inner",
|
|
2247
|
+
"type": {
|
|
2248
|
+
"kind": "integer",
|
|
2249
|
+
"sign": "unsigned",
|
|
2250
|
+
"width": 32
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2253
|
+
],
|
|
2254
|
+
"kind": "struct",
|
|
2255
|
+
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
2256
|
+
}
|
|
2257
|
+
},
|
|
2258
|
+
{
|
|
2259
|
+
"name": "target_address",
|
|
2260
|
+
"type": {
|
|
2261
|
+
"fields": [
|
|
2262
|
+
{
|
|
2263
|
+
"name": "inner",
|
|
2264
|
+
"type": {
|
|
2265
|
+
"kind": "field"
|
|
2266
|
+
}
|
|
2267
|
+
}
|
|
2268
|
+
],
|
|
2269
|
+
"kind": "struct",
|
|
2270
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
2271
|
+
}
|
|
2272
|
+
},
|
|
2273
|
+
{
|
|
2274
|
+
"name": "is_public",
|
|
2275
|
+
"type": {
|
|
2276
|
+
"kind": "boolean"
|
|
2277
|
+
}
|
|
2278
|
+
},
|
|
2279
|
+
{
|
|
2280
|
+
"name": "is_static",
|
|
2281
|
+
"type": {
|
|
2282
|
+
"kind": "boolean"
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
],
|
|
2286
|
+
"kind": "struct",
|
|
2287
|
+
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
2288
|
+
}
|
|
2289
|
+
}
|
|
2290
|
+
},
|
|
2291
|
+
{
|
|
2292
|
+
"name": "nonce",
|
|
2293
|
+
"type": {
|
|
2294
|
+
"kind": "field"
|
|
2295
|
+
}
|
|
2296
|
+
},
|
|
2297
|
+
{
|
|
2298
|
+
"name": "is_fee_payer",
|
|
2299
|
+
"type": {
|
|
2300
|
+
"kind": "boolean"
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
],
|
|
2304
|
+
"kind": "struct",
|
|
2305
|
+
"path": "authwit::entrypoint::fee::FeePayload"
|
|
2306
|
+
},
|
|
2307
|
+
"visibility": "private"
|
|
2308
|
+
},
|
|
2309
|
+
{
|
|
2310
|
+
"name": "cancellable",
|
|
2311
|
+
"type": {
|
|
2312
|
+
"kind": "boolean"
|
|
2313
|
+
},
|
|
2314
|
+
"visibility": "private"
|
|
2315
|
+
}
|
|
2316
|
+
],
|
|
2317
|
+
"return_type": {
|
|
2318
|
+
"abi_type": {
|
|
2319
|
+
"fields": [
|
|
2320
|
+
{
|
|
2321
|
+
"name": "call_context",
|
|
2322
|
+
"type": {
|
|
2323
|
+
"fields": [
|
|
2324
|
+
{
|
|
2325
|
+
"name": "msg_sender",
|
|
2326
|
+
"type": {
|
|
2327
|
+
"fields": [
|
|
2328
|
+
{
|
|
2329
|
+
"name": "inner",
|
|
2330
|
+
"type": {
|
|
2331
|
+
"kind": "field"
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2386
2334
|
],
|
|
2387
2335
|
"kind": "struct",
|
|
2388
2336
|
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
@@ -3339,7 +3287,7 @@
|
|
|
3339
3287
|
}
|
|
3340
3288
|
],
|
|
3341
3289
|
"kind": "struct",
|
|
3342
|
-
"path": "authwit::aztec::protocol_types::
|
|
3290
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
3343
3291
|
}
|
|
3344
3292
|
},
|
|
3345
3293
|
{
|
|
@@ -3450,72 +3398,92 @@
|
|
|
3450
3398
|
"visibility": "databus"
|
|
3451
3399
|
}
|
|
3452
3400
|
},
|
|
3453
|
-
"bytecode": "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",
|
|
3454
|
-
"debug_symbols": "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",
|
|
3401
|
+
"bytecode": "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",
|
|
3402
|
+
"debug_symbols": "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+pP339yiqtv6U1/53tYfvv8660997Xtbf+o/9N7Wn/ovvbf1p950vq0/9a5zOeILqx5/f+Mbq5z1J++/uZ1Vt/Un77+5rVW39Se//s3trbqtP/n1b25zVTniq6se80N8d5Wz/uT7z7ntVbf1J++/8f1VzvqT99/cBqvb+pP339wOq3Lklljd1p/8+je3xuq2/uTXv/FFVo/5Ib7Jyll/8v3n3C6r2/qT99/4NqvH68+ts7qtP3n/zS20uq0/ef/NrbS6rT/59W9uqdVt/cmvf+NrrR7zQ3yv1eP15xZb3daffP85vtrq8fc3vtvKWX/y/pvbbnVbf/L+m9tvdVt/8uvf3IarcuRWXN3Wn/z6N77k6jE/xLdcOesP33+d9Sfff44vunK+v8n7b27V1W39yftvbtnVbf3J+29u3dVt/cmvf3MLr27rT379G1959Zgf4juvnPUn33/Obb0qR3zt1ePvb3zvlbP+5P03t/nqtv7k/Te3++q2/uTXv7ntV7f1J7/+Te6/KvH9Vw/5ocT3Xznrz73/XJL7r8qRu/+W+P4rZ/25+29J7r8qyf1XJbn/qiT3X5Xk/quS3H9VkvuvSnz/1WN+iO+/ctafe/+5JPdflfj+K+f7m7z/JvdfleT+q5Lcf1WS+69Kcv9VSe6/Ksn9VyW5/6rE91895of4/qvH60/uvyrJ/Vclvv/q8fc3vv/KWX/y/pvcf1WS+69Kcv9VSe6/Ksn9VyW5/6ok91+V+P6rx/wQ33/lrD98/3XWn3z/Ob7/yvn+Ju+/yf1XJbn/qiT3X5Xk/quS3H9VkvuvSnL/VUnuvyrx/VeP+SG+/8pZf/L95+T+qxLff/X4+xvff+WsP3n/Te6/Ksn9VyW5/6ok91+V5P6rktx/VZL7r0p8/9Vjfojvv3LWn3z/Obn/qsT3Xznf3+T9N7n/qiT3X5Xk/quS3H9VkvuvSnL/VUnuvyrJ/Vclvv/qMT/E918560++/5zcf1Xi+6+c72/y/pvcf1WS+69Kcv9VSe6/Ksn9VyW5/6ok91+V5P6rEt9/9Zgf4vuvHq5fkvuvJLn/SuL7rx5+fyW+/8pZf+7+K8n9V5LcfyXJ/VeS3H8lyf1Xktx/Jcn9VxLff/WYH+L7r5z1h++/zvpz7z9LfP+V8/1N3n+T+68kuf9KkvuvJLn/SpL7ryS5/0qS+68kuf9K4vuv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lirRpaEnpyWxVDkMlZbEUuUgsVQ5SCxVojtjT06LYqmCYqmCYqmCYqmCYqlfL2h9adqLsdS8G1PaLO/TXoylnLQXYykn7cVYykl7MZZ6nFYuxlJO2ouxlJP2YizlpL0YSzlpDZUWxVKCYilBsZSgWEpQLKUollIUSymKpRTFUr9eAfzStCiWUhRLKYqlFMVSimIpQ7FUdF/6yWlRLGUoljpFlZ4nLYqlDMVShmIpQ7FUdO/5uWmjS89PTotiqei685PTolgquuj85LQoloquOD85LYqlosvNT06LYqnoWvOT06JYKrrQ/OS0KJaKLjM/OS2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSoljqat5zJy2Kpa7mPXfSklhKruY9d9KSWEqu5j130pJYSg5DpSWxlFzNe+6kJbGUXM177qRFsdTVvOdOWhRLXc177qRFsdTVvOdOWhRLobzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5orznivKeK8p7rijvuR6GSktiKUV5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1X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Pb+lRbEUyXt+S4tiKZL3/JYWxVIk7/ktLYqlSN7zW1oUS5G857e0KJYiec9vaVEsRfKe39KiWIrkPb+lRbEUyXt+S4tiKZL3/JYWxVIk7/ktLYqlSN7zW1oUS5G857e0KJYiec9vaVEsRfKe39KiWIrkPb+lRbEUyXt+S4tiKZL3/JYWxVIk7/ktLYqlSN7zW1oUS5G857e0KJYiec9vaVEsRfKe39KiWIrkPb+lRbEUyXt+S4tiKZL3/JYWxVIk7/ktLYqlSN7zW1oUS5G857e0KJYiec9vaUksVVDe84LynheU97ygvOflMFRaEksVlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKey4o77mgvOeC8p4Lynt+e2tUWhJLCcp7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5orznivKeK8p7rijvuR6GSkti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23FfyrTyPkFwUPrsn8NHuf85fMiPv8z372mDc9LJaYNj0slpg1PSyWmDQ9K5aTU4I306bbu3lTHqu7TBEenktMEJ6eS0wQHp5LSGSns1lnqc9mos9Tjt1VjqcdqrsdTjtFdjqYdpDcVShmIpQ7GUoVjqFEFznrQoljIUSxmKpQzFUoZiqYpiqYpiqYpiqYpiqVMEzXnSoliqoliqoliqoliqoliqoViqoViqoViqoVjqFEFznrQolmoolmoolmoolmooluooluooluooluooljpF0JwnLYqlOoqlOoqlOoqlOoqlBoqlBoqlBoqlBoqlThE050mLYqmBYqmBYqmBYqmBYqmJYqmJYqmJYqmJYqlTPNt50qJYaqJYaqJYaqJYapJYqkT3n5+clsRSJbr5/OS0JJYqh6HSkliqRLedn5yWxFIluuf85LQolopuOD85LYqlorvNT06LYqnoVvOT06JYKrrT/OS0KJaKbjQ/OS2KpaL7zE9Oi2Kp6Dbzk9OiWCq6y/zktCiWupz3/HFaFEtdznv+OC2KpVDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOflat7zedzvPjjL+7QXYykn7cVYykl7MZZy0hoq7cVYykl7MZZy0l6MpZy0F2MpJ+3FWOpx2qt5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSYtiqat5z520KJa6mvfcSUtiKbma99xJS2IpuZr33ElLYqnbW6PSklhKruY9d9KSWEqu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJYCuU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFHec0V5zxXlPVeU91wPQ6UlsZSivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynhvKe24o77mhvOeG8p7bYai0JJYylPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3vOK8p5XlPe8orznFeU9r4eh0pJYqqK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7z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3LjXoiw37rUYy417LcJy416Lrx7HrcdxLbpy416Lrdy41yIrN+61uMqNa9Hj9nb/+cSNAcv7BMFBSQ7V+5+SDm3D+cBGuf8AZMi8P7h/Txuck05OGxyTTk4bnJJOThscks5NW4Iz0qfTtntbGaO+SxsckU5OG5yQTk4bHJBOTmuotFdjqcdpr8ZSj9NejaUep70aSz1OezWWephWUCwlKJYSFEsJiqVeoCx9ZVoUSwmKpQTFUoJiKUGxlKJYSlEspSiWUhRLvUA1+8q0KJZSFEspiqUUxVKKYilDsZShWMpQLGUolnqBIviVaVEsZSiWMhRLGYqlDMVSFcVSFcVSFcVSFcVSL1A7vzItiqUqiqUqiqUqiqUqiqUaiqUaiqUaiqUaiqVeoK1+ZVoUSzUUSzUUSzUUSzUUS3UUS3UUS3UUS3UUS73A+P3KtCiW6iiW6iiW6iiW6iiWiu4/PzktiqWim89PTotiqejO85PTolgquu385LQoloruOT85LYqlohvOT06LYqnobvOT06JYKrrV/OS0KJaK7jQ/OS2KpaIbzU9OS2KpEt1nfnJaEkuV6Dbzk9OSWKochkpLYqlyOe/547QkliqX854/TotiKZT3vKC85wXlPS8o73lBec8LynteUN7zgvKeF5T3vKC85wXlPS8o73lBec8LynteUN7zgvKeF5T3vKC85wXlPS8o73m5mvd8Hve7D87yPu3FWMpJezGWctJejKWctIZKezGWctJejKWctBdjKSftxVjKSXsxlnqc9mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130pJYSq7mPXfSklhKruY9d9KSWOr21qi0JJaSq3nPnbQklpKrec+dtCiWupr33EmLYqmrec+dtCiWupr33EmLYqmrec+dtCiWupr33EmLYqmrec+dtCiWupr33EmLYqmrec+dtCiWupr33EmLYqmrec+dtCiWQnnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T1XlPdcUd5zRXnPFeU918NQaUkspSjvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznhvKeG8p7bijvuaG853YYKi2JpQzlPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T3vKK85xXlPa8o73lFec/rYai0JJaqKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yivOcV5T2vKO95RXnPK8p7XlHe84rynleU97yhvOcN5T1vKO95Q3nP22GotCSWaijveUN5zxvKe95Q3vOG8p43lPe8obznDeU9byjveUN5zxvKe95Q3vOG8p43lPe8vcB7rnZfvk5z0pbbrqi+vfjts5k/p/2WoKRPIMET3FZ43BNILc4RN8r9iBsy3x1xikprqLQVlbah0nZU2oFKOy+Wtuk97XjHPBqdec5NG52Pzk17NZZ6nPZqLPU4raHSXo2lHqe9Gks9Tns1lnqc9mos9TgtiqUMxVKGYilDsZShWOoFfvJXpkWxlKFYylAsZSiWMhRLVRRLVRRLVRRLVRRLvcBP/sq0KJaqKJaqKJaqKJaqKJZqKJZqKJZqKJZqKJZ6gZ/8lWlRLNVQLNVQLNVQLNVQLNVRLNVRLNVRLNVRLPUCP/kr06JYqqNYqqNYqqNYqqNYaqBYaqBYaqBYaqBY6gV+8lemRbHUQLHUQLHUQLHUQLHURLHURLHURLHURLHUC/zkr0yLYqmJYqmJYqmJYqlJYql+kFiqHySW6geJpfpBYql+GCotiaX6QWKpfpBYqh8kluoHiqUKiqUKiqUKiqUKiqVe4Cd/ZVoUSxUUS5WLsdRDh3UvF2MpJ210lura3h5+++9Zf077R4LwznE/QXTm8RNE5xg/QXQ28RNY+gTRGcJPEJ0L/ATRe72fIHr/9hOk78nhndh+gvQ9Oby72k+QvieHd0z7CdL35PAuaD9B+p4c3tnsJ0jfk8O7lf0E6XtyeAeynyB9Tw7vKvYTpO/J4Z3CfoL0PTm8+9dPkL4nh3f0+gnS9+TwLl0/QfqeHN556ydI35PDu2n9BOl7cniHrJ8gfU8O73r1E6TvyeGdrH6C9D05vDvVT5C+J4d3nPoJ0vfk8C5SP0H6nhzeGeonSN+Tw7s9/QTpe3J4B6efIH1PDu/K9BOk78nhnZZ+gvQ9Obx70k+QvieHd0T6CdL35PAuRz9B+p4c3rnoJ0jfk8O7Ef0E6XtyeIehnyB9Tw7vGvQTpO/J4Z2AfoL0PTm8u89PkL4nh3fs+Qmy9+QR3oXnJ8jek0d4Z52fIHtPHkf2njzC++L8BNl78gjvdfMTZO/JI7x/zU0Q3qnmJ0jfk8O7z/wE6XtyeEeZnyB9Tw7vEvMTpO/J4Z1ffoL0PTm9x2uk93iN9B6vkd7jNdJ7vEZ6j9dI7/Ea6T1eI73Ha6T3eI30Hq+R3uM10nu8RnqP10jv8RrpPV4jvcdrpPd4jfQer5He4zXSe7xGeo/XSO/xGuk9XiO9x2uk93iN9B6vkd7jNdJ7vEZ6j9dI7/Ea6T1eI73Ha6T3eI30Hq+R3uM10nu8RnqP10jv8RrpPV4jvcdrpPd4jfQer5He4zXSe7xGeo/XSO/xGuk9XiO9x2uk93iN9B6vkd7jNdJ7vEZ6j9dI7/Ea6T1eI73Ha6T3eI30Hq+R3uM10nu8RnqP10jv8RrpPV4jvcdrpPd4jfQer5He4zXSe7xGeo/XSO/xGuk9XiO9x2uk93iN9B6vkd7jNdJ7vEZ6j9dI7/Ea6T1eM73Ha6b3eM30Hq+Z3uM1j+w9eab3eM30Hq+Z3uM103u8ZnqP10zv8ZrpPV4zvcdrpvd4zfQer5ne4zXTe7xmeo/XTO/xmuk9XjO9x2um93jN9B6vmd7jNdN7vGZ6j9dM7/Ga6T1eM73Ha6b3eM30Hq+Z3uM103u8ZnqP10zv8ZrpPV4zvcdrpvd4zfQerxne49VEjrcXb1LLzwneP7zd/rT5/dHtthd2f3D/lja88+vctNF7/blpo3PBuWmjM8S5aQ2VNjqbnJs2OsecmzY48zx69LcAwZHHDxCceNwA0SVpfoDgXOIHCI4afoDg9OAHsOwBgvd4P0Dwtu0H+OWduMx6vxifozoBapv6/dG1H+P+6NK/X7r/ejna2QFm8gAvUKMd1t6O6mMWD11nsfuLz9LsMbqK6LC3Vxcr+m636AUmtRcHFlpgpQU2WuBKC9xogTst8KAFnrDAnUZanUZanUZanUZaL5D1fWXgVsrb1WEr+kHca3GWG/dalOXGvRZjuXGvRVhu3GvxlRd3XIuu3LjXYis37rXIyo17La5y41r0uL3dfz4xp5X3CYKDkhyq9z8lHdqG84GNcv8ByJB5f/D3PzuN4Jx0ctrgmHRy2uCUdHLa4JB0btoZnJE+nbbd28oY736mNoMj0slpgxPSyWmDA9LJaQ2V9mos9Tjt1VjqcdqrsdTjtFdjqcdpr8ZSD9K24wCx1C0tiKVuaUEsdUsLYqlbWkOlBbHULS2IpW5pQSx1SwtiqVtaFEsVFEsVFEsVFEsVFEu9QDX7yrQolioolioolioolioolhIUSwmKpQTFUoJiqRcogl+ZFsVSgmIpQbGUoFhKUCylKJZSFEspiqUUxVIvUDu/Mi2KpRTFUopiKUWxlKJYylAsZSiWMhRLGYqlXqCtfmVaFEsZiqUMxVKGYilDsVRFsVRFsVRFsVRFsdQLjN+vTItiqYpiqYpiqYpiqYpiqej+85PTolgquvn85LQoloruPD85LYqlotvOT06LYqnonvOT06JYKrrh/OS0KJaK7jY/OS2KpaJbzU9Oi2Kp6E7zk9OiWCq60fzktCiWiu4zPzktiqWi28xPTotiqegu85PToljqct7zx2lRLHU57/njtCiWInnPb2lRLEXynt/SoliK5D2/pUWxFMl7fkuLYimS9/yWlsRSBeU9LyjveUF5zwvKe14OQ6UlsVRBec8LynteUN7zgvKel6t5z+dxv/vgLO/TXoylnLQXYykn7cVYyklrqLQXYykn7cVYykl7MZZy0l6MpZy0F2Opx2mv5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiqWu5j130qJY6mrecyctiaXkat5zJy2JpeRq3nMnLYmlbm+NSktiKbma99xJS2IpuZr33EmLYimU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zRXnPFeU9V5T3XFHecz0MlZbEUorynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7bijvuaG854bynhvKe26HodKSWMpQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zw3lPTeU99xQ3nNDec8N5T03lPfcUN5zQ3nPDeU9N5T33FDec0N5zyvKe15R3vOK8p5XlPe8HoZKS2KpivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8o73lFec8rynteUd7zivKeV5T3vKK85xXlPa8v8J6r3Zev05y0pc6hby/eypw/p/2WoKRPIMETNJHjnkBqcY64Ue5H3JD57ohTVFpDpa2otA2VtqPSDlTaebG0Te9px18zTzuiM8+5aaPz0blpr8ZSj9NejaUepzVU2qux1OO0V2Opx2mvxlKP016NpR6nRbFUQbFUQbFUQbFUQbHUC/zkr0yLYqmCYqmCYqmCYqmCYilBsZSgWEpQLCUolnqBn/yVaVEsJSiWEhRLCYqlBMVSimIpRbGUolhKUSz1Aj/5K9OiWEpRLKUollIUSymKpQzFUoZiKUOxlKFY6gV+8lemRbGUoVjKUCxlKJYyFEtVFEtVFEtVFEtVFEu9wE/+yrQolqoolqoolqoolqoolmoolmoolmoolmoolnqBn/yVaVEs1VAs1VAs1VAs1VAs1VEs1VEs1VEs1VEs9QI/+SvToliqo1iqo1iqo1iqo1hqoFhqoFhqoFhqoFjqBX7yV6ZFsdRAsdSIzlJd29vDb/89689pvyWIzkd+gujM4yYI7wb3E0RnEz9BdN7wE0RnCD+BpU8Qvdf7CaL3bz9B+p4c3ontJ8jek3t4d7WfIHtP7uEd036C7D25H9l7cg/vd/YTZO/JPbyH2U+QvSf38L5k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",
|
|
3455
3403
|
"brillig_names": [
|
|
3456
|
-
"
|
|
3404
|
+
"get_note_internal",
|
|
3457
3405
|
"decompose_hint",
|
|
3458
|
-
"
|
|
3459
|
-
"
|
|
3460
|
-
"
|
|
3461
|
-
"
|
|
3462
|
-
"
|
|
3463
|
-
"random",
|
|
3464
|
-
"field_less_than",
|
|
3465
|
-
"build_msg_block",
|
|
3466
|
-
"attach_len_to_msg_block",
|
|
3467
|
-
"get_app_tag_as_sender",
|
|
3468
|
-
"increment_app_tagging_secret_index_as_sender_wrapper",
|
|
3469
|
-
"directive_integer_quotient",
|
|
3406
|
+
"get_auth_witness",
|
|
3407
|
+
"enqueue_public_function_call_internal",
|
|
3408
|
+
"call_private_function_internal",
|
|
3409
|
+
"debug_log_oracle_wrapper",
|
|
3410
|
+
"notify_set_min_revertible_side_effect_counter_oracle_wrapper",
|
|
3470
3411
|
"directive_invert",
|
|
3412
|
+
"directive_integer_quotient",
|
|
3471
3413
|
"directive_to_radix"
|
|
3472
3414
|
],
|
|
3473
|
-
"verification_key": "
|
|
3474
|
-
"artifact_hash": "
|
|
3415
|
+
"verification_key": "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",
|
|
3416
|
+
"artifact_hash": "ff6671ddb572df3d961df43ed4c3adf75a7d3763-358961913499359414110b453e76a4fe-client-ivc-true"
|
|
3475
3417
|
},
|
|
3476
3418
|
{
|
|
3477
|
-
"name": "
|
|
3419
|
+
"name": "constructor",
|
|
3478
3420
|
"is_unconstrained": false,
|
|
3479
3421
|
"custom_attributes": [
|
|
3480
3422
|
"private",
|
|
3481
|
-
"
|
|
3423
|
+
"initializer"
|
|
3482
3424
|
],
|
|
3483
3425
|
"abi": {
|
|
3484
3426
|
"error_types": {
|
|
3485
|
-
"
|
|
3486
|
-
"error_kind": "
|
|
3487
|
-
"
|
|
3488
|
-
"length": 20
|
|
3427
|
+
"14514982005979867414": {
|
|
3428
|
+
"error_kind": "string",
|
|
3429
|
+
"string": "attempt to bit-shift with overflow"
|
|
3489
3430
|
},
|
|
3490
3431
|
"16761564377371454734": {
|
|
3491
3432
|
"error_kind": "string",
|
|
3492
3433
|
"string": "Array index out of bounds"
|
|
3493
3434
|
},
|
|
3494
|
-
"
|
|
3435
|
+
"17618083556256589634": {
|
|
3495
3436
|
"error_kind": "string",
|
|
3496
|
-
"string": "
|
|
3437
|
+
"string": "Initialization hash does not match"
|
|
3497
3438
|
},
|
|
3498
3439
|
"17843811134343075018": {
|
|
3499
3440
|
"error_kind": "string",
|
|
3500
3441
|
"string": "Stack too deep"
|
|
3501
3442
|
},
|
|
3502
|
-
"
|
|
3443
|
+
"2233873454491509486": {
|
|
3503
3444
|
"error_kind": "string",
|
|
3504
|
-
"string": "
|
|
3445
|
+
"string": "Initializer address is not the contract deployer"
|
|
3505
3446
|
},
|
|
3506
|
-
"
|
|
3447
|
+
"2429784973622283587": {
|
|
3507
3448
|
"error_kind": "string",
|
|
3508
|
-
"string": "
|
|
3449
|
+
"string": "Can only emit a note log for an existing note."
|
|
3509
3450
|
},
|
|
3510
|
-
"
|
|
3451
|
+
"2709101749560550278": {
|
|
3511
3452
|
"error_kind": "string",
|
|
3512
|
-
"string": "
|
|
3453
|
+
"string": "Cannot serialize point at infinity as bytes."
|
|
3454
|
+
},
|
|
3455
|
+
"2920182694213909827": {
|
|
3456
|
+
"error_kind": "string",
|
|
3457
|
+
"string": "attempt to subtract with overflow"
|
|
3458
|
+
},
|
|
3459
|
+
"3151558035338938026": {
|
|
3460
|
+
"error_kind": "fmtstring",
|
|
3461
|
+
"item_types": [
|
|
3462
|
+
{
|
|
3463
|
+
"kind": "integer",
|
|
3464
|
+
"sign": "unsigned",
|
|
3465
|
+
"width": 32
|
|
3466
|
+
}
|
|
3467
|
+
],
|
|
3468
|
+
"length": 75
|
|
3469
|
+
},
|
|
3470
|
+
"5019202896831570965": {
|
|
3471
|
+
"error_kind": "string",
|
|
3472
|
+
"string": "attempt to add with overflow"
|
|
3473
|
+
},
|
|
3474
|
+
"6485997221020871071": {
|
|
3475
|
+
"error_kind": "string",
|
|
3476
|
+
"string": "call to assert_max_bit_size"
|
|
3513
3477
|
},
|
|
3514
3478
|
"7233212735005103307": {
|
|
3515
3479
|
"error_kind": "string",
|
|
3516
3480
|
"string": "attempt to multiply with overflow"
|
|
3517
|
-
}
|
|
3518
|
-
|
|
3481
|
+
},
|
|
3482
|
+
"8193989641828211937": {
|
|
3483
|
+
"error_kind": "string",
|
|
3484
|
+
"string": "ciphertext length mismatch"
|
|
3485
|
+
}
|
|
3486
|
+
},
|
|
3519
3487
|
"parameters": [
|
|
3520
3488
|
{
|
|
3521
3489
|
"name": "inputs",
|
|
@@ -3859,7 +3827,7 @@
|
|
|
3859
3827
|
}
|
|
3860
3828
|
],
|
|
3861
3829
|
"kind": "struct",
|
|
3862
|
-
"path": "authwit::aztec::protocol_types::
|
|
3830
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
3863
3831
|
}
|
|
3864
3832
|
},
|
|
3865
3833
|
{
|
|
@@ -3978,173 +3946,16 @@
|
|
|
3978
3946
|
"visibility": "private"
|
|
3979
3947
|
},
|
|
3980
3948
|
{
|
|
3981
|
-
"name": "
|
|
3982
|
-
"type": {
|
|
3983
|
-
"fields": [
|
|
3984
|
-
{
|
|
3985
|
-
"name": "function_calls",
|
|
3986
|
-
"type": {
|
|
3987
|
-
"kind": "array",
|
|
3988
|
-
"length": 4,
|
|
3989
|
-
"type": {
|
|
3990
|
-
"fields": [
|
|
3991
|
-
{
|
|
3992
|
-
"name": "args_hash",
|
|
3993
|
-
"type": {
|
|
3994
|
-
"kind": "field"
|
|
3995
|
-
}
|
|
3996
|
-
},
|
|
3997
|
-
{
|
|
3998
|
-
"name": "function_selector",
|
|
3999
|
-
"type": {
|
|
4000
|
-
"fields": [
|
|
4001
|
-
{
|
|
4002
|
-
"name": "inner",
|
|
4003
|
-
"type": {
|
|
4004
|
-
"kind": "integer",
|
|
4005
|
-
"sign": "unsigned",
|
|
4006
|
-
"width": 32
|
|
4007
|
-
}
|
|
4008
|
-
}
|
|
4009
|
-
],
|
|
4010
|
-
"kind": "struct",
|
|
4011
|
-
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
4012
|
-
}
|
|
4013
|
-
},
|
|
4014
|
-
{
|
|
4015
|
-
"name": "target_address",
|
|
4016
|
-
"type": {
|
|
4017
|
-
"fields": [
|
|
4018
|
-
{
|
|
4019
|
-
"name": "inner",
|
|
4020
|
-
"type": {
|
|
4021
|
-
"kind": "field"
|
|
4022
|
-
}
|
|
4023
|
-
}
|
|
4024
|
-
],
|
|
4025
|
-
"kind": "struct",
|
|
4026
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4027
|
-
}
|
|
4028
|
-
},
|
|
4029
|
-
{
|
|
4030
|
-
"name": "is_public",
|
|
4031
|
-
"type": {
|
|
4032
|
-
"kind": "boolean"
|
|
4033
|
-
}
|
|
4034
|
-
},
|
|
4035
|
-
{
|
|
4036
|
-
"name": "is_static",
|
|
4037
|
-
"type": {
|
|
4038
|
-
"kind": "boolean"
|
|
4039
|
-
}
|
|
4040
|
-
}
|
|
4041
|
-
],
|
|
4042
|
-
"kind": "struct",
|
|
4043
|
-
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
4044
|
-
}
|
|
4045
|
-
}
|
|
4046
|
-
},
|
|
4047
|
-
{
|
|
4048
|
-
"name": "nonce",
|
|
4049
|
-
"type": {
|
|
4050
|
-
"kind": "field"
|
|
4051
|
-
}
|
|
4052
|
-
}
|
|
4053
|
-
],
|
|
4054
|
-
"kind": "struct",
|
|
4055
|
-
"path": "authwit::entrypoint::app::AppPayload"
|
|
4056
|
-
},
|
|
4057
|
-
"visibility": "private"
|
|
4058
|
-
},
|
|
4059
|
-
{
|
|
4060
|
-
"name": "fee_payload",
|
|
3949
|
+
"name": "signing_pub_key_x",
|
|
4061
3950
|
"type": {
|
|
4062
|
-
"
|
|
4063
|
-
{
|
|
4064
|
-
"name": "function_calls",
|
|
4065
|
-
"type": {
|
|
4066
|
-
"kind": "array",
|
|
4067
|
-
"length": 2,
|
|
4068
|
-
"type": {
|
|
4069
|
-
"fields": [
|
|
4070
|
-
{
|
|
4071
|
-
"name": "args_hash",
|
|
4072
|
-
"type": {
|
|
4073
|
-
"kind": "field"
|
|
4074
|
-
}
|
|
4075
|
-
},
|
|
4076
|
-
{
|
|
4077
|
-
"name": "function_selector",
|
|
4078
|
-
"type": {
|
|
4079
|
-
"fields": [
|
|
4080
|
-
{
|
|
4081
|
-
"name": "inner",
|
|
4082
|
-
"type": {
|
|
4083
|
-
"kind": "integer",
|
|
4084
|
-
"sign": "unsigned",
|
|
4085
|
-
"width": 32
|
|
4086
|
-
}
|
|
4087
|
-
}
|
|
4088
|
-
],
|
|
4089
|
-
"kind": "struct",
|
|
4090
|
-
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
4091
|
-
}
|
|
4092
|
-
},
|
|
4093
|
-
{
|
|
4094
|
-
"name": "target_address",
|
|
4095
|
-
"type": {
|
|
4096
|
-
"fields": [
|
|
4097
|
-
{
|
|
4098
|
-
"name": "inner",
|
|
4099
|
-
"type": {
|
|
4100
|
-
"kind": "field"
|
|
4101
|
-
}
|
|
4102
|
-
}
|
|
4103
|
-
],
|
|
4104
|
-
"kind": "struct",
|
|
4105
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4106
|
-
}
|
|
4107
|
-
},
|
|
4108
|
-
{
|
|
4109
|
-
"name": "is_public",
|
|
4110
|
-
"type": {
|
|
4111
|
-
"kind": "boolean"
|
|
4112
|
-
}
|
|
4113
|
-
},
|
|
4114
|
-
{
|
|
4115
|
-
"name": "is_static",
|
|
4116
|
-
"type": {
|
|
4117
|
-
"kind": "boolean"
|
|
4118
|
-
}
|
|
4119
|
-
}
|
|
4120
|
-
],
|
|
4121
|
-
"kind": "struct",
|
|
4122
|
-
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
4123
|
-
}
|
|
4124
|
-
}
|
|
4125
|
-
},
|
|
4126
|
-
{
|
|
4127
|
-
"name": "nonce",
|
|
4128
|
-
"type": {
|
|
4129
|
-
"kind": "field"
|
|
4130
|
-
}
|
|
4131
|
-
},
|
|
4132
|
-
{
|
|
4133
|
-
"name": "is_fee_payer",
|
|
4134
|
-
"type": {
|
|
4135
|
-
"kind": "boolean"
|
|
4136
|
-
}
|
|
4137
|
-
}
|
|
4138
|
-
],
|
|
4139
|
-
"kind": "struct",
|
|
4140
|
-
"path": "authwit::entrypoint::fee::FeePayload"
|
|
3951
|
+
"kind": "field"
|
|
4141
3952
|
},
|
|
4142
3953
|
"visibility": "private"
|
|
4143
3954
|
},
|
|
4144
3955
|
{
|
|
4145
|
-
"name": "
|
|
3956
|
+
"name": "signing_pub_key_y",
|
|
4146
3957
|
"type": {
|
|
4147
|
-
"kind": "
|
|
3958
|
+
"kind": "field"
|
|
4148
3959
|
},
|
|
4149
3960
|
"visibility": "private"
|
|
4150
3961
|
}
|
|
@@ -5122,7 +4933,7 @@
|
|
|
5122
4933
|
}
|
|
5123
4934
|
],
|
|
5124
4935
|
"kind": "struct",
|
|
5125
|
-
"path": "authwit::aztec::protocol_types::
|
|
4936
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
5126
4937
|
}
|
|
5127
4938
|
},
|
|
5128
4939
|
{
|
|
@@ -5233,50 +5044,234 @@
|
|
|
5233
5044
|
"visibility": "databus"
|
|
5234
5045
|
}
|
|
5235
5046
|
},
|
|
5236
|
-
"bytecode": "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",
|
|
5237
|
-
"debug_symbols": "7b3briNJcqb7Ln1dF+Fu5qd5lQ1hoEPPoIFGt6DDBjYEvfuOrMzFzKpFp2mxYiXN/HNdDFQaBum/ZTDsC1+0L/7rT//y53/6z//7v//yt//z93//0//6f/7rT3/9+z//43/85e9/O//rv/4k8uv/7d//9R//9uU///0//vHf/uNP/yvVcfzypz//7V/O/7Udx3//8qf/85e//vlP/0tz++9f3r06d+nfXp17/f7qpPnOq6Wk8e3VUkY2Xj2O8raScVS5vTrn486rk9zeO4n076+u91585Pr24qOVH1/8D7/8SXQX5n5hyi7M/cLUXZj7hWm7MPcL03dh7hdm7MLcLYweuzD3C5N2Ye4XJu/C3C/MJt9JYXQX5n5hNvlOCrPJd1KYTb6TwmzynRRmk+/9wpRNvpPCbPKdFGaT76Qwm3wnhdFdmPuF2eQ7Kcwm30lhNvlOCrPJd1KYTb73C1M3+U4Ks8l3UphNvpPCbPKdFEZ3Ye4XZpPvpDCbfCeF2eQ7Kcwm30lhNvneL0zb5DspzCbfSWE2+U4Ks8l3UhjdhblfmE2+k8K4J9/e3gqTjmQVpnV5W3c/8h8qjHvyfVVh3JPvqwpzAfnKaPnbq/U4vn+zh3z5hH58+ifcZbGcy9s/QM6tGZ+QSrmVtNRxe7WI3nt1uv1zpdyOH15971/gPFneVtJrzj/vOtnzLsz9wsguzP3C6C7M/cKUXZj7ham7MPcL03Zh7hem78LcL8zYhblbmHHswtwvzCbfSWE2+U4Ks8l3UhjdhblfmE2+k8Js8p0UZpPvpDCbfCeF2eR7vzDp2Og7q8xm31llNvzOKrPpd1YZ3ZWZVGbz76wyG4BnldkEPKuMewTWeqvMD3/k//Q/xKfDPQO/qjLpEgZu3yvT7cq075Up+sOrm6tvU0q7MpPK5F2ZSWVkV2ZSGd2VmVSm7MpMKlN3ZSaVabsyk8r0XZlJZcauzP3K5M3As8psBp5VZjPwrDKbgWeV0V2ZSWXcM/Cr9meyewZ+WWUuYeDbGZ9qOYzKvDBrB2UdnKxyBXnWevu+tpSNrLnnt9mw3Esx3juP/jYbJkf6fo0/P+jOqyVrent1bt9X0svXsIkUNi8VVm/rlnLUH8PeXfbtC9KO9q4ywq1M+6Eyo7+rjC5VmXK7qkrpVmWO21uff5L6Dh2t33lxyW+vLXn8sOZ+92sq9fvX9Purc/pa8rJLfnnJRfVtFTLqu5LXXfKffZa3XfKffZb3XfKffZaPXfKffJbrWvcvPkrebvWQnuSHNX8t+Vp3UR8qeU63kuf8m5L/Wpm1brmurMxat1xXVkbBlam3rSn5wftz9wKWxnc/05GsLbLXbagp+H5uyX/PxW4Wx+3VNbfH/55Djjf0GpK/a8uG3FtHGuWtjuf/3suPL/+1kIvdAr6ukD//xu5c9dt7j/pbnduvK/rp9z1y3PYx5Wjj3YrK4W5Fyd2KsrsVibsVqbsVFXcrqu5W1NytqLtbkbtrdnV3za7urtnV3TW7urtmV3fX7Oruml3dXbOru2t2dXfNru6u2c3dNbu5u2Y3d9fs5u6a3dxds5u7a3Zzd81u7q7Zzd01u7m7Znd31+zu7prd3V2zu7trdnd3ze7urtnd3TW7u7tmd3fX7O7umj3cXbOHu2v2cHfNHu6u2cPdNXu4u2YPd9fs4e6aPdxds4e3a3Y+vF2z8+Htmp0Pb9fsfHi7ZufD2zU7H96u2fnwds3Oh7drdj68XbPz4e6andxds5O7a3Zyd81O7q7Zyd01O7m7Zid31+zk7pqd3F2zk7trdnZ3zc7urtnZ3TU7u7tmZ3fX7Ozump3dXbOzu2t2dnfNzu6u2eLumi3urtni7pot7q7Z4u6aLe6u2eLumi3urtni7pot7q7Z6u6are6u2erumq3urtnq7pqt7q7Z6u6are6u2erumu1uDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgs7s5yOxuDjK7m4PM7uYgxd0cpLibgxR3c5Dibg5SDm/XbHE3Bynu5iDF3RykuJuDFHdzkOJuDlLczUGKuzlIcTcHKe7mIMXdHKS4m4MUd3OQ4m4OUtzNQYq7OUhxNwcp7uYgxd0cpLibgxR3c5Dibg5S3M1Birs5SHE3Bynu5iDF3RykuJuDFHdzkOJuDlLczUGKuzlIcTcHKe7mIMXdHKS4m4MUd3OQ4m4OUtzNQYq7OUhxNwcp7uYgxd0cpLibgxR3c5Dibg5S3M1Birs5SHE3Bynu5iDF3RykuJuDFHdzkOJuDlLczUGKuzlIcTcHKe7mIMXdHKS4m4MUd3OQ4m4OUtzNQYq7OUhxNwcp7uYgxd0cpLibgxR3c5Dibg5S3M1Birs5SHE3Bynu5iDF3RykuJuDFHdzkOJuDlLczUGKuzlIcTcHKe7mIMXdHKS4m4MUd3OQ4m4OUtzNQYq7OUhxNwcp7uYgxd0cpLibgxR3c5Dibg5S3M1Bqrs5SHU3B6nu5iDV3RykHt6u2epuDlLdzUGquzlIdTcHqe7mINXdHKS6m4NUd3OQ6m4OUt3NQaq7OUh1Nwep7uYg1d0cpLqbg1R3c5Dqbg5S3c1Bqrs5SHU3B6nu5iDV3RykupuDVHdzkOpuDlLdzUGquzlIdTcHqe7mINXdHKS6m4NUd3OQ6m4OUt3NQaq7OUh1Nwep7uYg1d0cpLqbg1R3c5Dqbg5S3c1Bqrs5SHU3B6nu5iDV3RykupuDVHdzkOpuDlLdzUGquzlIdTcHqe7mINXdHKS6m4NUd3OQ6m4OUt3NQaq7OUh1Nwep7uYg1d0cpLqbg1R3c5Dqbg5S3c1Bqrs5SHU3B6nu5iDV3RykupuDVHdzkOpuDlLdzUGquzlIdTcHqe7mINXdHKS6m4NUd3OQ6m4OUt3NQaq7OUh1Nwep7uYg1d0cpLqbg1R3c5Dqbg5S3c1Bqrs5SHU3B6nu5iDV3RykupuDLO7mIIu7Ocjibg6yuJuDLIe3a3ZxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkMXdHGRxNwdZ3M1BFndzkNXdHGR1NwdZ3c1BVndzkPXwds2u7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK6m4Os7uYgq7s5yOpuDrK5m4Ns7uYgm7s5yOZuDrId3q7Zzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQzd0cZHM3B9nczUE2d3OQ7QVzkFL1bUXSq/Hemsvbe58vkNur07jz4qJH/fbioll/fPGXrC+YsHxd1gTKmkFZBZRVQVkLKGsFZW2grB2UlcNN/eBwUz843NQPDjf1g8NN/VBQVg439YPDTf3gcFM/ONzUDxA3JRA3JRA3JRA3JRA3vcDo8LqsIG5KIG5KIG5KIG5KIG7KIG7KIG7KIG7K3rmpHm+v1pqPd8vX2Mv3TjfG8r0Di7F87wxSS7ktv71fvnesMJbvnRQeL1+8N39j+d77ubF87y368ZVHYnfdF6huLl1+7K4r7rvu469u7K4rsbuuxO66Grvrauyuq+677uPlu++6j5fvvus+Xr77rvt4+bHvddV91328fPdd9/Hy3Xfdh8svsbtuid11S+yuW2J33Rfopi5dfuyuW2Lf65bY97ol9r1uiX2vW9133YfQUN133cfLj73DXGPvML9AGHbpVzd2162xu26N3XVr7K5bY3fdFvtet8W+122x73Vb7HvdFyjfroSGFvvvui32DnOLvcPcYnfdFrvr9thdt8fuuj121+2xu+4LpH2XLj/2vW6Pfa/bY9/r9th/13VvJXy8fPeiQWP5sXeY3esAH3913Rv+jOXH7rruPXzG8mN3Xfe2PGP5se913TvtHi5/uNfUGcsPfa873MvkHkLDcO+HM5bvvus+Xn7oHebhXsxmfHVDd93hXp9mLD9213UvOTOWH7vruleRGcsPfa873AvDjOWHvtcd7rVej6HBvanLWH7oHebh3qf1ePnuFVmPv7rurVfG8mN3Xf9uqsfLj911/bupHi8/9r1ubDfViO2mGrHdVMO/m+ohNPh3Uz1efuwd5thuquHfTfX4qxu768Z2U43YbqoR2001YrupRmw31Yjtphqx3VQjtptq+HdTPYQG/26qx8uPvcMc2001/LupHn91Y3fd2G6qEdtNNWK7qUZsN9WI7aYasd1UI7abasR2Uw3/bqqH0ODfTfVw+bHdVCO2m2r4d1M9/Or6d1M9Xn7srhvbTTViu6lGbDfViO2mGrHdVCO2m2rEdlMN/26qh9Dg3031ePnuu+7j5cfeYfbvpnr81Y3ddWO7qUZsN9WI7aYasd1UI7abasR2U43YbqoR2001/LupHkKDfzfV4+XH3mGO7aYa/t1UD7+6/t1Uj5cfu+vGdlON2G6qEdtNNWK7qUZsN9WI7aYasd1U6fAvp3pEDef6Q/9l91x/6E3mc/2hd5nP9Yduvef6Q/fec/2hm++5/tDd91x/6PZ7rj94/42tqTrXH/q+91x/6Bvfc/2h73zP9bvvv4/5wb+rylh/6C3nc/2h95zP9Qfvv/59VY/XH1tYda4/eP+Nraw61x+8/8aWVp3rD37/G1tbda4/+P2vf3HVY37wb656vP7Y6qpz/cH3n/3Lqx5/f/3bq4z1B++/sf1V5/qD99/YBqtz/cHvf2M7rNIRW2J1rj/4/a9/jdVjfvDvsTLW777/GusPvv/sX2VlfH+D99/YMqtz/cH7b2yd1bn+4P03ttDqXH/w+9/YSqtz/cHvf/1LrR7zg3+rlbH+4PvPsb1W6fAvtnr8/fVvtjLWH7z/xnZbnesP3n9j263O9Qe//43ttzrXH/z+N7bhKh3+FVeP+cG/48pYf/D959iWq3P9wfuvf8+Vsf7g/Te26epcf/D+G9t1lY7Ysqtz/cHvf2Prrs71B7//9S+8eswP/o1XxvqD7z/Hdl6d6w/ef/1brx6vP7b26lx/8P4bW3x1rj94/42tvjrXH/z+N7b86lx/8Ptf//qrx/zg33/1cP0puP8qBfdfJf/+q4ff3+Tff2WsP3b/TcH9Vym4/yoF91+l4P6rFNx/lYL7r1Jw/1Xy7796zA/+/VfG+t33X2P9sfefk3//lfH9Dd5/g/uvUnD/VQruv0rB/VcpuP8qBfdfpeD+qxTcf5X8+68e84N//5Wx/tj7zym4/yr59189/v76918Z6w/ef4P7r1Jw/1UK7r9Kwf1XKbj/KgX3X6Xg/qvk33/1mB/8+6+M9Qfffw7uv0r+/VfG9zd4/w3uv0rB/VcpuP8qBfdfpeD+qxTcf5WC+69ScP9V8u+/eswP/v1XxvqD7z8H918l//4r4/sbvP8G91+l4P6rFNx/lYL7r1Jw/1UK7r9Kwf1XKbj/Kvn3Xz3mB//+q8frD+6/SsH9V8m//+rx99e//8pYf/D+G9x/lYL7r1Jw/1UK7r9Kwf1XKbj/KgX3XyX//qvH/ODff2Ws333/NdYffP/Zv//K+P4G77/B/VcpuP8qBfdfpeD+qxTcf5WC+69ScP9VCu6/Sv79V4/5wb//ylh/8P3n4P6r7N9/9fD7m/37r4z1x+6/Obj/Kh+x+28O7r/Kwf1XObj/Kgf3X+Xg/qvs33/1mB/8+6+M9cfef87B/VfZv//K+P4G77/B/Vc5uP8qB/df5eD+qxzcf5WD+69ycP9VDu6/yv79V4/5wb//ylh/7P3n7N9/ZZz/sfefc3D/VfbvvzLWH7z/+vdfGfUPfv/r339lrD94/w3uv8rB/Vc5uP8qB/dfZf/+K2P9wfuvf/+Vsf7g97/u/Vetp7f1ty7v1/+C/pv6bf2jWOu/Lb9k+eG1b8uvzpdfjtvy+53lt9jL77GXP0Iv/xXqq48sv7S3ty7juLP8FHv5OfbyJfbyNfbynXdda/nOu24Zb8xWj3sXTudd11q+865rLd951zWWX713XWP53ruusXznXbem2/LvIVt13nWt5TvvutbynXdda/nOu661fOdd11q+865bRd6Wr/XO8p13XWP5zXnXtZbvvOtay/fedY3le++6xvKdd93SbhdOvXPhbO7vdR8v33nXbcfbBnmr5TfLf//afNx203OSZLxa2m3V0tMPfzpo3yrjvKG/sDLOWeGFlXGOIa+rTHdOOC+sjHN4emFlnHPZJ1amj7dXy7hXGefI98LK6K7MpDLOQfWFleEysFUZLgNbleEysFUZLgMblRlcBrYqw2VgqzIrMXDOt8qcO/bGq5Pedq5S+aEyOd0terq99SH98YslS31LeN6y//jirzVfia691Fz0+896R31fc901/+nn+Up3BFHO85XuNaKc5yvdxUQ5z1e6P/rEmkt+W3SW1t+XcaWbqXz78dsZ+zBerbm8rfr86N9M9rx/cdHj7QpQNOuPL/5SRjlWuvN6YRlXuk17YRmXuqd7XRmXuk17XRl1l/GKMi51M/W6Mi51f/S6Mi51y/O6Mi51F/O6Mu67mCvKmPZdzCVl3Hcxl5Rx38VcUsZ9F3NJGXWX8Yoy7ruYS8q472IuKeO+i7mkjPsu5pIy7ruYK8qY913MJWXcdzGXlHHfxVxSxn0Xc0kZdZfxijLuu5hLyrjvYi4p476LuaSM+y7mkjLuu5gryij7LuaSMu67mEvKuO9iLinjvou5pIyKLePjx+mIcG9MrMpw7zWsynBvH6zKcO8IHj+2RYQL+UZllMvtVmW4KG5VhkvXVmW4wGxVRndlJpXZDDzhGe9P+3phZTYDzyoDZmCjMmAGflwZ709We2FlNgNPurb358G9sDKbgWeV0V2ZSWXADGxUBszARmXADGxUZu8Dzyqz94EnlfH+nMMXVgbMwI/vDrw/nfGFlQEzsFEZ3ZWZVGbvA88qs/eBZ5XZDDzr2puBZ5XZDDypjPenjr6wMnsfeFaZvQ88q8zeB55VRndlJpXZ+8Czyux94Fll9m8hJncHSz2X9trK7N9CTCqz1HNpr63M3geeVWbvA88qsxl40rWXei7ttZXZDDyrzGbgWWX2PvCsMnsfeFaZvQ88qcxSz6W9tjJ7H3hWmb0PPKvM/i3E5O5grWe8XlqZ/VuIWWX2byFmldn7wLPK7H3gWWU2A9/v2gp+QqhVmc3As8psBp5VZu8DzyqjuzKTyux94Fll9j7wrDJ7H3hWmb0PPKvM/i3E/bsDBT9f0qrM/i3ErDL7txCzyux94FlldFdmUpnNwJOuDX6iolWZzcCzymwGnlVm7wNPKgN+OqFVmb0PPKvM3geeVWbvA88qo7syk8rs30JM7g7Az+OzKrN/CzGrzP4txKwyex94Uhnws+2symwGnnRt8BPorMpsBp5VRndlJpXZ+8Czyux94Fll9j7wrDJ7H3hWmb0PPKnMfk7ctDL7txCTuwPyc+KMyuzfQswqo7syk8rsfeBZZfY+8Kwym4FnXXsz8Kwym4EnlSE/J86ozN4HnlVm7wPPKrP3gWeV0V2ZSWX2PvCsMnsfeFaZ/VuIyd0B+TlxRmX2byEmlSE/J86ozN4HnlVm7wPPKrMZeNK1yc+JMyqzGXhWmc3As8rsfeBZZfY+8Kwyex94Upn9nLhpZfY+8Kwyex94Vpn9W4jJ3QH5OXFGZfZvIWaV2b+FmFVm7wPPKrP3gWeV2Qw86drk58QZldkMPKvMZuBZZfY+8KwyuiszqczeB55VZu8Dzyqz94Fnldn7wLPK7N9CTO4OyM+JMyqzfwsxq8z+LcSsMnsfeFYZ3ZWZVGYz8KRrk58TZ1RmM/CsMpuBZ5XZ+8D3K1P2c+Kmldn7wLPK7H3gWWX2PvCsMrorM6nM/i3E/buDQn5OnFGZ/VuIWWX2byFmldn7wJPK7OfETSuzGXjStcnPiTMqsxl4VhndlZlUZu8Dzyqz94Fnldn7wLPK7H3gWWX2PvCkMvs5cdPK7N9CTO4OyM+JMyqzfwsxq4zuykwqs/eBZ5XZ+8CzymwGnnXtzcCzymwGnlSG/Jw4ozJ7H3hWmb0PPKvM3geeVUZ3ZSaV2fvAs8rsfeBZZfZvISZ3B+TnxBmV2b+FmFSG/Jw4ozJ7H3hWmb0PPKvMZuBJ1yY/J86ozGbgWWU2A88qs/eBZ5XZ+8Czyux94Ell9nPippXZ+8Czyux94Fll9m8hJncH5OfEGZXZv4WYVWb/FmJWmb0PPKvM3geeVWYz8KRrk58TZ1RmM/CsMpuBZ5XZ+8CzyuiuzKQyex94Vpm9DzyrzN4HnlVm7wPPKrN/CzG5OyA/J86ozP4txKwy+7cQs8rsfeBZZXRXZlKZzcCTrk1+TpxRmc3As8psBp5VZu8DTyqznxM3rczeB55VZu8Dzyqz94FnldFdmUll9m8hJncH5OfEGZXZv4WYVWb/FmJWmb0PPKnMfk7ctDKbgSddm/ycOKMym4FnldFdmUll9j7wrDJ7H3hWmb0PPKvM3geeVWbvA9+vTN3PiZtWZv8W4v7dQSU/J86ozP4txKwyuiszqczeB55VZu8DzyqzGXjWtTcDzyqzGXhSGfJz4ozK7H3gWWX2PvCsMnsfeFYZ3ZWZVGbvA88qs/eBZ5XZv4WY3B2QnxNnVGb/FmJSGfJz4ozK7H3gWWX2PvCsMpuBJ12b/Jw4ozKbgWeV2Qw8q8zeB55VZu8Dzyqz94EnldnPiZtWZu8Dzyqz94Fnldm/hZjcHZCfE2dUZv8WYlaZ/VuIWWX2PvCsMnsfeFaZzcCTrk1+TpxRmc3As8psBp5VZu8DzyqjuzKTyux94Fll9j7wrDJ7H3hWmb0PPKvM/i3E5O6A/Jw4ozL7txCzyuzfQswqs/eBZ5XRXZlJZTYDT7o2+TlxRmU2A88qsxl4Vpm9DzypzH5O3LQyex94Vpm9DzyrzN4HnlVGd2Umldm/hZjcHZCfE2dUZv8WYlaZ/VuIWWX2PvCkMvs5cdPKbAaedG3yc+KMymwGnlVGd2Umldn7wLPK7H3gWWX2PvCsMnsfeFaZvQ88qcx+Tty0Mvu3EJO7A/Jz4ozK7N9CzCqjuzKTyux94Fll9j7wrDKbgWddezPwrDKbgSeVIT8nzqjM3geeVWbvA88qs/eBZ5XRXZlJZfY+8Kwyex94Vpn9W4jJ3QH5OXFGZfZvIe5XppGfE2dUZu8Dzyqz94FnldkMfL9rt0N3ZSaV2Qw8q8xm4Fll9j7wrDJ7H3hWmb0PPKnMfk7ctDJ7H3hWmb0PPKvM/i3E5O6A/Jw4ozL7txCzyuzfQswqs/eBZ5XZ+8CzymwGnnRt8nPijMpsBp5VZjPwrDJ7H3hWGd2VmVRm7wPPKrP3gWeV2fvAs8rsfeBZZfZvISZ3B+TnxBmV2b+FmFVm/xZiVpm9DzyrjO7KTCqzGXjStcnPiTMqsxl4VpnNwLPK7H3gSWX2c+Kmldn7wLPK7H3gWWX2PvCsMrorM6nM/i3E5O6A/Jw4ozL7txCzyuzfQswqs/eBJ5XZz4mbVmYz8KRrk58TZ1RmM/CsMrorM6nM3geeVWbvA88qs/eBZ5XZ+8Czyux94Ell9nPippXZv4WY3B2QnxNnVGb/FmJWGd2VmVRm7wPPKrP3gWeV2Qw869qbgWeV2Qw8qQz5OXFGZfY+8Kwyex94Vpm9DzyrjO7KTCqz94Fnldn7wLPK7N9CTO4OyM+JMyqzfwsxqQz5OXFGZfY+8Kwyex94VpnNwJOuTX5OnFGZzcCzymwGnlVm7wPPKrP3gWeV2fvAk8rs58RNK7P3gWeV2fvAs8rs30JM7g7Iz4kzKrN/CzGrzP4txKwyex94VpnNwLPetPeB758zfT8nblqZvQ88q8zeB55VZjPwrDK6e9Pd3tTJz4kzzpnNwLPKbAaeVWb/FmJWmc3Ak8qQnxNnVGbvA0+69n5O3LQy+7cQs8rorsykMvu3ELPK7N9CzCqzfwsxq8zeB55VhsvArb+99fm/yrvKLPWcuHK8rSOXXH/z6q9hnWNt17e37r9Zx9vynbOntXzngGgtX2Mv3zlqdekPl++ch6zqO4cWa/nOycJavvP2byzf+3OsjK+u94dNWdWP3XW9P7bJWn7sruv9AUjWVzd21/X+KCFr+bG7rveH8hjL9/7kHOOr6/3xNlb1Y3dd7w+KsZYfu+t6f+SK9dWN3XW9P7zEWn7sruv9MSDG8r0/q8P46np/oIZV/dhd1/ujKazlx+663h/yYH11Y3dd749LsJYfu+t6f/CAsXzvTwcwvrreFf5W9WN3Xe8yfGv5sbuud6289dWN3XW9C9qt5cfuut5V58byvfvIja+ud2m4Vf3YXde7fttafuyu611kbX11Y3dd70poa/mxu653ubKxfO8GZOOr611TbFU/dtf1Lvy1lh+763pX51pf3dhd17uE1lp+7K7rXedqLN+7c9X46noXo1rVj911vStGreXH7rreZZ3WVzd21/WuvbSWH7vrehdIPl7+8G55fPzVHd5VjFb1Q3fd4V1qaC0/dNcd3vWA1lc3dNcd3kV71vJDd93hXVlnLN+7V8746nqXv1nVj911vWvUrOXH7rrehWTWVzd21/Wu9rKWH7vrepdkGcv3brIyvrqx3VQjtptqxHZTjdhuqhHbTTViu6lGbDfViO2mGrHdVCO2m2rEdlON2G6qEdtNNWK7qUZsN9WI7aYasd1UI7abasR2U43YbqoR2001YrupRmw31Yjtphqx3VQjtptqxHZTjdhuqhHbTTViu6lGbDfViO2mGrHdVCO2m2rEdlON2G6qEdtNNWK7qUZsN9WI7aYasd1UI7abasR2U43YbqoR2001YrupRmw31Yjtphqx3VQjtptqxHZTjdhuqhHbTTViu6lGbDfViO2mGrHdVCO2m2rEdlON2G6q4d5NZSzfe9c1lu+96xrL9951jeV/ctf9+iH1Z3xI+xkfckWfaVlvH6LD+Nf+8qzzt1efl+EfXn3vvUs73t67tPT9vc/t1G8BRvAAlxiZXhog/fQA43i7Bnz5g54R4IshedzyNvn+QPohd16ev/yZ523lX64nP778a+BMCyy0wEoLXGiBKy1wowXutMADFTgfx0ELzCKtMzCLtM7A3klriOTvL0/yPoH/xtpub967HO8T/PSd4/z9hiz3Ym2A5HOD7G275Ej9+w1ZS/c2V8q4vbrm7+v+cvK9e/GQ273ekJz+8NncdyUvquTYlbymkumnQ0PO6VbJXKp1fSrn/7y9eWktvU+QwifIzhPUobcdsjpqe59AwifQ8AlK+AQ1fIIWPkEPn2BET5C992Q7gfeebCcI35Nz+J58iT7sY/fO7cbtqR/pNwm+Lqn4W1L1t6S9ZXDR7VneWwZXVXJvGVxUSQm/ZSDhtwzEO57YCfx1UvH/F0Njr169/wnQ/HvJz3cwrXqZ/vk6qGUrKbuSF1VSQ/+48wxQogeo0QOwfrh1Bmb9cOsMTPvhVqH9cKvQfrhVaD/cKqyfyJ+BlRaY9RP5MzDrJ/JnYBppFRppFRppVRpp1bVI67wllNvdobzfPaxrcZYZN/zP4y8xyX1qgnH7s8eXOcjj8T9Y7ektb+35+1K+/YGhemema9N6B6Zr03qnpWvTekela9N656SPpq1yS/sDNHxL29z/EfHStN4J6dq03gHp2rTu+ejStIpKuxpLPU67Gks9TrsaSz1OuxpLPU6LYqmOYqmOYqmOYqmOYqlLrI9x0qJYqqNYqqNYqqNYqqNYaqBYyr1G9Nq0KJZyLxC9Nq2i0qJYyr039Nq0KJZybwy9Ni2JpZJ7V+i1aUksldxbQq9NS2KpdCgqLYmlkntV7LVpSSyVDhJLpQPFUgnFUgnFUgnFUmkxlhrH7VedI71Pq6i0i7GUkXYxljLSLsZSRtrFWMpIuxhLPU6bF2MpI+1iLGWkXYyljLQolnqBqveVaVEslVEslVEslVEslVEsJSiWEhRLCYqlBMVSoqi0KJYSFEsJiqUExVLuZemXpvUvVr80LYqlFMVSimKpFwjHX5kWxVKKYin33vNr06JYyr3x/NK07nXn16ZFsZR70fm1aVEs5V5xfm1aFEu5l5tfmxbFUu615temRbGUe6H5tWlRLOVeZn5tWhRLreY9N9KiWGo177mRFsVSq3nPjbQollrNe26kRbHUat5zIy2KpVbznhtpUSy1mvfcSItiqdW850ZaFEut5j030qJYajXvuZEWxVKrec+NtCiWWs17bqRFsdRq3nMjLYqlVvOeG2lRLLWa99xIi2Kp1bznRloUS63mPTfSolhqNe+5kZbEUnk177mRlsRSeTXvuZGWxFL5UFRaEkvl1bznRloSS+XVvOdGWhRLreY9N9KiWGo177mRFsVSKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU91xQ3nNBec8F5T0XlPdcDkWlJbGUoLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7Lijv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84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHe84zynmeU9zyjvOcZ5T3PKO95RnnPM8p7nlHec0F5zwXlPReU91xQ3nM5FJWWxFKC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKe64o77mivOeK8p4rynuuh6LSklhKUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8LynteUN7zgvKeF5T3vByKSktiqYLynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0vKO95QXnPC8p7XlDe84LynheU97ygvOcF5T0v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eUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p5nlPc8o7znGeU9zyjveUZ5zzPKe55R3vOM8p4LynsuKO+5oLzngvKey6GotCSWEpT3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zQXnPBeU9F5T3XFDec0F5zwXlPReU91xQ3nNBec8F5T0XlPdcUN5zRXnPFeU9V5T3XFHecz0UlZbEUorynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7rijvuaK854rynivKe64o77mivOeK8p4rynuuKO+5orznivKeK8p7XlDe84LynheU97ygvOflUFRaEksVlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4XlPe8oLznBeU9LyjveUF5zwvKe15Q3vOC8p4X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LJVX854baVEshfKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3PKO85xnlPc8o73lGec8zynueUd7zjPKeZ5T3XFDec0F5zwXlPReU91wORaUlsZSgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LyngvKey4o77mgvOeC8p4LynsuKO+5oLzngvKeC8p7LijvuaC854LynivKe64o77mivOeK8p7roai0JJZSlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnPFeU9V5T3XFHec0V5zxXlPVeU91xR3nNFec8V5T1XlPdcUd5zRXnP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",
|
|
5047
|
+
"bytecode": "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",
|
|
5048
|
+
"debug_symbols": "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",
|
|
5238
5049
|
"brillig_names": [
|
|
5239
|
-
"
|
|
5050
|
+
"get_contract_instance_internal",
|
|
5240
5051
|
"decompose_hint",
|
|
5241
|
-
"
|
|
5242
|
-
"
|
|
5243
|
-
"call_private_function_internal",
|
|
5052
|
+
"lte_hint",
|
|
5053
|
+
"notify_created_note_oracle_wrapper",
|
|
5244
5054
|
"debug_log_oracle_wrapper",
|
|
5245
|
-
"
|
|
5246
|
-
"
|
|
5055
|
+
"get_random_bytes",
|
|
5056
|
+
"random",
|
|
5057
|
+
"field_less_than",
|
|
5058
|
+
"build_msg_block",
|
|
5059
|
+
"attach_len_to_msg_block",
|
|
5060
|
+
"get_app_tag_as_sender",
|
|
5061
|
+
"increment_app_tagging_secret_index_as_sender_wrapper",
|
|
5247
5062
|
"directive_integer_quotient",
|
|
5063
|
+
"directive_invert",
|
|
5248
5064
|
"directive_to_radix"
|
|
5249
5065
|
],
|
|
5250
|
-
"verification_key": "
|
|
5251
|
-
"artifact_hash": "
|
|
5252
|
-
}
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
"
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
|
|
5260
|
-
|
|
5261
|
-
|
|
5262
|
-
|
|
5263
|
-
|
|
5264
|
-
|
|
5265
|
-
|
|
5266
|
-
|
|
5267
|
-
|
|
5268
|
-
|
|
5066
|
+
"verification_key": "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",
|
|
5067
|
+
"artifact_hash": "ff6671ddb572df3d961df43ed4c3adf75a7d3763-79d40c8395c9a0c28cc94c6923ec1838-client-ivc-true"
|
|
5068
|
+
},
|
|
5069
|
+
{
|
|
5070
|
+
"name": "lookup_validity",
|
|
5071
|
+
"is_unconstrained": true,
|
|
5072
|
+
"custom_attributes": [],
|
|
5073
|
+
"abi": {
|
|
5074
|
+
"error_types": {
|
|
5075
|
+
"16761564377371454734": {
|
|
5076
|
+
"error_kind": "string",
|
|
5077
|
+
"string": "Array index out of bounds"
|
|
5078
|
+
},
|
|
5079
|
+
"16954218183513903507": {
|
|
5080
|
+
"error_kind": "string",
|
|
5081
|
+
"string": "Attempted to read past end of BoundedVec"
|
|
5082
|
+
},
|
|
5083
|
+
"17595253152434889169": {
|
|
5084
|
+
"error_kind": "string",
|
|
5085
|
+
"string": "offset too large"
|
|
5086
|
+
},
|
|
5087
|
+
"17843811134343075018": {
|
|
5088
|
+
"error_kind": "string",
|
|
5089
|
+
"string": "Stack too deep"
|
|
5090
|
+
},
|
|
5091
|
+
"2920182694213909827": {
|
|
5092
|
+
"error_kind": "string",
|
|
5093
|
+
"string": "attempt to subtract with overflow"
|
|
5094
|
+
},
|
|
5095
|
+
"5019202896831570965": {
|
|
5096
|
+
"error_kind": "string",
|
|
5097
|
+
"string": "attempt to add with overflow"
|
|
5098
|
+
},
|
|
5099
|
+
"5727012404371710682": {
|
|
5100
|
+
"error_kind": "string",
|
|
5101
|
+
"string": "push out of bounds"
|
|
5102
|
+
},
|
|
5103
|
+
"7233212735005103307": {
|
|
5104
|
+
"error_kind": "string",
|
|
5105
|
+
"string": "attempt to multiply with overflow"
|
|
5106
|
+
}
|
|
5107
|
+
},
|
|
5108
|
+
"parameters": [
|
|
5109
|
+
{
|
|
5110
|
+
"name": "consumer",
|
|
5111
|
+
"type": {
|
|
5269
5112
|
"fields": [
|
|
5270
5113
|
{
|
|
5271
|
-
"name": "
|
|
5272
|
-
"
|
|
5273
|
-
"
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5279
|
-
|
|
5114
|
+
"name": "inner",
|
|
5115
|
+
"type": {
|
|
5116
|
+
"kind": "field"
|
|
5117
|
+
}
|
|
5118
|
+
}
|
|
5119
|
+
],
|
|
5120
|
+
"kind": "struct",
|
|
5121
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
5122
|
+
},
|
|
5123
|
+
"visibility": "private"
|
|
5124
|
+
},
|
|
5125
|
+
{
|
|
5126
|
+
"name": "inner_hash",
|
|
5127
|
+
"type": {
|
|
5128
|
+
"kind": "field"
|
|
5129
|
+
},
|
|
5130
|
+
"visibility": "private"
|
|
5131
|
+
}
|
|
5132
|
+
],
|
|
5133
|
+
"return_type": {
|
|
5134
|
+
"abi_type": {
|
|
5135
|
+
"kind": "boolean"
|
|
5136
|
+
},
|
|
5137
|
+
"visibility": "public"
|
|
5138
|
+
}
|
|
5139
|
+
},
|
|
5140
|
+
"bytecode": "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",
|
|
5141
|
+
"debug_symbols": "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",
|
|
5142
|
+
"brillig_names": [
|
|
5143
|
+
"lookup_validity"
|
|
5144
|
+
]
|
|
5145
|
+
},
|
|
5146
|
+
{
|
|
5147
|
+
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
5148
|
+
"is_unconstrained": true,
|
|
5149
|
+
"custom_attributes": [],
|
|
5150
|
+
"abi": {
|
|
5151
|
+
"error_types": {
|
|
5152
|
+
"11091894166229312484": {
|
|
5153
|
+
"error_kind": "fmtstring",
|
|
5154
|
+
"item_types": [],
|
|
5155
|
+
"length": 20
|
|
5156
|
+
},
|
|
5157
|
+
"16761564377371454734": {
|
|
5158
|
+
"error_kind": "string",
|
|
5159
|
+
"string": "Array index out of bounds"
|
|
5160
|
+
},
|
|
5161
|
+
"17843811134343075018": {
|
|
5162
|
+
"error_kind": "string",
|
|
5163
|
+
"string": "Stack too deep"
|
|
5164
|
+
},
|
|
5165
|
+
"5019202896831570965": {
|
|
5166
|
+
"error_kind": "string",
|
|
5167
|
+
"string": "attempt to add with overflow"
|
|
5168
|
+
},
|
|
5169
|
+
"8270195893599566439": {
|
|
5170
|
+
"error_kind": "string",
|
|
5171
|
+
"string": "Invalid public keys hint for address"
|
|
5172
|
+
}
|
|
5173
|
+
},
|
|
5174
|
+
"parameters": [
|
|
5175
|
+
{
|
|
5176
|
+
"name": "contract_address",
|
|
5177
|
+
"type": {
|
|
5178
|
+
"fields": [
|
|
5179
|
+
{
|
|
5180
|
+
"name": "inner",
|
|
5181
|
+
"type": {
|
|
5182
|
+
"kind": "field"
|
|
5183
|
+
}
|
|
5184
|
+
}
|
|
5185
|
+
],
|
|
5186
|
+
"kind": "struct",
|
|
5187
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
5188
|
+
},
|
|
5189
|
+
"visibility": "private"
|
|
5190
|
+
},
|
|
5191
|
+
{
|
|
5192
|
+
"name": "nonce",
|
|
5193
|
+
"type": {
|
|
5194
|
+
"kind": "field"
|
|
5195
|
+
},
|
|
5196
|
+
"visibility": "private"
|
|
5197
|
+
},
|
|
5198
|
+
{
|
|
5199
|
+
"name": "storage_slot",
|
|
5200
|
+
"type": {
|
|
5201
|
+
"kind": "field"
|
|
5202
|
+
},
|
|
5203
|
+
"visibility": "private"
|
|
5204
|
+
},
|
|
5205
|
+
{
|
|
5206
|
+
"name": "note_type_id",
|
|
5207
|
+
"type": {
|
|
5208
|
+
"kind": "field"
|
|
5209
|
+
},
|
|
5210
|
+
"visibility": "private"
|
|
5211
|
+
},
|
|
5212
|
+
{
|
|
5213
|
+
"name": "compute_nullifier",
|
|
5214
|
+
"type": {
|
|
5215
|
+
"kind": "boolean"
|
|
5216
|
+
},
|
|
5217
|
+
"visibility": "private"
|
|
5218
|
+
},
|
|
5219
|
+
{
|
|
5220
|
+
"name": "serialized_note",
|
|
5221
|
+
"type": {
|
|
5222
|
+
"kind": "array",
|
|
5223
|
+
"length": 3,
|
|
5224
|
+
"type": {
|
|
5225
|
+
"kind": "field"
|
|
5226
|
+
}
|
|
5227
|
+
},
|
|
5228
|
+
"visibility": "private"
|
|
5229
|
+
}
|
|
5230
|
+
],
|
|
5231
|
+
"return_type": {
|
|
5232
|
+
"abi_type": {
|
|
5233
|
+
"kind": "array",
|
|
5234
|
+
"length": 4,
|
|
5235
|
+
"type": {
|
|
5236
|
+
"kind": "field"
|
|
5237
|
+
}
|
|
5238
|
+
},
|
|
5239
|
+
"visibility": "public"
|
|
5240
|
+
}
|
|
5241
|
+
},
|
|
5242
|
+
"bytecode": "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",
|
|
5243
|
+
"debug_symbols": "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",
|
|
5244
|
+
"brillig_names": [
|
|
5245
|
+
"compute_note_hash_and_optionally_a_nullifier"
|
|
5246
|
+
]
|
|
5247
|
+
}
|
|
5248
|
+
],
|
|
5249
|
+
"outputs": {
|
|
5250
|
+
"globals": {
|
|
5251
|
+
"notes": [
|
|
5252
|
+
{
|
|
5253
|
+
"fields": [
|
|
5254
|
+
{
|
|
5255
|
+
"kind": "integer",
|
|
5256
|
+
"sign": false,
|
|
5257
|
+
"value": "00000000000000000000000000000000000000000000000000000000a74a8dc0"
|
|
5258
|
+
},
|
|
5259
|
+
{
|
|
5260
|
+
"kind": "string",
|
|
5261
|
+
"value": "PublicKeyNote"
|
|
5262
|
+
},
|
|
5263
|
+
{
|
|
5264
|
+
"fields": [
|
|
5265
|
+
{
|
|
5266
|
+
"name": "x",
|
|
5267
|
+
"value": {
|
|
5268
|
+
"fields": [
|
|
5269
|
+
{
|
|
5270
|
+
"name": "index",
|
|
5271
|
+
"value": {
|
|
5272
|
+
"kind": "integer",
|
|
5273
|
+
"sign": false,
|
|
5274
|
+
"value": "0000000000000000000000000000000000000000000000000000000000000000"
|
|
5280
5275
|
}
|
|
5281
5276
|
},
|
|
5282
5277
|
{
|
|
@@ -5384,6 +5379,60 @@
|
|
|
5384
5379
|
},
|
|
5385
5380
|
"structs": {
|
|
5386
5381
|
"functions": [
|
|
5382
|
+
{
|
|
5383
|
+
"fields": [
|
|
5384
|
+
{
|
|
5385
|
+
"name": "parameters",
|
|
5386
|
+
"type": {
|
|
5387
|
+
"fields": [
|
|
5388
|
+
{
|
|
5389
|
+
"name": "inner_hash",
|
|
5390
|
+
"type": {
|
|
5391
|
+
"kind": "field"
|
|
5392
|
+
}
|
|
5393
|
+
}
|
|
5394
|
+
],
|
|
5395
|
+
"kind": "struct",
|
|
5396
|
+
"path": "SchnorrAccount::verify_private_authwit_parameters"
|
|
5397
|
+
}
|
|
5398
|
+
},
|
|
5399
|
+
{
|
|
5400
|
+
"name": "return_type",
|
|
5401
|
+
"type": {
|
|
5402
|
+
"kind": "field"
|
|
5403
|
+
}
|
|
5404
|
+
}
|
|
5405
|
+
],
|
|
5406
|
+
"kind": "struct",
|
|
5407
|
+
"path": "SchnorrAccount::verify_private_authwit_abi"
|
|
5408
|
+
},
|
|
5409
|
+
{
|
|
5410
|
+
"fields": [
|
|
5411
|
+
{
|
|
5412
|
+
"name": "parameters",
|
|
5413
|
+
"type": {
|
|
5414
|
+
"fields": [
|
|
5415
|
+
{
|
|
5416
|
+
"name": "signing_pub_key_x",
|
|
5417
|
+
"type": {
|
|
5418
|
+
"kind": "field"
|
|
5419
|
+
}
|
|
5420
|
+
},
|
|
5421
|
+
{
|
|
5422
|
+
"name": "signing_pub_key_y",
|
|
5423
|
+
"type": {
|
|
5424
|
+
"kind": "field"
|
|
5425
|
+
}
|
|
5426
|
+
}
|
|
5427
|
+
],
|
|
5428
|
+
"kind": "struct",
|
|
5429
|
+
"path": "SchnorrAccount::constructor_parameters"
|
|
5430
|
+
}
|
|
5431
|
+
}
|
|
5432
|
+
],
|
|
5433
|
+
"kind": "struct",
|
|
5434
|
+
"path": "SchnorrAccount::constructor_abi"
|
|
5435
|
+
},
|
|
5387
5436
|
{
|
|
5388
5437
|
"fields": [
|
|
5389
5438
|
{
|
|
@@ -5566,60 +5615,6 @@
|
|
|
5566
5615
|
],
|
|
5567
5616
|
"kind": "struct",
|
|
5568
5617
|
"path": "SchnorrAccount::entrypoint_abi"
|
|
5569
|
-
},
|
|
5570
|
-
{
|
|
5571
|
-
"fields": [
|
|
5572
|
-
{
|
|
5573
|
-
"name": "parameters",
|
|
5574
|
-
"type": {
|
|
5575
|
-
"fields": [
|
|
5576
|
-
{
|
|
5577
|
-
"name": "signing_pub_key_x",
|
|
5578
|
-
"type": {
|
|
5579
|
-
"kind": "field"
|
|
5580
|
-
}
|
|
5581
|
-
},
|
|
5582
|
-
{
|
|
5583
|
-
"name": "signing_pub_key_y",
|
|
5584
|
-
"type": {
|
|
5585
|
-
"kind": "field"
|
|
5586
|
-
}
|
|
5587
|
-
}
|
|
5588
|
-
],
|
|
5589
|
-
"kind": "struct",
|
|
5590
|
-
"path": "SchnorrAccount::constructor_parameters"
|
|
5591
|
-
}
|
|
5592
|
-
}
|
|
5593
|
-
],
|
|
5594
|
-
"kind": "struct",
|
|
5595
|
-
"path": "SchnorrAccount::constructor_abi"
|
|
5596
|
-
},
|
|
5597
|
-
{
|
|
5598
|
-
"fields": [
|
|
5599
|
-
{
|
|
5600
|
-
"name": "parameters",
|
|
5601
|
-
"type": {
|
|
5602
|
-
"fields": [
|
|
5603
|
-
{
|
|
5604
|
-
"name": "inner_hash",
|
|
5605
|
-
"type": {
|
|
5606
|
-
"kind": "field"
|
|
5607
|
-
}
|
|
5608
|
-
}
|
|
5609
|
-
],
|
|
5610
|
-
"kind": "struct",
|
|
5611
|
-
"path": "SchnorrAccount::verify_private_authwit_parameters"
|
|
5612
|
-
}
|
|
5613
|
-
},
|
|
5614
|
-
{
|
|
5615
|
-
"name": "return_type",
|
|
5616
|
-
"type": {
|
|
5617
|
-
"kind": "field"
|
|
5618
|
-
}
|
|
5619
|
-
}
|
|
5620
|
-
],
|
|
5621
|
-
"kind": "struct",
|
|
5622
|
-
"path": "SchnorrAccount::verify_private_authwit_abi"
|
|
5623
5618
|
}
|
|
5624
5619
|
]
|
|
5625
5620
|
}
|
|
@@ -5661,212 +5656,204 @@
|
|
|
5661
5656
|
"path": "std/hash/sha256.nr",
|
|
5662
5657
|
"source": "use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: INT_BLOCK, _state: STATE) -> STATE {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe { attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size) };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::{\n attach_len_to_msg_block, build_msg_block, byte_into_item, get_item_byte, make_item,\n set_item_byte_then_zeros, set_item_zeros,\n };\n use super::INT_BLOCK;\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d,\n 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0,\n 0x8f, 0xfe, 0x73, 0x2b,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94,\n 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99,\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154,\n 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59,\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213,\n 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97,\n 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61,\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186,\n 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253,\n 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9,\n 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214,\n 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107,\n 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198,\n 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126,\n 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36,\n 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59,\n 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97,\n 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180,\n 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216,\n 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70,\n 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246,\n 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193,\n 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74,\n 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210,\n 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210,\n 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69,\n 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22,\n 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175,\n 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53,\n 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200,\n 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86,\n 119, 30, 63, 129, 143, 32, 96,\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n\n #[test]\n fn test_get_item_byte() {\n let fld = make_item(10, 20, 30, 40);\n assert_eq(fld, 0x0a141e28);\n assert_eq(get_item_byte(fld, 0), 10);\n assert_eq(get_item_byte(fld, 4), 10);\n assert_eq(get_item_byte(fld, 6), 30);\n }\n\n #[test]\n fn test_byte_into_item() {\n let fld = make_item(0, 20, 0, 0);\n assert_eq(byte_into_item(20, 1), fld);\n assert_eq(byte_into_item(20, 5), fld);\n }\n\n #[test]\n fn test_set_item_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 0, 0, 0);\n assert_eq(set_item_zeros(fld0, 3), fld1);\n assert_eq(set_item_zeros(fld0, 4), 0);\n assert_eq(set_item_zeros(0, 4), 0);\n }\n\n #[test]\n fn test_set_item_byte_then_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 50, 0, 0);\n assert_eq(set_item_byte_then_zeros(fld0, 1, 50), fld1);\n }\n\n #[test]\n fn test_build_msg_block_start_0() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48,\n ];\n assert_eq(input.len(), 22);\n let (msg_block, msg_byte_ptr) = unsafe { build_msg_block(input, input.len(), 0) };\n assert_eq(msg_byte_ptr, input.len());\n assert_eq(msg_block[0], make_item(input[0], input[1], input[2], input[3]));\n assert_eq(msg_block[1], make_item(input[4], input[5], input[6], input[7]));\n assert_eq(msg_block[5], make_item(input[20], input[21], 0, 0));\n assert_eq(msg_block[6], 0);\n }\n\n #[test]\n fn test_build_msg_block_start_1() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n assert_eq(input.len(), 68);\n let (msg_block, msg_byte_ptr) = unsafe { build_msg_block(input, input.len(), 64) };\n assert_eq(msg_byte_ptr, 4);\n assert_eq(msg_block[0], make_item(input[64], input[65], input[66], input[67]));\n assert_eq(msg_block[1], 0);\n }\n\n #[test]\n fn test_attach_len_to_msg_block() {\n let input: INT_BLOCK = [\n 2152555847, 1397309779, 1936618851, 1262052426, 1936876331, 1985297723, 543702374,\n 1919905082, 1131376244, 1701737517, 1417244773, 978151789, 1697470053, 1920166255,\n 1849316213, 1651139939,\n ];\n let msg_block = unsafe { attach_len_to_msg_block(input, 1, 448) };\n assert_eq(msg_block[0], ((1 << 7) as u32) * 256 * 256 * 256);\n assert_eq(msg_block[1], 0);\n assert_eq(msg_block[15], 3584);\n }\n}\n"
|
|
5663
5658
|
},
|
|
5664
|
-
"
|
|
5659
|
+
"51": {
|
|
5665
5660
|
"path": "std/option.nr",
|
|
5666
5661
|
"source": "use crate::cmp::{Eq, Ord, Ordering};\nuse crate::default::Default;\nuse crate::hash::{Hash, Hasher};\n\npub 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::mem::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 /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n pub fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\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<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\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T>\nwhere\n T: Eq,\n{\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T>\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T>\nwhere\n T: Ord,\n{\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"
|
|
5667
5662
|
},
|
|
5668
|
-
"
|
|
5663
|
+
"52": {
|
|
5669
5664
|
"path": "std/panic.nr",
|
|
5670
5665
|
"source": "pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"
|
|
5671
5666
|
},
|
|
5672
|
-
"
|
|
5673
|
-
"path": "
|
|
5674
|
-
"source": "use crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar};\n\n// docs:start:schnorr_verify\npub fn verify_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) -> bool\n// docs:end:schnorr_verify\n{\n //scalar lo/hi from bytes\n let sig_s = EmbeddedCurveScalar::from_bytes(signature, 0);\n let sig_e = EmbeddedCurveScalar::from_bytes(signature, 32);\n // pub_key is on Grumpkin curve\n let mut is_ok = (public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17)\n & (!public_key.is_infinite);\n\n if ((sig_s.lo != 0) | (sig_s.hi != 0)) & ((sig_e.lo != 0) | (sig_e.hi != 0)) {\n let (r_is_infinite, result) =\n calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n is_ok &= !r_is_infinite;\n for i in 0..32 {\n is_ok &= result[i] == signature[32 + i];\n }\n } else {\n is_ok = false;\n }\n is_ok\n}\n\npub fn assert_valid_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) {\n //scalar lo/hi from bytes\n let sig_s = EmbeddedCurveScalar::from_bytes(signature, 0);\n let sig_e = EmbeddedCurveScalar::from_bytes(signature, 32);\n\n // assert pub_key is on Grumpkin curve\n assert(public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17);\n assert(public_key.is_infinite == false);\n // assert signature is not null\n assert((sig_s.lo != 0) | (sig_s.hi != 0));\n assert((sig_e.lo != 0) | (sig_e.hi != 0));\n\n let (r_is_infinite, result) = calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n assert(!r_is_infinite);\n for i in 0..32 {\n assert(result[i] == signature[32 + i]);\n }\n}\n\nfn calculate_signature_challenge<let N: u32>(\n public_key: EmbeddedCurvePoint,\n sig_s: EmbeddedCurveScalar,\n sig_e: EmbeddedCurveScalar,\n message: [u8; N],\n) -> (bool, [u8; 32]) {\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let r = crate::embedded_curve_ops::multi_scalar_mul([g1, public_key], [sig_s, sig_e]);\n // compare the _hashes_ rather than field elements modulo r\n let pedersen_hash = crate::hash::pedersen_hash([r.x, public_key.x, public_key.y]);\n let pde: [u8; 32] = pedersen_hash.to_be_bytes();\n\n let mut hash_input = [0; N + 32];\n for i in 0..32 {\n hash_input[i] = pde[i];\n }\n for i in 0..N {\n hash_input[32 + i] = message[i];\n }\n\n let result = crate::hash::blake2s(hash_input);\n (r.is_infinite, result)\n}\n\n#[test]\nfn test_zero_signature() {\n let public_key: EmbeddedCurvePoint = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let signature: [u8; 64] = [0; 64];\n let message: [u8; _] = [2; 64]; // every message\n let verified = verify_signature(public_key, signature, message);\n assert(!verified);\n}\n"
|
|
5675
|
-
},
|
|
5676
|
-
"75": {
|
|
5677
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr",
|
|
5678
|
-
"source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_emission::NoteEmission,\n note_header::NoteHeader,\n note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_nullify_internal, compute_note_hash_for_read_request},\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n) -> NoteEmission<Note>\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter,\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(context: &mut PrivateContext, note: Note)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_nullify =\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n notify_nullified_note(nullifier, notification_note_hash, nullifier_counter);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n"
|
|
5679
|
-
},
|
|
5680
|
-
"78": {
|
|
5681
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr",
|
|
5682
|
-
"source": "use crate::{\n context::PrivateContext,\n note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}},\n};\n\nuse dep::protocol_types::{\n hash::{\n compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage,\n compute_unique_note_hash,\n },\n utils::arr_copy_slice,\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32>(\n note_with_header: Note,\n context: &mut PrivateContext,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash = note.compute_note_hash();\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32>(\n note: Note,\n note_hash_for_read_request: Field,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash =\n compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the\n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the\n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from\n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub unconstrained fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S],\n) -> [Field; 4]\nwhere\n T: NoteInterface<N> + NullifiableNote,\n{\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n let note_hash = note.compute_note_hash();\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"
|
|
5683
|
-
},
|
|
5684
|
-
"82": {
|
|
5685
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr",
|
|
5686
|
-
"source": "/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\npub struct NoteEmission<Note> {\n pub note: Note,\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting\n * a change note in a token's transfer function only when there is \"change\" left).\n */\npub struct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"
|
|
5687
|
-
},
|
|
5688
|
-
"85": {
|
|
5689
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr",
|
|
5690
|
-
"source": "use crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, NoteStatus, PropertySelector, Select, Sort, SortOrder},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request,\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\nuse dep::protocol_types::constants::{\n GET_NOTES_ORACLE_RETURN_LENGTH, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n};\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector,\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(context: PrivateContext, storage_slot: Field, note: Note)\nwhere\n Note: NoteInterface<N>,\n{\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>,\n) {\n for i in 0..selects.len() {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field =\n extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()),\n \"Mismatch return note field.\",\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\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 field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\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, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n) -> (Note, Field)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note = unsafe { get_note_internal(storage_slot) };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n let opt_notes = unsafe { get_notes_internal(storage_slot, options) };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> =\n BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, 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_request(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_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note\nwhere\n Note: NoteInterface<N>,\n{\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length,\n )[0]\n .expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]\nwhere\n Note: NoteInterface<N>,\n{\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\npub unconstrained fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>,\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE>\nwhere\n Note: NoteInterface<N>,\n{\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n 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 let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>,\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len() {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [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_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values,\n select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order,\n )\n}\n"
|
|
5667
|
+
"66": {
|
|
5668
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
|
|
5669
|
+
"source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\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.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
5691
5670
|
},
|
|
5692
|
-
"
|
|
5671
|
+
"70": {
|
|
5693
5672
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr",
|
|
5694
5673
|
"source": "use crate::oracle::{\n execution::{get_block_number, get_chain_id, get_contract_address, get_version},\n storage::storage_read,\n};\nuse dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\npub struct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n pub unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub fn block_number(self) -> u32 {\n self.block_number\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n pub fn version(self) -> Field {\n self.version\n }\n\n pub fn chain_id(self) -> Field {\n self.chain_id\n }\n\n pub unconstrained fn raw_storage_read<let N: u32>(\n self: Self,\n storage_slot: Field,\n ) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n pub unconstrained fn storage_read<T, let N: u32>(self, storage_slot: Field) -> T\n where\n T: Deserialize<N>,\n {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"
|
|
5695
5674
|
},
|
|
5696
|
-
"
|
|
5697
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/
|
|
5698
|
-
"source": "use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n header::get_header_at,\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n header::Header,\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: Header,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\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.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
5699
|
-
},
|
|
5700
|
-
"99": {
|
|
5701
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr",
|
|
5702
|
-
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn compute_initialization_hash(\n init_selector: FunctionSelector,\n init_args_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
|
|
5703
|
-
},
|
|
5704
|
-
"110": {
|
|
5705
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr",
|
|
5706
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress, constants::CONTRACT_INSTANCE_LENGTH, contract_class_id::ContractClassId,\n contract_instance::ContractInstance,\n};\n\n// NOTE: this is for use in private only\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(\n _address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// NOTE: this is for use in private only\nunconstrained fn get_contract_instance_internal(\n address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\n// NOTE: this is for use in private only\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance =\n unsafe { ContractInstance::deserialize(get_contract_instance_internal(address)) };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\n// These oracles each return a ContractInstance member\n// plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstanceDeployer)]\nunconstrained fn get_contract_instance_deployer_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceClassId)]\nunconstrained fn get_contract_instance_class_id_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceInitializationHash)]\nunconstrained fn get_contract_instance_initialization_hash_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n\npub unconstrained fn get_contract_instance_deployer_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_deployer_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_class_id_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_class_id_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_initialization_hash_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_initialization_hash_oracle_avm(address)\n}\n\npub fn get_contract_instance_deployer_avm(address: AztecAddress) -> Option<AztecAddress> {\n let (member, exists) = get_contract_instance_deployer_internal_avm(address);\n if exists {\n Option::some(AztecAddress::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_class_id_avm(address: AztecAddress) -> Option<ContractClassId> {\n let (member, exists) = get_contract_instance_class_id_internal_avm(address);\n if exists {\n Option::some(ContractClassId::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_initialization_hash_avm(address: AztecAddress) -> Option<Field> {\n let (member, exists) = get_contract_instance_initialization_hash_internal_avm(address);\n if exists {\n Option::some(member)\n } else {\n Option::none()\n }\n}\n"
|
|
5675
|
+
"76": {
|
|
5676
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/generators.nr",
|
|
5677
|
+
"source": "use dep::protocol_types::point::Point;\n\n// A set of generators generated with `derive_generators(...)` function from noir::std\npub global Ga1: Point = Point {\n x: 0x30426e64aee30e998c13c8ceecda3a77807dbead52bc2f3bf0eae851b4b710c1,\n y: 0x113156a068f603023240c96b4da5474667db3b8711c521c748212a15bc034ea6,\n is_infinite: false,\n};\npub global Ga2: Point = Point {\n x: 0x2825c79cc6a5cbbeef7d6a8f1b6a12b312aa338440aefeb4396148c89147c049,\n y: 0x129bfd1da54b7062d6b544e7e36b90736350f6fba01228c41c72099509f5701e,\n is_infinite: false,\n};\npub global Ga3: Point = Point {\n x: 0x0edb1e293c3ce91bfc04e3ceaa50d2c541fa9d091c72eb403efb1cfa2cb3357f,\n y: 0x1341d675fa030ece3113ad53ca34fd13b19b6e9762046734f414824c4d6ade35,\n is_infinite: false,\n};\npub global Ga4: Point = Point {\n x: 0x0e0dad2250583f2a9f0acb04ededf1701b85b0393cae753fe7e14b88af81cb52,\n y: 0x0973b02c5caac339ee4ad5dab51329920f7bf1b6a07e1dabe5df67040b300962,\n is_infinite: false,\n};\npub global Ga5: Point = Point {\n x: 0x2f3342e900e8c488a28931aae68970738fdc68afde2910de7b320c00c902087d,\n y: 0x1bf958dc63cb09d59230603a0269ae86d6f92494da244910351f1132df20fc08,\n is_infinite: false,\n};\n// If you change this update `G_SLOT` in `yarn-project/simulator/src/client/test_utils.ts` as well\npub global G_slot: Point = Point {\n x: 0x041223147b680850dc82e8a55a952d4df20256fe0593d949a9541ca00f0abf15,\n y: 0x0a8c72e60d0e60f5d804549d48f3044d06140b98ed717a9b532af630c1530791,\n is_infinite: false,\n};\n\nmod test {\n use crate::generators::{G_slot, Ga1, Ga2, Ga3, Ga4, Ga5};\n use dep::protocol_types::point::Point;\n use std::hash::derive_generators;\n\n #[test]\n unconstrained fn test_generators() {\n let generators: [Point; 6] = derive_generators(\"aztec_nr_generators\".as_bytes(), 0);\n assert_eq(generators[0], Ga1);\n assert_eq(generators[1], Ga2);\n assert_eq(generators[2], Ga3);\n assert_eq(generators[4], Ga4);\n assert_eq(generators[5], Ga5);\n assert_eq(generators[3], G_slot);\n }\n}\n"
|
|
5707
5678
|
},
|
|
5708
|
-
"
|
|
5709
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
5710
|
-
"source": "use dep::protocol_types::{\n
|
|
5679
|
+
"77": {
|
|
5680
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr",
|
|
5681
|
+
"source": "use dep::protocol_types::{\n address::{AztecAddress, PartialAddress},\n point::Point,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\npub unconstrained fn get_public_keys_and_partial_address(\n address: AztecAddress,\n) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM {\n inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool },\n },\n ovpk_m: OvpkM {\n inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool },\n },\n tpk_m: TpkM {\n inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool },\n },\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"
|
|
5711
5682
|
},
|
|
5712
|
-
"
|
|
5713
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
5714
|
-
"source": "
|
|
5683
|
+
"79": {
|
|
5684
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/random.nr",
|
|
5685
|
+
"source": "/// Returns an unconstrained random value. Note that it is not possible to constrain this value to prove that it is\n/// truly random: we assume that the oracle is cooperating and returning random values.\n/// In some applications this behavior might not be acceptable and other techniques might be more suitable, such as\n/// producing pseudo-random values by hashing values outside of user control (like block hashes) or secrets.\npub unconstrained fn random() -> Field {\n rand_oracle()\n}\n\n#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n"
|
|
5715
5686
|
},
|
|
5716
|
-
"
|
|
5687
|
+
"83": {
|
|
5717
5688
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr",
|
|
5718
|
-
"source": "use dep::protocol_types::{\n abis::nullifier_leaf_preimage::
|
|
5689
|
+
"source": "use crate::utils::array;\nuse dep::protocol_types::{\n abis::nullifier_leaf_preimage::NullifierLeafPreimage, constants::NULLIFIER_TREE_HEIGHT,\n};\n\n// INDEX_LENGTH + NULLIFIER_LEAF_PREIMAGE_LENGTH + NULLIFIER_TREE_HEIGHT\nglobal NULLIFIER_MEMBERSHIP_WITNESS: u32 = 44;\n\npub struct NullifierMembershipWitness {\n pub index: Field,\n pub leaf_preimage: NullifierLeafPreimage,\n pub path: [Field; NULLIFIER_TREE_HEIGHT],\n}\n\nimpl NullifierMembershipWitness {\n pub fn deserialize(fields: [Field; NULLIFIER_MEMBERSHIP_WITNESS]) -> Self {\n let serialized_leaf_preimage = array::subarray(fields, 1);\n\n Self {\n index: fields[0],\n leaf_preimage: NullifierLeafPreimage::deserialize(serialized_leaf_preimage),\n path: array::subarray(fields, 1 + serialized_leaf_preimage.len()),\n }\n }\n}\n\n#[oracle(getLowNullifierMembershipWitness)]\nunconstrained fn get_low_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field,\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\npub unconstrained fn get_low_nullifier_membership_witness(\n block_number: u32,\n nullifier: Field,\n) -> NullifierMembershipWitness {\n let fields = get_low_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n\n#[oracle(getNullifierMembershipWitness)]\nunconstrained fn get_nullifier_membership_witness_oracle(\n _block_number: u32,\n _nullifier: Field,\n) -> [Field; NULLIFIER_MEMBERSHIP_WITNESS] {}\n\n// Nullifier here refers to the nullifier we are looking to get non-inclusion proof for (by proving that a lower\n// nullifier's next_value is bigger than the nullifier)\npub unconstrained fn get_nullifier_membership_witness(\n block_number: u32,\n nullifier: Field,\n) -> NullifierMembershipWitness {\n let fields = get_nullifier_membership_witness_oracle(block_number, nullifier);\n NullifierMembershipWitness::deserialize(fields)\n}\n"
|
|
5719
5690
|
},
|
|
5720
|
-
"
|
|
5721
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
5722
|
-
"source": "
|
|
5723
|
-
},
|
|
5724
|
-
"115": {
|
|
5725
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/random.nr",
|
|
5726
|
-
"source": "/// Returns an unconstrained random value. Note that it is not possible to constrain this value to prove that it is\n/// truly random: we assume that the oracle is cooperating and returning random values.\n/// In some applications this behavior might not be acceptable and other techniques might be more suitable, such as\n/// producing pseudo-random values by hashing values outside of user control (like block hashes) or secrets.\npub unconstrained fn random() -> Field {\n rand_oracle()\n}\n\n#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n"
|
|
5691
|
+
"85": {
|
|
5692
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr",
|
|
5693
|
+
"source": "use dep::protocol_types::abis::validation_requests::{\n key_validation_request::KEY_VALIDATION_REQUEST_LENGTH, KeyValidationRequest,\n};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field,\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\npub unconstrained fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"
|
|
5727
5694
|
},
|
|
5728
|
-
"
|
|
5695
|
+
"86": {
|
|
5729
5696
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr",
|
|
5730
5697
|
"source": "use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\npub unconstrained fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\npub unconstrained fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\npub unconstrained fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\npub unconstrained fn get_version() -> Field {\n get_version_oracle()\n}\n"
|
|
5731
5698
|
},
|
|
5732
|
-
"
|
|
5699
|
+
"87": {
|
|
5733
5700
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr",
|
|
5734
5701
|
"source": "use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n unsafe { notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter) };\n}\n\npub unconstrained fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n"
|
|
5735
5702
|
},
|
|
5736
|
-
"
|
|
5737
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
5738
|
-
"source": "
|
|
5703
|
+
"88": {
|
|
5704
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr",
|
|
5705
|
+
"source": "/// Notifies the simulator that `returns` will be later fetched once the function return is processed, referenced by\n/// their hash. This allows the simulator to know how to respond to this future request.\n///\n/// This is only used during private execution, since in public it is the VM itself that keeps track of return values.\npub fn pack_returns(returns: [Field]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call. When\n // unpacking however the caller must check that the returned value is indeed the preimage.\n unsafe { pack_returns_oracle_wrapper(returns) };\n}\n\npub unconstrained fn pack_returns_oracle_wrapper(returns: [Field]) {\n let _ = pack_returns_oracle(returns);\n}\n\npub unconstrained fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n\n#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n"
|
|
5739
5706
|
},
|
|
5740
|
-
"
|
|
5741
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
5742
|
-
"source": "use dep::protocol_types::
|
|
5707
|
+
"91": {
|
|
5708
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr",
|
|
5709
|
+
"source": "use crate::{note::{note_header::NoteHeader, note_interface::NoteInterface}, utils::array};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n indexed_tagging_secret::{INDEXED_TAGGING_SECRET_LENGTH, IndexedTaggingSecret},\n};\n\n/// Notifies the simulator that a note has been created, so that it can be returned in future read requests in the same\n/// transaction. This note should only be added to the non-volatile database if found in an actual block.\npub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n notify_created_note_oracle_wrapper(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n )\n };\n}\n\n/// Notifies the simulator that a note has been nullified, so that it is no longer returned in future read requests in\n/// the same transaction. This note should only be removed to the non-volatile database if its nullifier is found in an\n/// actual block.\npub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { notify_nullified_note_oracle_wrapper(nullifier, note_hash, counter) };\n}\n\nunconstrained fn notify_created_note_oracle_wrapper<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_created_note_oracle(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n );\n}\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_nullified_note_oracle_wrapper(\n nullifier: Field,\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_nullified_note_oracle(nullifier, note_hash, counter);\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(\n _nullifier: Field,\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S],\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\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_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields,\n )\n}\n\npub unconstrained fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\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 _placeholder_note_length: [Field; N], // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S]\nwhere\n Note: NoteInterface<N>,\n{\n sync_notes_oracle_wrapper();\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields,\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let note_content = array::subarray(fields, read_offset + 2);\n\n let mut note = Note::deserialize_content(note_content);\n note.set_header(NoteHeader { contract_address, nonce, storage_slot, note_hash_counter });\n\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n/// Returns true if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before the\n/// current transaction is included in a block. While this might seem of little use at first, certain design patterns\n/// benefit from this abstraction (see e.g. `PrivateMutable`).\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n/// Same as `get_app_tagging_secret_as_sender`, except it returns the derived tag, ready to be included in a log.\npub unconstrained fn get_app_tag_as_sender(sender: AztecAddress, recipient: AztecAddress) -> Field {\n get_app_tagging_secret_as_sender(sender, recipient).compute_tag(recipient)\n}\n\n/// Returns the tagging secret for a given sender and recipient pair, siloed for the current contract address.\n/// Includes the last known index used to send a note tagged with this secret.\n/// For this to work, PXE must know the ivpsk_m of the sender.\n/// For the recipient's side, only the address is needed.\npub unconstrained fn get_app_tagging_secret_as_sender(\n sender: AztecAddress,\n recipient: AztecAddress,\n) -> IndexedTaggingSecret {\n let result = get_app_tagging_secret_as_sender_oracle(sender, recipient);\n IndexedTaggingSecret::deserialize(result)\n}\n\n#[oracle(getAppTaggingSecretAsSender)]\nunconstrained fn get_app_tagging_secret_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) -> [Field; INDEXED_TAGGING_SECRET_LENGTH] {}\n\n/// Notifies the simulator that a tag has been used in a note, and to therefore increment the associated index so that\n/// future notes get a different tag and can be discovered by the recipient.\n/// This change should only be persisted in a non-volatile database if the tagged log is found in an actual block -\n/// otherwise e.g. a reverting transaction can cause the sender to accidentally skip indices and later produce notes\n/// that are not found by the recipient.\npub fn increment_app_tagging_secret_index_as_sender(sender: AztecAddress, recipient: AztecAddress) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n increment_app_tagging_secret_index_as_sender_wrapper(sender, recipient);\n }\n}\n\nunconstrained fn increment_app_tagging_secret_index_as_sender_wrapper(\n sender: AztecAddress,\n recipient: AztecAddress,\n) {\n increment_app_tagging_secret_index_as_sender_oracle(sender, recipient);\n}\n\n#[oracle(incrementAppTaggingSecretIndexAsSender)]\nunconstrained fn increment_app_tagging_secret_index_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) {}\n\n/// Finds new notes that may have been sent to all registered accounts in PXE in the current contract and makes them available\n/// for later querying via the `get_notes` oracle.\npub fn sync_notes() {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n sync_notes_oracle_wrapper();\n }\n}\n\nunconstrained fn sync_notes_oracle_wrapper() {\n sync_notes_oracle();\n}\n\n#[oracle(syncNotes)]\nunconstrained fn sync_notes_oracle() {}\n"
|
|
5743
5710
|
},
|
|
5744
|
-
"
|
|
5745
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/
|
|
5746
|
-
"source": "use dep::protocol_types::
|
|
5711
|
+
"92": {
|
|
5712
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
|
|
5713
|
+
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader,\n};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"
|
|
5747
5714
|
},
|
|
5748
|
-
"
|
|
5749
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/
|
|
5750
|
-
"source": "use
|
|
5715
|
+
"93": {
|
|
5716
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr",
|
|
5717
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress, constants::CONTRACT_INSTANCE_LENGTH, contract_class_id::ContractClassId,\n contract_instance::ContractInstance,\n};\n\n// NOTE: this is for use in private only\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(\n _address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// NOTE: this is for use in private only\nunconstrained fn get_contract_instance_internal(\n address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\n// NOTE: this is for use in private only\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance =\n unsafe { ContractInstance::deserialize(get_contract_instance_internal(address)) };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\n// These oracles each return a ContractInstance member\n// plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstanceDeployer)]\nunconstrained fn get_contract_instance_deployer_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceClassId)]\nunconstrained fn get_contract_instance_class_id_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceInitializationHash)]\nunconstrained fn get_contract_instance_initialization_hash_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n\npub unconstrained fn get_contract_instance_deployer_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_deployer_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_class_id_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_class_id_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_initialization_hash_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_initialization_hash_oracle_avm(address)\n}\n\npub fn get_contract_instance_deployer_avm(address: AztecAddress) -> Option<AztecAddress> {\n let (member, exists) = get_contract_instance_deployer_internal_avm(address);\n if exists {\n Option::some(AztecAddress::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_class_id_avm(address: AztecAddress) -> Option<ContractClassId> {\n let (member, exists) = get_contract_instance_class_id_internal_avm(address);\n if exists {\n Option::some(ContractClassId::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_initialization_hash_avm(address: AztecAddress) -> Option<Field> {\n let (member, exists) = get_contract_instance_initialization_hash_internal_avm(address);\n if exists {\n Option::some(member)\n } else {\n Option::none()\n }\n}\n"
|
|
5751
5718
|
},
|
|
5752
|
-
"
|
|
5719
|
+
"106": {
|
|
5753
5720
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr",
|
|
5754
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress,\n point::Point,\n public_keys::{IvpkM, ToPoint},\n scalar::Scalar,\n};\n\nuse crate::keys::
|
|
5721
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress,\n point::Point,\n public_keys::{IvpkM, ToPoint},\n scalar::Scalar,\n};\n\nuse crate::keys::secret_derivation::derive_aes_secret;\n\nuse std::aes128::aes128_encrypt;\n\npub struct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n pub fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n pub fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48]\n where\n T: ToPoint,\n {\n let full_key = derive_aes_secret(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nunconstrained fn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let point = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131,\n 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171,\n 176, 218, 48, 209, 73, 89, 200, 209,\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"
|
|
5722
|
+
},
|
|
5723
|
+
"107": {
|
|
5724
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr",
|
|
5725
|
+
"source": "use crate::{\n context::PrivateContext,\n encrypted_logs::payload::compute_private_log_payload,\n note::{note_emission::NoteEmission, note_interface::NoteInterface},\n};\nuse dep::protocol_types::{\n abis::note_hash::NoteHash, address::AztecAddress, constants::PRIVATE_LOG_SIZE_IN_FIELDS,\n};\n\n/// Computes private note log payload\nfn compute_payload<Note, let N: u32>(\n context: PrivateContext,\n note: Note,\n recipient: AztecAddress,\n sender: AztecAddress,\n) -> ([Field; PRIVATE_LOG_SIZE_IN_FIELDS], u32)\nwhere\n Note: NoteInterface<N>,\n{\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists =\n context.note_hashes.storage().any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let plaintext = note.to_be_bytes(storage_slot);\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n (payload, note_hash_counter)\n}\n\nunconstrained fn compute_payload_unconstrained<Note, let N: u32>(\n context: PrivateContext,\n note: Note,\n recipient: AztecAddress,\n sender: AztecAddress,\n) -> ([Field; PRIVATE_LOG_SIZE_IN_FIELDS], u32)\nwhere\n Note: NoteInterface<N>,\n{\n compute_payload(context, note, recipient, sender)\n}\n\n// This function seems to be affected by the following Noir bug:\n// https://github.com/noir-lang/noir/issues/5771\n// If you get weird behavior it might be because of it.\npub fn encode_and_encrypt_note<Note, let N: u32>(\n context: &mut PrivateContext,\n recipient: AztecAddress,\n // We need this because to compute a tagging secret, we require a sender:\n sender: AztecAddress,\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> ()\nwhere\n Note: NoteInterface<N>,\n{\n |e: NoteEmission<Note>| {\n let (encrypted_log, note_hash_counter) =\n compute_payload(*context, e.note, recipient, sender);\n context.emit_raw_note_log(encrypted_log, note_hash_counter);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32>(\n context: &mut PrivateContext,\n recipient: AztecAddress,\n // We need this because to compute a tagging secret, we require a sender:\n sender: AztecAddress,\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> ()\nwhere\n Note: NoteInterface<N>,\n{\n |e: NoteEmission<Note>| {\n // Unconstrained logs have both their content and encryption unconstrained - it could occur that the\n // recipient is unable to decrypt the payload.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n // It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n let (encrypted_log, note_hash_counter) =\n unsafe { compute_payload_unconstrained(*context, e.note, recipient, sender) };\n context.emit_raw_note_log(encrypted_log, note_hash_counter);\n }\n}\n"
|
|
5755
5726
|
},
|
|
5756
|
-
"
|
|
5727
|
+
"108": {
|
|
5757
5728
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr",
|
|
5758
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{GENERATOR_INDEX__SYMMETRIC_KEY, PRIVATE_LOG_SIZE_IN_FIELDS},\n hash::{poseidon2_hash, poseidon2_hash_with_separator},\n point::Point,\n public_keys::{AddressPoint, OvpkM},\n scalar::Scalar,\n utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n field::bn254::decompose, hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::point_to_symmetric_key::point_to_symmetric_key,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\ncomptime global OUTGOING_BODY_SIZE: u32 = 112;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + HEADER_SIZE /* outgoing_header */\n + OUTGOING_BODY_SIZE /* outgoing_body */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n ovsk_app: Field,\n ovpk: OvpkM,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] = compute_encrypted_log(\n contract_address,\n ovsk_app,\n ovpk,\n recipient,\n extended_plaintext,\n );\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n ovsk_app: Field,\n ovpk: OvpkM,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M - 32] = compute_encrypted_log(\n contract_address,\n ovsk_app,\n ovpk,\n recipient,\n extended_plaintext,\n );\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n // TODO(#10273) This should be done by the AVM when it's processing the raw logs instead of their hashes.\n let siloed_tag_bytes: [u8; 32] =\n poseidon2_hash([contract_address.to_field(), tag]).to_be_bytes();\n\n // Temporary hack so that the partial public log remains the same format.\n // It should return field array and make the tag the first field as compute_private_log_payload does.\n let mut log_bytes = [0; M];\n for i in 0..32 {\n log_bytes[i] = siloed_tag_bytes[i];\n }\n for i in 0..encrypted.len() {\n log_bytes[i + 32] = encrypted[i];\n }\n\n log_bytes\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n ovsk_app: Field,\n ovpk: OvpkM,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n let outgoing_body_ciphertext: [u8; 112] =\n compute_outgoing_body_ciphertext(recipient, fr_to_fq(ovsk_app), eph_sk, eph_pk);\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n // outgoing_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n encrypted_bytes[offset + HEADER_SIZE + i] = outgoing_header_ciphertext[i];\n }\n offset += HEADER_SIZE * 2;\n\n // outgoing_body\n for i in 0..OUTGOING_BODY_SIZE {\n encrypted_bytes[offset + i] = outgoing_body_ciphertext[i];\n }\n offset += OUTGOING_BODY_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained fn get_random_bytes<let N: u32>() -> [u8; N] {\n let mut bytes = [0; N];\n let mut idx = 32;\n let mut randomness = [0; 32];\n for i in 0..N {\n if idx == 32 {\n randomness = random().to_be_bytes();\n idx = 1; // Skip the first byte as it's always 0.\n }\n bytes[i] = randomness[idx];\n idx += 1;\n }\n bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the randomness to preserve the privacy of both the sender and recipient via encryption, so a malicious\n // sender could use non-random values to reveal the plaintext. But they already know it themselves anyway, and so\n // the recipient already trusts them to not disclose this information. We can therefore assume that the sender will\n // cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\n/// Encrypts ephemeral secret key and recipient's address point --> with this information the recipient of outgoing will\n/// be able to derive the key with which the incoming log can be decrypted.\npub fn compute_outgoing_body_ciphertext(\n recipient: AztecAddress,\n ovsk_app: Scalar,\n eph_sk: Scalar,\n eph_pk: Point,\n) -> [u8; OUTGOING_BODY_SIZE] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n let mut buffer = [0 as u8; 96];\n\n let serialized_eph_sk_high: [u8; 32] = eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let serialized_recipient_address_point =\n point_to_bytes(recipient.to_address_point().to_point());\n\n for i in 0..16 {\n buffer[i] = serialized_eph_sk_high[i + 16];\n buffer[i + 16] = serialized_eph_sk_low[i + 16];\n }\n for i in 0..32 {\n buffer[i + 32] = address_bytes[i];\n buffer[i + 64] = serialized_recipient_address_point[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field,\n )\n .to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_outgoing_body_ciphertext,\n compute_private_log_payload, MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{\n address::AztecAddress, point::Point, public_keys::OvpkM, scalar::Scalar,\n };\n use protocol_types::public_keys::AddressPoint;\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n let ovsk_app = 0x191ac5e29bbc8f80f29ed06b75eaf30c036ed7952d844833860c527077c8c3b4;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x07f696b8b233de2c1935e43c793399586f532da5ff7c0356636a75acb862e964,\n y: 0x156e8a3e42bfca3663936ba98c7fd26386a14657c23b5f5146f1a94b6c465154,\n is_infinite: false,\n },\n };\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getAppTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(\n contract_address,\n ovsk_app,\n ovpk_m,\n recipient,\n sender,\n plaintext,\n );\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a9e09ba15153fc9b4d224b6e1e71,\n 0x00dfbdcaab06c09d5b3c749bfebe1c0407eccd04f51bbb59142680c8a091b97f,\n 0x00c6cbcf615def593ab09e5b3f7f58f6fc235c90e7c77ed8dadb3b05ee4545a7,\n 0x00bc612c9139475fee6070be47efcc43a5cbbc873632f1428fac952df9c181db,\n 0x005f9e850b21fe11fedef37b88caee95111bce776e488df219732d0a77d19201,\n 0x007047186f41445ecd5c603487f7fb3c8f31010a22af69ce0000000000000000,\n 0x0000000000000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba,\n 0x009dc0cec8c70b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b72,\n 0x0095748ad19c1083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd5,\n 0x009b3781c9c02a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162,\n 0x00a6e9d067655cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf6,\n 0x002c2f49f549f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25,\n 0x00881548ec9606a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f8,\n 0x009970aeb3d9489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea192,\n 0x0022fb10df358c765edada497db4284ae30507a2e03e983d23cfa0bd831577e8,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb,\n };\n\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b,\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let ciphertext =\n compute_outgoing_body_ciphertext(recipient, sender_ovsk_app, eph_sk, eph_pk);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 97, 221, 53, 168, 242, 56, 217, 184, 114, 127, 137, 98, 31, 63, 86, 179, 139, 198, 162,\n 162, 216, 158, 255, 205, 90, 212, 141, 55, 9, 245, 6, 146, 202, 137, 129, 36, 190, 31,\n 17, 89, 151, 203, 43, 196, 203, 233, 178, 79, 202, 70, 250, 182, 18, 191, 79, 42, 205,\n 204, 145, 14, 13, 35, 255, 139, 142, 66, 193, 240, 175, 233, 180, 37, 153, 235, 41, 88,\n 232, 52, 235, 213, 50, 26, 153, 227, 25, 242, 161, 92, 45, 152, 100, 106, 29, 192, 131,\n 101, 121, 126, 31, 118, 191, 90, 238, 43, 24, 82, 49, 18, 199, 107, 83, 7,\n ];\n\n assert_eq(outgoing_body_ciphertext_from_typescript, ciphertext);\n }\n}\n"
|
|
5729
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{GENERATOR_INDEX__SYMMETRIC_KEY, PRIVATE_LOG_SIZE_IN_FIELDS},\n hash::poseidon2_hash,\n point::Point,\n public_keys::AddressPoint,\n scalar::Scalar,\n utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n field::bn254::decompose, hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::secret_derivation::derive_aes_secret,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M - 32] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n // TODO(#10273) This should be done by the AVM when it's processing the raw logs instead of their hashes.\n let siloed_tag_bytes: [u8; 32] =\n poseidon2_hash([contract_address.to_field(), tag]).to_be_bytes();\n\n // Temporary hack so that the partial public log remains the same format.\n // It should return field array and make the tag the first field as compute_private_log_payload does.\n let mut log_bytes = [0; M];\n for i in 0..32 {\n log_bytes[i] = siloed_tag_bytes[i];\n }\n for i in 0..encrypted.len() {\n log_bytes[i + 32] = encrypted[i];\n }\n\n log_bytes\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained fn get_random_bytes<let N: u32>() -> [u8; N] {\n let mut bytes = [0; N];\n let mut idx = 32;\n let mut randomness = [0; 32];\n for i in 0..N {\n if idx == 32 {\n randomness = random().to_be_bytes();\n idx = 1; // Skip the first byte as it's always 0.\n }\n bytes[i] = randomness[idx];\n idx += 1;\n }\n bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the randomness to preserve the privacy of both the sender and recipient via encryption, so a malicious\n // sender could use non-random values to reveal the plaintext. But they already know it themselves anyway, and so\n // the recipient already trusts them to not disclose this information. We can therefore assume that the sender will\n // cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8] {\n let full_key = derive_aes_secret(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_private_log_payload,\n MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{address::AztecAddress, point::Point, scalar::Scalar};\n use protocol_types::public_keys::AddressPoint;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getAppTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a900000000000000000000000000,\n 0x000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba9dc0cec8c7,\n 0x000b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b7295748ad19c,\n 0x001083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd59b3781c9c0,\n 0x002a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162a6e9d06765,\n 0x005cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf62c2f49f549,\n 0x00f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25881548ec96,\n 0x0006a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f89970aeb3d9,\n 0x00489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea19222fb10df35,\n 0x008c765edada497db4284ae30507a2e03e983d23cfa0bd831577e857bbef9cf7,\n 0x0090c97cb5699cc8783a1b4276d929be2882e5b9b72829a4f8404f7e3c853d11,\n 0x00d6d5a000b80134891e95f81007ad35d3945eaeecbe137fff85d01d7eaf8f19,\n 0x00a15eb965c6a4bc97aa87fd3463c31c9d4e0d722a8ba870bcc50c9c7a8b48ad,\n 0x0063c861bdbe490d44c57382decbae663927909652f87ac18dcfd5b30649cce5,\n 0x00820f14caa725efe1fa3485ceac88499eadf0565c5b20998c05931bbf478e68,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"
|
|
5759
5730
|
},
|
|
5760
|
-
"
|
|
5761
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/
|
|
5762
|
-
"source": "
|
|
5731
|
+
"111": {
|
|
5732
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
|
|
5733
|
+
"source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must be large enough to hold all of\n/// the elements past `offset`.\n///\n/// Example:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n/// ```\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
|
|
5734
|
+
},
|
|
5735
|
+
"114": {
|
|
5736
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr",
|
|
5737
|
+
"source": "use dep::protocol_types::point::Point;\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field =\n 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use crate::utils::point::point_to_bytes;\n use dep::protocol_types::point::Point;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122,\n 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115,\n ];\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169,\n 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181,\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"
|
|
5738
|
+
},
|
|
5739
|
+
"119": {
|
|
5740
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr",
|
|
5741
|
+
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn compute_initialization_hash(\n init_selector: FunctionSelector,\n init_args_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
|
|
5763
5742
|
},
|
|
5764
|
-
"
|
|
5743
|
+
"129": {
|
|
5765
5744
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr",
|
|
5766
5745
|
"source": "use crate::{\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX},\n oracle::{\n key_validation_request::get_key_validation_request,\n keys::get_public_keys_and_partial_address,\n },\n};\nuse dep::protocol_types::{address::AztecAddress, public_keys::PublicKeys};\n\nmod test;\n\npub unconstrained fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\npub unconstrained fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_public_keys(account: AztecAddress) -> PublicKeys {\n // Public keys are constrained by showing their inclusion in the address's preimage.\n let (public_keys, partial_address) = unsafe { get_public_keys_and_partial_address(account) };\n assert_eq(\n account,\n AztecAddress::compute(public_keys, partial_address),\n \"Invalid public keys hint for address\",\n );\n\n public_keys\n}\n"
|
|
5767
5746
|
},
|
|
5768
|
-
"
|
|
5769
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/keys/
|
|
5770
|
-
"source": "use crate::utils::point::point_to_bytes;\nuse dep::protocol_types::{
|
|
5747
|
+
"131": {
|
|
5748
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/keys/secret_derivation.nr",
|
|
5749
|
+
"source": "use crate::utils::point::point_to_bytes;\nuse dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, point::Point, scalar::Scalar};\nuse std::{embedded_curve_ops::multi_scalar_mul, hash::sha256};\n\npub fn derive_aes_secret(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret = point_to_bytes(multi_scalar_mul([point], [secret]));\n\n let mut shared_secret_bytes_with_separator: [u8; 33] = std::mem::zeroed();\n for i in 0..shared_secret.len() {\n shared_secret_bytes_with_separator[i] = shared_secret[i];\n }\n\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nunconstrained fn test_derive_aes_secret_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n };\n\n let key = derive_aes_secret(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158,\n 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159,\n ];\n assert_eq(key, key_from_typescript);\n}\n"
|
|
5771
5750
|
},
|
|
5772
5751
|
"152": {
|
|
5773
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr",
|
|
5774
|
-
"source": "use dep::protocol_types::point::Point;\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field =\n 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use crate::utils::point::point_to_bytes;\n use dep::protocol_types::point::Point;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122,\n 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115,\n ];\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169,\n 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181,\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"
|
|
5775
|
-
},
|
|
5776
|
-
"171": {
|
|
5777
5752
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr",
|
|
5778
5753
|
"source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize},\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note,\n note_emission::NoteEmission,\n note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context, let N: u32> Storage<T, N> for PrivateImmutable<T, Context>\nwhere\n T: Serialize<N> + Deserialize<N>,\n{}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(self, note: &mut Note) -> NoteEmission<Note>\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n pub unconstrained fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n pub unconstrained fn view_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"
|
|
5779
5754
|
},
|
|
5780
|
-
"
|
|
5781
|
-
"path": "/usr/src/noir-projects/
|
|
5782
|
-
"source": "
|
|
5755
|
+
"163": {
|
|
5756
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr",
|
|
5757
|
+
"source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_emission::NoteEmission,\n note_header::NoteHeader,\n note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_nullify_internal, compute_note_hash_for_read_request},\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n) -> NoteEmission<Note>\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter,\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(context: &mut PrivateContext, note: Note)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_nullify =\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n notify_nullified_note(nullifier, notification_note_hash, nullifier_counter);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n"
|
|
5783
5758
|
},
|
|
5784
|
-
"
|
|
5785
|
-
"path": "/usr/src/noir-projects/
|
|
5786
|
-
"source": "use crate::{\n
|
|
5759
|
+
"167": {
|
|
5760
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr",
|
|
5761
|
+
"source": "use crate::{\n context::PrivateContext,\n note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}},\n utils::array,\n};\n\nuse dep::protocol_types::hash::{\n compute_siloed_note_hash, compute_siloed_nullifier as compute_siloed_nullifier_from_preimage,\n compute_unique_note_hash,\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32>(\n note_with_header: Note,\n context: &mut PrivateContext,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash = note.compute_note_hash();\n let header = note.get_header();\n let nonce = header.nonce;\n let counter = header.note_hash_counter;\n\n // If same tx note, read request always uses the normal note hash\n if counter != 0 {\n note_hash\n } else {\n // If the note comes from a different tx, we need to compute the note hash that reached the tree\n compute_unique_note_hash(\n nonce,\n compute_siloed_note_hash(header.contract_address, note_hash),\n )\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32>(\n note: Note,\n note_hash_for_read_request: Field,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note.get_header();\n\n if (header.note_hash_counter != 0) & (header.nonce != 0) {\n // Non-revertible note, nullified by a revertible nullifier, we need to nullify the note hash that will reach the tree\n let siloed_note_hash =\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request);\n\n compute_unique_note_hash(header.nonce, siloed_note_hash)\n } else {\n note_hash_for_read_request\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the\n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the\n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from\n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub unconstrained fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S],\n) -> [Field; 4]\nwhere\n T: NoteInterface<N> + NullifiableNote,\n{\n let mut note = deserialize_content(array::subarray(serialized_note, 0));\n note.set_header(note_header);\n\n let note_hash = note.compute_note_hash();\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, note_hash);\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, siloed_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"
|
|
5787
5762
|
},
|
|
5788
|
-
"
|
|
5789
|
-
"path": "/usr/src/noir-projects/
|
|
5790
|
-
"source": "use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n constants::CONTRACT_INSTANCE_LENGTH,\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Hash, Serialize},\n};\n\npub struct ContractInstance {\n pub salt: Field,\n pub deployer: AztecAddress,\n pub contract_class_id: ContractClassId,\n pub initialization_hash: Field,\n pub public_keys: PublicKeys,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys.eq(other.public_keys)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n let public_keys_serialized = self.public_keys.serialize();\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n public_keys_serialized[0],\n public_keys_serialized[1],\n public_keys_serialized[2],\n public_keys_serialized[3],\n public_keys_serialized[4],\n public_keys_serialized[5],\n public_keys_serialized[6],\n public_keys_serialized[7],\n public_keys_serialized[8],\n public_keys_serialized[9],\n public_keys_serialized[10],\n public_keys_serialized[11],\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys: PublicKeys::deserialize([\n serialized[4],\n serialized[5],\n serialized[6],\n serialized[7],\n serialized[8],\n serialized[9],\n serialized[10],\n serialized[11],\n serialized[12],\n serialized[13],\n serialized[14],\n serialized[15],\n ]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n pub fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer,\n ),\n )\n }\n}\n"
|
|
5763
|
+
"170": {
|
|
5764
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr",
|
|
5765
|
+
"source": "use crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, NoteStatus, PropertySelector, Select, Sort, SortOrder},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request,\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\nuse dep::protocol_types::constants::{\n GET_NOTES_ORACLE_RETURN_LENGTH, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n};\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector,\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(context: PrivateContext, storage_slot: Field, note: Note)\nwhere\n Note: NoteInterface<N>,\n{\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>,\n) {\n for i in 0..selects.len() {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field =\n extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()),\n \"Mismatch return note field.\",\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\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 field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\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, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n) -> (Note, Field)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note = unsafe { get_note_internal(storage_slot) };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n let opt_notes = unsafe { get_notes_internal(storage_slot, options) };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::array::collapse(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> =\n BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, 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_request(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_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note\nwhere\n Note: NoteInterface<N>,\n{\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length,\n )[0]\n .expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]\nwhere\n Note: NoteInterface<N>,\n{\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\npub unconstrained fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>,\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE>\nwhere\n Note: NoteInterface<N>,\n{\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n 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 let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>,\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len() {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [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_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values,\n select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order,\n )\n}\n"
|
|
5791
5766
|
},
|
|
5792
|
-
"
|
|
5793
|
-
"path": "/usr/src/noir-projects/
|
|
5794
|
-
"source": "
|
|
5767
|
+
"172": {
|
|
5768
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr",
|
|
5769
|
+
"source": "/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\npub struct NoteEmission<Note> {\n pub note: Note,\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting\n * a change note in a token's transfer function only when there is \"change\" left).\n */\npub struct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"
|
|
5795
5770
|
},
|
|
5796
|
-
"
|
|
5797
|
-
"path": "/usr/src/noir-projects/
|
|
5798
|
-
"source": "
|
|
5771
|
+
"175": {
|
|
5772
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr",
|
|
5773
|
+
"source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(\n contract_address: AztecAddress,\n log: [u8; N],\n) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\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<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd,\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = AztecAddress::from_field(\n 0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303,\n );\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"
|
|
5774
|
+
},
|
|
5775
|
+
"176": {
|
|
5776
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
5777
|
+
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Empty, FromField, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key};\n\n// Aztec address\npub struct AztecAddress {\n pub 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 { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\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\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
|
|
5799
5778
|
},
|
|
5800
|
-
"
|
|
5779
|
+
"177": {
|
|
5801
5780
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr",
|
|
5802
5781
|
"source": "use crate::{\n address::aztec_address::AztecAddress, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField,\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n pub inner: Field,\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(poseidon2_hash_with_separator(\n [salt, initialization_hash, deployer.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
|
|
5803
5782
|
},
|
|
5804
|
-
"
|
|
5783
|
+
"181": {
|
|
5805
5784
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
|
|
5806
5785
|
"source": "use crate::{\n address::{aztec_address::AztecAddress, salted_initialization_hash::SaltedInitializationHash},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize, ToField},\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n pub inner: Field,\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress,\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer),\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n ) -> Self {\n PartialAddress::from_field(poseidon2_hash_with_separator(\n [contract_class_id.to_field(), salted_initialization_hash.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
|
|
5807
5786
|
},
|
|
5808
|
-
"
|
|
5809
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5810
|
-
"source": "use crate::
|
|
5787
|
+
"182": {
|
|
5788
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/indexed_tagging_secret.nr",
|
|
5789
|
+
"source": "use crate::traits::{Deserialize, Serialize};\nuse super::{address::aztec_address::AztecAddress, hash::poseidon2_hash};\nuse std::meta::derive;\n\npub global INDEXED_TAGGING_SECRET_LENGTH: u32 = 2;\n\n#[derive(Serialize, Deserialize)]\npub struct IndexedTaggingSecret {\n secret: Field,\n index: u32,\n}\n\nimpl IndexedTaggingSecret {\n pub fn compute_tag(self, recipient: AztecAddress) -> Field {\n poseidon2_hash([self.secret, recipient.to_field(), self.index as Field])\n }\n}\n"
|
|
5811
5790
|
},
|
|
5812
|
-
"
|
|
5813
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5814
|
-
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::scoped::Scoped,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [tx_hash, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), unique_note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\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 silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\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//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\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 // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
5791
|
+
"183": {
|
|
5792
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
|
|
5793
|
+
"source": "use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n constants::CONTRACT_INSTANCE_LENGTH,\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Hash, Serialize},\n};\n\npub struct ContractInstance {\n pub salt: Field,\n pub deployer: AztecAddress,\n pub contract_class_id: ContractClassId,\n pub initialization_hash: Field,\n pub public_keys: PublicKeys,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys.eq(other.public_keys)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n let public_keys_serialized = self.public_keys.serialize();\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n public_keys_serialized[0],\n public_keys_serialized[1],\n public_keys_serialized[2],\n public_keys_serialized[3],\n public_keys_serialized[4],\n public_keys_serialized[5],\n public_keys_serialized[6],\n public_keys_serialized[7],\n public_keys_serialized[8],\n public_keys_serialized[9],\n public_keys_serialized[10],\n public_keys_serialized[11],\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys: PublicKeys::deserialize([\n serialized[4],\n serialized[5],\n serialized[6],\n serialized[7],\n serialized[8],\n serialized[9],\n serialized[10],\n serialized[11],\n serialized[12],\n serialized[13],\n serialized[14],\n serialized[15],\n ]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n pub fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer,\n ),\n )\n }\n}\n"
|
|
5815
5794
|
},
|
|
5816
|
-
"
|
|
5795
|
+
"209": {
|
|
5817
5796
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr",
|
|
5818
5797
|
"source": "use crate::{point::Point, traits::{Deserialize, Empty, Serialize}};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\npub struct KeyValidationRequest {\n pub pk_m: Point,\n pub sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [self.pk_m.x, self.pk_m.y, self.pk_m.is_infinite as Field, self.sk_app]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool },\n sk_app: fields[3],\n }\n }\n}\n"
|
|
5819
5798
|
},
|
|
5820
|
-
"
|
|
5821
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr",
|
|
5822
|
-
"source": "pub global NULLIFIER_LEAF_PREIMAGE_LENGTH: u32 = 3;\n\nuse crate::{\n abis::{read_request::ScopedReadRequest, side_effect::Readable},\n hash::compute_siloed_nullifier,\n merkle_tree::leaf_preimage::{IndexedTreeLeafPreimage, LeafPreimage},\n traits::{Empty, Hash},\n};\n\npub struct NullifierLeafPreimage {\n pub nullifier: Field,\n pub next_nullifier: Field,\n pub next_index: u32,\n}\n\nimpl Empty for NullifierLeafPreimage {\n fn empty() -> Self {\n Self { nullifier: 0, next_nullifier: 0, next_index: 0 }\n }\n}\n\nimpl Hash for NullifierLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash(self.serialize())\n }\n }\n}\n\nimpl LeafPreimage for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl IndexedTreeLeafPreimage<Field> for NullifierLeafPreimage {\n fn get_key(self) -> Field {\n self.nullifier\n }\n\n fn get_next_key(self) -> Field {\n self.next_nullifier\n }\n\n fn points_to_infinity(self) -> bool {\n (self.next_nullifier == 0) & (self.next_index == 0)\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n\n fn update_pointers(self, next_key: Field, next_index: u32) -> Self {\n Self { nullifier: self.nullifier, next_nullifier: next_key, next_index }\n }\n\n fn update_value(self, _nullifier: Field) -> Self {\n assert(false, \"Tried to update a nullifier\");\n Self::empty()\n }\n\n fn build_insertion_leaf(nullifier: Field, low_leaf: Self) -> Self {\n Self { nullifier, next_nullifier: low_leaf.next_nullifier, next_index: low_leaf.next_index }\n }\n}\n\nimpl Readable<ScopedReadRequest> for NullifierLeafPreimage {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n let siloed_value =\n compute_siloed_nullifier(read_request.contract_address, read_request.value());\n assert_eq(\n self.nullifier,\n siloed_value,\n \"Value of the nullifier leaf does not match read request\",\n );\n }\n}\n\nimpl NullifierLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.nullifier == 0) & (self.next_nullifier == 0) & (self.next_index == 0)\n }\n\n pub fn serialize(self) -> [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH] {\n [self.nullifier, self.next_nullifier, self.next_index as Field]\n }\n\n pub fn deserialize(fields: [Field; NULLIFIER_LEAF_PREIMAGE_LENGTH]) -> Self {\n Self { nullifier: fields[0], next_nullifier: fields[1], next_index: fields[2] as u32 }\n }\n}\n\nimpl Eq for NullifierLeafPreimage {\n fn eq(self, other: Self) -> bool {\n (self.nullifier == other.nullifier)\n & (self.next_nullifier == other.next_nullifier)\n & (self.next_index == other.next_index)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = NullifierLeafPreimage::empty();\n let serialized = item.serialize();\n let deserialized = NullifierLeafPreimage::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n"
|
|
5823
|
-
},
|
|
5824
|
-
"290": {
|
|
5825
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/indexed_tagging_secret.nr",
|
|
5826
|
-
"source": "use crate::traits::{Deserialize, Serialize};\nuse super::{address::aztec_address::AztecAddress, hash::poseidon2_hash};\nuse std::meta::derive;\n\npub global INDEXED_TAGGING_SECRET_LENGTH: u32 = 2;\n\n#[derive(Serialize, Deserialize)]\npub struct IndexedTaggingSecret {\n secret: Field,\n index: u32,\n}\n\nimpl IndexedTaggingSecret {\n pub fn compute_tag(self, recipient: AztecAddress) -> Field {\n poseidon2_hash([self.secret, recipient.to_field(), self.index as Field])\n }\n}\n"
|
|
5827
|
-
},
|
|
5828
|
-
"308": {
|
|
5799
|
+
"241": {
|
|
5829
5800
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
|
|
5830
5801
|
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> 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_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; 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, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [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"
|
|
5831
5802
|
},
|
|
5803
|
+
"243": {
|
|
5804
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr",
|
|
5805
|
+
"source": "pub mod assert_array_appended;\npub mod assert_array_prepended;\npub mod assert_combined_array;\npub mod assert_combined_transformed_array;\npub mod assert_exposed_sorted_transformed_value_array;\npub mod assert_sorted_array;\npub mod assert_sorted_transformed_value_array;\npub mod assert_split_sorted_transformed_value_arrays;\npub mod assert_split_transformed_value_arrays;\npub mod get_sorted_result;\npub mod get_sorted_tuple;\npub mod sort_by;\npub mod sort_by_counter;\n\n// Re-exports.\npub use assert_array_appended::{\n assert_array_appended, assert_array_appended_and_scoped, assert_array_appended_reversed,\n assert_array_appended_scoped,\n};\npub use assert_array_prepended::assert_array_prepended;\npub use assert_combined_array::{assert_combined_array, combine_arrays};\npub use assert_combined_transformed_array::{\n assert_combined_transformed_array, combine_and_transform_arrays,\n};\npub use assert_exposed_sorted_transformed_value_array::{\n assert_exposed_sorted_transformed_value_array,\n get_order_hints::{get_order_hints_asc, get_order_hints_desc, OrderHint},\n};\npub use assert_sorted_array::assert_sorted_array;\npub use assert_sorted_transformed_value_array::{\n assert_sorted_transformed_value_array, assert_sorted_transformed_value_array_capped_size,\n};\npub use assert_split_sorted_transformed_value_arrays::{\n assert_split_sorted_transformed_value_arrays_asc,\n assert_split_sorted_transformed_value_arrays_desc,\n get_split_order_hints::{get_split_order_hints_asc, get_split_order_hints_desc, SplitOrderHints},\n};\npub use assert_split_transformed_value_arrays::assert_split_transformed_value_arrays;\npub use get_sorted_result::{get_sorted_result, SortedResult};\npub use sort_by_counter::{sort_by_counter_asc, sort_by_counter_desc};\n\nuse crate::traits::{Empty, is_empty};\n\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\n// Helper function to convert a validated array to BoundedVec.\n// Important: Only use it for validated arrays: validate_array(array) should be true.\npub unconstrained fn array_to_bounded_vec<T, let N: u32>(array: [T; N]) -> BoundedVec<T, N>\nwhere\n T: Empty + Eq,\n{\n let len = array_length(array);\n BoundedVec::from_parts_unchecked(array, len)\n}\n\npub unconstrained fn find_index_hint<T, let N: u32, Env>(\n array: [T; N],\n find: fn[Env](T) -> bool,\n) -> u32 {\n let mut index = N;\n for i in 0..N {\n if (index == N) & find(array[i]) {\n index = i;\n }\n }\n index\n}\n\n// Routine which validates that all zero values of an array form a contiguous region at the end, i.e.,\n// of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is\n// valid.\npub fn validate_array<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n let mut seen_empty = false;\n let mut length = 0;\n for i in 0..N {\n if is_empty(array[i]) {\n seen_empty = true;\n } else {\n assert(seen_empty == false, \"invalid array\");\n length += 1;\n }\n }\n length\n}\n\n// Helper function to count the number of non-empty elements in a validated array.\n// Important: Only use it for validated arrays: validate_array(array) should be true.\npub fn array_length<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n let length = unsafe { find_index_hint(array, |elem: T| is_empty(elem)) };\n if length != 0 {\n assert(!is_empty(array[length - 1]));\n }\n if length != N {\n assert(is_empty(array[length]));\n }\n length\n}\n\npub fn array_concat<T, let N: u32, let M: u32>(array1: [T; N], array2: [T; M]) -> [T; N + M] {\n let mut result = [array1[0]; N + M];\n for i in 1..N {\n result[i] = array1[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n}\n\npub fn array_merge<T, let N: u32>(array1: [T; N], array2: [T; N]) -> [T; N]\nwhere\n T: Empty + Eq,\n{\n let mut result: [T; N] = [T::empty(); N];\n let mut i = 0;\n for elem in array1 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n for elem in array2 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n result\n}\n\npub fn check_permutation<T, let N: u32>(\n original_array: [T; N],\n permuted_array: [T; N],\n original_indexes: [u32; N],\n)\nwhere\n T: Eq + Empty,\n{\n let mut seen_value = [false; N];\n for i in 0..N {\n let index = original_indexes[i];\n let original_value = original_array[index];\n assert(permuted_array[i].eq(original_value), \"Invalid index\");\n assert(!seen_value[index], \"Duplicated index\");\n seen_value[index] = true;\n }\n}\n\n#[test]\nfn smoke_validate_array() {\n let valid_array: [Field; 0] = [];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [0];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [3];\n assert(validate_array(valid_array) == 1);\n\n let valid_array = [1, 2, 3];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0, 0];\n assert(validate_array(valid_array) == 3);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case0() {\n let invalid_array = [0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case1() {\n let invalid_array = [1, 0, 0, 1, 0];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case2() {\n let invalid_array = [0, 0, 0, 0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test]\nfn test_empty_array_length() {\n assert_eq(array_length([0]), 0);\n assert_eq(array_length([0, 0, 0]), 0);\n}\n\n#[test]\nfn test_array_length() {\n assert_eq(array_length([123]), 1);\n assert_eq(array_length([123, 0, 0]), 1);\n assert_eq(array_length([123, 456]), 2);\n assert_eq(array_length([123, 456, 0]), 2);\n}\n\n#[test]\nfn test_array_length_invalid_arrays() {\n // Result can be misleading (but correct) for invalid arrays.\n assert_eq(array_length([0, 0, 123]), 0);\n assert_eq(array_length([0, 123, 0]), 0);\n assert_eq(array_length([0, 123, 456]), 0);\n assert_eq(array_length([123, 0, 456]), 1);\n}\n\n#[test]\nfn find_index_greater_than_min() {\n let values = [10, 20, 30, 40];\n let min = 22;\n let index = unsafe { find_index_hint(values, |v: Field| min.lt(v)) };\n assert_eq(index, 2);\n}\n\n#[test]\nfn find_index_not_found() {\n let values = [10, 20, 30, 40];\n let min = 100;\n let index = unsafe { find_index_hint(values, |v: Field| min.lt(v)) };\n assert_eq(index, 4);\n}\n\n#[test]\nfn test_array_concat() {\n let array0 = [1, 2, 3];\n let array1 = [4, 5];\n let concated = array_concat(array0, array1);\n assert_eq(concated, [1, 2, 3, 4, 5]);\n}\n\n#[test]\nfn check_permutation_basic_test() {\n let original_array = [1, 2, 3];\n let permuted_array = [3, 1, 2];\n let indexes = [2, 0, 1];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Duplicated index\")]\nfn check_permutation_duplicated_index() {\n let original_array = [0, 1, 0];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 0];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Invalid index\")]\nfn check_permutation_invalid_index() {\n let original_array = [0, 1, 2];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 2];\n check_permutation(original_array, permuted_array, indexes);\n}\n"
|
|
5806
|
+
},
|
|
5807
|
+
"271": {
|
|
5808
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr",
|
|
5809
|
+
"source": "pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{hash::poseidon2_hash, traits::{Deserialize, Empty, Hash, Serialize}};\n\npub global POINT_LENGTH: u32 = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"
|
|
5810
|
+
},
|
|
5811
|
+
"309": {
|
|
5812
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
|
|
5813
|
+
"source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
|
|
5814
|
+
},
|
|
5832
5815
|
"310": {
|
|
5833
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5834
|
-
"source": "
|
|
5816
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
|
|
5817
|
+
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse std::default::Default;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field,\n ))\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field,\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: serialized[0],\n y: serialized[1],\n is_infinite: serialized[2] as bool,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: serialized[3],\n y: serialized[4],\n is_infinite: serialized[5] as bool,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: serialized[6],\n y: serialized[7],\n is_infinite: serialized[8] as bool,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: serialized[9],\n y: serialized[10],\n is_infinite: serialized[11] as bool,\n },\n },\n }\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash =\n 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n let test_data_default_hash = 0x1d3bf1fb93ae0e9cda83b203dd91c3bfb492a9aecf30ec90e1057eced0f0e62d;\n\n assert(actual.to_field() == test_data_default_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"
|
|
5818
|
+
},
|
|
5819
|
+
"311": {
|
|
5820
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
5821
|
+
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::scoped::Scoped,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::utils::{arrays::array_concat, field::field_from_bytes};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [tx_hash, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n tx_hash: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\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 silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\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//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\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 // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
5835
5822
|
},
|
|
5836
5823
|
"317": {
|
|
5837
|
-
"path": "/root/nargo/github.com/noir-lang/
|
|
5824
|
+
"path": "/root/nargo/github.com/noir-lang/ec/v0.1.2/src/lib.nr",
|
|
5838
5825
|
"source": "// Elliptic curve implementation\n// Overview\n// ========\n// The following three elliptic curve representations are admissible:\npub mod tecurve; // Twisted Edwards curves\npub mod swcurve; // Elliptic curves in Short Weierstrass form\npub mod montcurve; // Montgomery curves\npub mod consts; // Commonly used curve presets\n//\n// Note that Twisted Edwards and Montgomery curves are (birationally) equivalent, so that\n// they may be freely converted between one another, whereas Short Weierstrass curves are\n// more general. Diagramatically:\n//\n// tecurve == montcurve `subset` swcurve\n//\n// Each module is further divided into two submodules, 'affine' and 'curvegroup', depending\n// on the preferred coordinate representation. Affine coordinates are none other than the usual\n// two-dimensional Cartesian coordinates used in the definitions of these curves, whereas\n// 'CurveGroup' coordinates (terminology borrowed from Arkworks, whose conventions we try\n// to follow) are special coordinate systems with respect to which the group operations may be\n// implemented more efficiently, usually by means of an appropriate choice of projective coordinates.\n//\n// In each of these submodules, there is a Point struct and a Curve struct, the former\n// representing a point in the coordinate system and the latter a curve configuration.\n//\n// Points\n// ======\n// Points may be instantiated using the associated function `new`, which takes coordinates\n// as its arguments. For instance,\n//\n// `let p = swcurve::Point::new(1,1);`\n//\n// The additive identity may be constructed by a call to the associated function `zero` of no\n// arguments:\n//\n// `let zero = swcurve::Point::zero();`\n//\n// Points may be tested for equality by calling the method `eq`:\n//\n// `let pred = p.eq(zero);`\n//\n// There is also the method `is_zero` to explicitly check whether a point is the additive identity:\n//\n// `constrain pred == p.is_zero();`\n//\n// Points may be negated by calling the `negate` method and converted to CurveGroup (or affine)\n// coordinates by calling the `into_group` (resp. `into_affine`) method on them. Finally,\n// Points may be freely mapped between their respective Twisted Edwards and Montgomery\n// representations by calling the `into_montcurve` or `into_tecurve` methods. For mappings\n// between Twisted Edwards/Montgomery curves and Short Weierstrass curves, see the Curve section\n// below, as the underlying mappings are those of curves rather than ambient spaces.\n// As a rule, Points in affine (or CurveGroup) coordinates are mapped to Points in affine\n// (resp. CurveGroup) coordinates.\n//\n// Curves\n// ======\n// A curve configuration (Curve) is completely determined by the Field coefficients of its defining\n// equation (a and b in the case of swcurve, a and d in the case of tecurve, and j and k in\n// the case of montcurve) together with a generator (`gen`) in the corresponding coordinate system.\n// For example, the Baby Jubjub curve configuration as defined in ERC-2494 may be instantiated as a Twisted\n// Edwards curve in affine coordinates as follows:\n//\n// `let bjj_affine = tecurve::Curve::new(168700, 168696, tecurve::Point::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905));`\n//\n// The `contains` method may be used to check whether a Point lies on a given curve:\n//\n// `constrain bjj_affine.contains(tecurve::Point::zero());`\n//\n// The elliptic curve group's addition operation is exposed as the `add` method, e.g.\n//\n// `let p = bjj_affine.add(bjj_affine.gen, bjj_affine.gen);`\n//\n// subtraction as the `subtract` method, e.g.\n//\n// `constrain tecurve::Point::zero().eq(bjj_affine.subtract(bjj_affine.gen, bjj_affine.gen));`\n//\n// scalar multiplication as the `mul` method, where the scalar is assumed to be a Field* element, e.g.\n//\n// `constrain tecurve::Point::zero().eq(bjj_affine.mul(2, tecurve::Point::zero());`\n//\n// There is a scalar multiplication method (`bit_mul`) provided where the scalar input is expected to be\n// an array of bits (little-endian convention), as well as a multi-scalar multiplication method** (`msm`)\n// which takes an array of Field elements and an array of elliptic curve points as arguments, both assumed\n// to be of the same length.\n//\n// Curve configurations may be converted between different coordinate representations by calling the `into_group`\n// and `into_affine` methods on them, e.g.\n//\n// `let bjj_curvegroup = bjj_affine.into_group();`\n//\n// Curve configurations may also be converted between different curve representations by calling the `into_swcurve`,\n// `into_montcurve` and `into_tecurve` methods subject to the relation between the curve representations mentioned\n// above. Note that it is possible to map Points from a Twisted Edwards/Montgomery curve to the corresponding\n// Short Weierstrass representation and back, and the methods to do so are exposed as `map_into_swcurve` and\n// `map_from_swcurve`, which each take one argument, the point to be mapped.\n//\n// Curve maps\n// ==========\n// There are a few different ways of mapping Field elements to elliptic curves. Here we provide the simplified\n// Shallue-van de Woestijne-Ulas and Elligator 2 methods, the former being applicable to all curve types\n// provided above subject to the constraint that the coefficients of the corresponding Short Weierstrass curve satisfies\n// a*b != 0 and the latter being applicable to Montgomery and Twisted Edwards curves subject to the constraint that\n// the coefficients of the corresponding Montgomery curve satisfy j*k != 0 and (j^2 - 4)/k^2 is non-square.\n//\n// The simplified Shallue-van de Woestijne-Ulas method is exposed as the method `swu_map` on the Curve configuration and\n// depends on two parameters, a Field element z != -1 for which g(x) - z is irreducible over Field and g(b/(z*a)) is\n// square, where g(x) = x^3 + a*x + b is the right-hand side of the defining equation of the corresponding Short\n// Weierstrass curve, and a Field element u to be mapped onto the curve. For example, in the case of bjj_affine above,\n// it may be determined using the scripts provided at <https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve> that z = 5.\n//\n// The Elligator 2 method is exposed as the method `elligator2_map` on the Curve configurations of Montgomery and\n// Twisted Edwards curves. Like the simplified SWU method above, it depends on a certain non-square element of Field,\n// but this element need not satisfy any further conditions, so it is included as the (Field-dependent) constant\n//`ZETA` below. Thus, the `elligator2_map` method depends only on one parameter, the Field element to be mapped onto\n// the curve.\n//\n// For details on all of the above in the context of hashing to elliptic curves, see <https://datatracker.ietf.org/doc/id/draft-irtf-cfrg-hash-to-curve-06.html>.\n//\n//\n// *TODO: Replace Field with Bigint.\n// **TODO: Support arrays of structs to make this work.\n// Field-dependent constant ZETA = a non-square element of Field\n// Required for Elligator 2 map\n// TODO: Replace with built-in constant.\nglobal ZETA: Field = 5;\n// Field-dependent constants for Tonelli-Shanks algorithm (see sqrt function below)\n// TODO: Possibly make this built-in.\nglobal C1: u32 = 28;\nglobal C3: Field = 40770029410420498293352137776570907027550720424234931066070132305055;\nglobal C5: Field = 19103219067921713944291392827692070036145651957329286315305642004821462161904;\n// Higher-order version of scalar multiplication\n// TODO: Make this work so that the submodules' bit_mul may be defined in terms of it.\n//fn bit_mul<T,N>(add: fn(T,T) -> T, e: T, bits: [u1; N], p: T) -> T {\n// let mut out = e;\n// let n = bits.len();\n//\n// for i in 0..n {\n// out = add(\n// add(out, out),\n// if(bits[n - i - 1] == 0) {e} else {p});\n// }\n//\n// out\n//}\n// TODO: Make this built-in.\npub fn safe_inverse(x: Field) -> Field {\n if x == 0 {\n 0\n } else {\n 1 / x\n }\n}\n// Boolean indicating whether Field element is a square, i.e. whether there exists a y in Field s.t. x = y*y.\npub fn is_square(x: Field) -> bool {\n let v = pow(x, 0 - 1 / 2);\n\n v * (v - 1) == 0\n}\n// Power function of two Field arguments of arbitrary size.\n// Adapted from std::field::pow_32.\npub fn pow(x: Field, y: Field) -> Field {\n let mut r = 1 as Field;\n let b: [u1; 254] = y.to_le_bits();\n\n for i in 0..254 {\n r *= r;\n r *= (b[254 - 1 - i] as Field) * x + (1 - b[254 - 1 - i] as Field);\n }\n\n r\n}\n// Tonelli-Shanks algorithm for computing the square root of a Field element.\n// Requires C1 = max{c: 2^c divides (p-1)}, where p is the order of Field\n// as well as C3 = (C2 - 1)/2, where C2 = (p-1)/(2^c1),\n// and C5 = ZETA^C2, where ZETA is a non-square element of Field.\n// These are pre-computed above as globals.\npub fn sqrt(x: Field) -> Field {\n let mut z = pow(x, C3);\n let mut t = z * z * x;\n z *= x;\n let mut b = t;\n let mut c = C5;\n\n for i in 0..(C1 - 1) {\n for _j in 1..(C1 - i - 1) {\n b *= b;\n }\n\n z *= if b == 1 { 1 } else { c };\n\n c *= c;\n\n t *= if b == 1 { 1 } else { c };\n\n b = t;\n }\n\n z\n}\n\nmod tests {\n use crate::montcurve::affine::Point as MGaffine;\n use crate::montcurve::curvegroup::Point as MG;\n use crate::swcurve::affine::Point as SWGaffine;\n use crate::swcurve::curvegroup::Point as SWG;\n use crate::tecurve::affine::Curve as AffineCurve;\n use crate::tecurve::affine::Point as Gaffine;\n use crate::tecurve::curvegroup::Point as G;\n\n #[test]\n fn smoke_test() {\n // Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc\n // Define Baby Jubjub (ERC-2494) parameters in affine representation\n let bjj_affine = AffineCurve::new(\n 168700,\n 168696,\n Gaffine::new(\n 995203441582195749578291179787384436505546430278305826713579947235728471134,\n 5472060717959818805561601436314318772137091100104008585924551046643952123905,\n ),\n );\n // Test addition\n let p1_affine = Gaffine::new(\n 17777552123799933955779906779655732241715742912184938656739573121738514868268,\n 2626589144620713026669568689430873010625803728049924121243784502389097019475,\n );\n let p2_affine = Gaffine::new(\n 16540640123574156134436876038791482806971768689494387082833631921987005038935,\n 20819045374670962167435360035096875258406992893633759881276124905556507972311,\n );\n\n let p3_affine = bjj_affine.add(p1_affine, p2_affine);\n assert(p3_affine.eq(Gaffine::new(\n 7916061937171219682591368294088513039687205273691143098332585753343424131937,\n 14035240266687799601661095864649209771790948434046947201833777492504781204499,\n )));\n // Test scalar multiplication\n let p4_affine = bjj_affine.mul(2, p1_affine);\n assert(p4_affine.eq(Gaffine::new(\n 6890855772600357754907169075114257697580319025794532037257385534741338397365,\n 4338620300185947561074059802482547481416142213883829469920100239455078257889,\n )));\n assert(p4_affine.eq(bjj_affine.bit_mul([0, 1], p1_affine)));\n // Test subtraction\n let p5_affine = bjj_affine.subtract(p3_affine, p3_affine);\n assert(p5_affine.eq(Gaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_affine.contains(bjj_affine.gen)\n & bjj_affine.contains(p1_affine)\n & bjj_affine.contains(p2_affine)\n & bjj_affine.contains(p3_affine)\n & bjj_affine.contains(p4_affine)\n & bjj_affine.contains(p5_affine),\n );\n // Test CurveGroup equivalents\n let bjj = bjj_affine.into_group(); // Baby Jubjub\n let p1 = p1_affine.into_group();\n let p2 = p2_affine.into_group();\n let p3 = p3_affine.into_group();\n let p4 = p4_affine.into_group();\n let p5 = p5_affine.into_group();\n // Test addition\n assert(p3.eq(bjj.add(p1, p2)));\n // Test scalar multiplication\n assert(p4.eq(bjj.mul(2, p1)));\n assert(p4.eq(bjj.bit_mul([0, 1], p1)));\n // Test subtraction\n assert(G::zero().eq(bjj.subtract(p3, p3)));\n assert(p5.eq(G::zero()));\n // Check that these points are on the curve\n assert(\n bjj.contains(bjj.gen)\n & bjj.contains(p1)\n & bjj.contains(p2)\n & bjj.contains(p3)\n & bjj.contains(p4)\n & bjj.contains(p5),\n );\n // Test SWCurve equivalents of the above\n // First the affine representation\n let bjj_swcurve_affine = bjj_affine.into_swcurve();\n\n let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine);\n let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine);\n let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine);\n let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine);\n let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine);\n // Addition\n assert(p3_swcurve_affine.eq(bjj_swcurve_affine.add(p1_swcurve_affine, p2_swcurve_affine)));\n // Doubling\n assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine)));\n assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0, 1], p1_swcurve_affine)));\n // Subtraction\n assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(\n p3_swcurve_affine,\n p3_swcurve_affine,\n )));\n assert(p5_swcurve_affine.eq(SWGaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_swcurve_affine.contains(bjj_swcurve_affine.gen)\n & bjj_swcurve_affine.contains(p1_swcurve_affine)\n & bjj_swcurve_affine.contains(p2_swcurve_affine)\n & bjj_swcurve_affine.contains(p3_swcurve_affine)\n & bjj_swcurve_affine.contains(p4_swcurve_affine)\n & bjj_swcurve_affine.contains(p5_swcurve_affine),\n );\n // Then the CurveGroup representation\n let bjj_swcurve = bjj.into_swcurve();\n\n let p1_swcurve = bjj.map_into_swcurve(p1);\n let p2_swcurve = bjj.map_into_swcurve(p2);\n let p3_swcurve = bjj.map_into_swcurve(p3);\n let p4_swcurve = bjj.map_into_swcurve(p4);\n let p5_swcurve = bjj.map_into_swcurve(p5);\n // Addition\n assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve, p2_swcurve)));\n // Doubling\n assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve)));\n assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0, 1], p1_swcurve)));\n // Subtraction\n assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve)));\n assert(p5_swcurve.eq(SWG::zero()));\n // Check that these points are on the curve\n assert(\n bjj_swcurve.contains(bjj_swcurve.gen)\n & bjj_swcurve.contains(p1_swcurve)\n & bjj_swcurve.contains(p2_swcurve)\n & bjj_swcurve.contains(p3_swcurve)\n & bjj_swcurve.contains(p4_swcurve)\n & bjj_swcurve.contains(p5_swcurve),\n );\n // Test MontCurve conversions\n // First the affine representation\n let bjj_montcurve_affine = bjj_affine.into_montcurve();\n\n let p1_montcurve_affine = p1_affine.into_montcurve();\n let p2_montcurve_affine = p2_affine.into_montcurve();\n let p3_montcurve_affine = p3_affine.into_montcurve();\n let p4_montcurve_affine = p4_affine.into_montcurve();\n let p5_montcurve_affine = p5_affine.into_montcurve();\n // Addition\n assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(\n p1_montcurve_affine,\n p2_montcurve_affine,\n )));\n // Doubling\n assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine)));\n assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0, 1], p1_montcurve_affine)));\n // Subtraction\n assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(\n p3_montcurve_affine,\n p3_montcurve_affine,\n )));\n assert(p5_montcurve_affine.eq(MGaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_montcurve_affine.contains(bjj_montcurve_affine.gen)\n & bjj_montcurve_affine.contains(p1_montcurve_affine)\n & bjj_montcurve_affine.contains(p2_montcurve_affine)\n & bjj_montcurve_affine.contains(p3_montcurve_affine)\n & bjj_montcurve_affine.contains(p4_montcurve_affine)\n & bjj_montcurve_affine.contains(p5_montcurve_affine),\n );\n // Then the CurveGroup representation\n let bjj_montcurve = bjj.into_montcurve();\n\n let p1_montcurve = p1_montcurve_affine.into_group();\n let p2_montcurve = p2_montcurve_affine.into_group();\n let p3_montcurve = p3_montcurve_affine.into_group();\n let p4_montcurve = p4_montcurve_affine.into_group();\n let p5_montcurve = p5_montcurve_affine.into_group();\n // Addition\n assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve)));\n // Doubling\n assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve)));\n assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0, 1], p1_montcurve)));\n // Subtraction\n assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve)));\n assert(p5_montcurve.eq(MG::zero()));\n // Check that these points are on the curve\n assert(\n bjj_montcurve.contains(bjj_montcurve.gen)\n & bjj_montcurve.contains(p1_montcurve)\n & bjj_montcurve.contains(p2_montcurve)\n & bjj_montcurve.contains(p3_montcurve)\n & bjj_montcurve.contains(p4_montcurve)\n & bjj_montcurve.contains(p5_montcurve),\n );\n // Elligator 2 map-to-curve\n let ell2_pt_map = bjj_affine.elligator2_map(27);\n\n assert(ell2_pt_map.eq(MGaffine::new(\n 7972459279704486422145701269802978968072470631857513331988813812334797879121,\n 8142420778878030219043334189293412482212146646099536952861607542822144507872,\n )\n .into_tecurve()));\n // SWU map-to-curve\n let swu_pt_map = bjj_affine.swu_map(5, 27);\n\n assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(\n 2162719247815120009132293839392097468339661471129795280520343931405114293888,\n 5341392251743377373758788728206293080122949448990104760111875914082289313973,\n ))));\n }\n\n}\n"
|
|
5839
5826
|
},
|
|
5840
|
-
"334": {
|
|
5841
|
-
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/account.nr",
|
|
5842
|
-
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
5843
|
-
},
|
|
5844
5827
|
"336": {
|
|
5845
|
-
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr",
|
|
5846
|
-
"source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage()\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage()\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,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"
|
|
5847
|
-
},
|
|
5848
|
-
"337": {
|
|
5849
5828
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr",
|
|
5850
5829
|
"source": "use crate::entrypoint::function_call::FunctionCall;\nuse dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage()\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage()\n }\n\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,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"
|
|
5851
5830
|
},
|
|
5831
|
+
"337": {
|
|
5832
|
+
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr",
|
|
5833
|
+
"source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage()\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage()\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,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"
|
|
5834
|
+
},
|
|
5852
5835
|
"340": {
|
|
5836
|
+
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/account.nr",
|
|
5837
|
+
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
5838
|
+
},
|
|
5839
|
+
"342": {
|
|
5853
5840
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr",
|
|
5854
5841
|
"source": "#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n *\n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\npub unconstrained fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"
|
|
5855
5842
|
},
|
|
5856
|
-
"
|
|
5843
|
+
"343": {
|
|
5857
5844
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr",
|
|
5858
5845
|
"source": "use dep::aztec::{context::{gas::GasOpts, PrivateContext, PublicContext}, hash::hash_args_array};\nuse dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::{\n CANONICAL_AUTH_REGISTRY_ADDRESS, GENERATOR_INDEX__AUTHWIT_INNER,\n GENERATOR_INDEX__AUTHWIT_NULLIFIER, GENERATOR_INDEX__AUTHWIT_OUTER,\n },\n hash::poseidon2_hash_with_separator,\n};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR: Field = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` has authorized the current call with a valid authentication witness\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([\n context.msg_sender().to_field(),\n context.selector().to_field(),\n context.args_hash,\n ]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context\n .static_call_private_function(\n on_behalf_of,\n comptime { FunctionSelector::from_signature(\"verify_private_authwit(Field)\") },\n [inner_hash],\n )\n .unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allows the same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` has authorized the current call in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub unconstrained fn assert_current_call_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n) {\n let inner_hash = compute_inner_authwit_hash([\n (*context).msg_sender().to_field(),\n (*context).selector().to_field(),\n (*context).get_args_hash(),\n ]);\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` has authorized a specific `inner_hash` in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the `inner_hash`\n */\npub unconstrained fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n let results: [Field] = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"consume((Field),Field)\") },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default(),\n );\n assert(results.len() == 1, \"Invalid response from registry\");\n assert(results[0] == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N],\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash =\n compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computes the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that has authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [consumer.to_field(), chain_id, version, inner_hash],\n GENERATOR_INDEX__AUTHWIT_OUTER,\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub unconstrained fn set_authorized(\n context: &mut PublicContext,\n message_hash: Field,\n authorize: bool,\n) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\") },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub unconstrained fn set_reject_all(context: &mut PublicContext, reject: bool) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\") },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n"
|
|
5859
5846
|
},
|
|
5860
|
-
"
|
|
5847
|
+
"430": {
|
|
5861
5848
|
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr",
|
|
5862
|
-
"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.\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract SchnorrAccount {\n use dep::authwit::{\n account::AccountActions,\n auth::{compute_authwit_message_hash, compute_authwit_nullifier},\n auth_witness::get_auth_witness,\n entrypoint::{app::AppPayload, fee::FeePayload},\n };\n use dep::aztec::encrypted_logs::encrypted_note_emission::encode_and_encrypt_note;\n use dep::aztec::
|
|
5849
|
+
"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.\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract SchnorrAccount {\n use dep::authwit::{\n account::AccountActions,\n auth::{compute_authwit_message_hash, compute_authwit_nullifier},\n auth_witness::get_auth_witness,\n entrypoint::{app::AppPayload, fee::FeePayload},\n };\n use dep::aztec::encrypted_logs::encrypted_note_emission::encode_and_encrypt_note;\n use dep::aztec::hash::compute_siloed_nullifier;\n use dep::aztec::macros::{\n functions::{initializer, noinitcheck, private, view},\n storage::storage,\n };\n use dep::aztec::oracle::get_nullifier_membership_witness::get_low_nullifier_membership_witness;\n use dep::aztec::prelude::{AztecAddress, PrivateContext, PrivateImmutable};\n\n use crate::public_key_note::PublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n signing_public_key: PrivateImmutable<PublicKeyNote, Context>,\n }\n\n // Constructs the contract\n #[private]\n #[initializer]\n fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) {\n let this = context.this_address();\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).emit(encode_and_encrypt_note(\n &mut context,\n this,\n this,\n ));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts file\n #[private]\n #[noinitcheck]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[private]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // docs:start:is_valid_impl\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.signing_public_key.get_note();\n // Load auth witness\n let witness: [Field; 64] = unsafe { get_auth_witness(outer_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 let pub_key = std::embedded_curve_ops::EmbeddedCurvePoint {\n x: public_key.x,\n y: public_key.y,\n is_infinite: false,\n };\n // Verify signature of the payload bytes\n schnorr::verify_signature(pub_key, signature, outer_hash.to_be_bytes::<32>())\n // docs:end:is_valid_impl\n }\n\n /**\n * @notice Helper function to check validity of private authwitnesses\n * @param consumer The address of the consumer of the message\n * @param message_hash The message hash of the message to check the validity\n * @return True if the message_hash can be consumed, false otherwise\n */\n unconstrained fn lookup_validity(consumer: AztecAddress, inner_hash: Field) -> pub bool {\n let public_key = storage.signing_public_key.view_note();\n\n let message_hash = compute_authwit_message_hash(\n consumer,\n context.chain_id(),\n context.version(),\n inner_hash,\n );\n\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 let pub_key = std::embedded_curve_ops::EmbeddedCurvePoint {\n x: public_key.x,\n y: public_key.y,\n is_infinite: false,\n };\n let valid_in_private =\n schnorr::verify_signature(pub_key, signature, message_hash.to_be_bytes::<32>());\n\n // Compute the nullifier and check if it is spent\n // This will BLINDLY TRUST the oracle, but the oracle is us, and\n // it is not as part of execution of the contract, so we are good.\n let nullifier = compute_authwit_nullifier(context.this_address(), inner_hash);\n let siloed_nullifier = compute_siloed_nullifier(consumer, nullifier);\n let lower_wit =\n get_low_nullifier_membership_witness(context.block_number(), siloed_nullifier);\n let is_spent = lower_wit.leaf_preimage.nullifier == siloed_nullifier;\n\n !is_spent & valid_in_private\n }\n}\n"
|
|
5863
5850
|
},
|
|
5864
|
-
"
|
|
5851
|
+
"431": {
|
|
5865
5852
|
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr",
|
|
5866
5853
|
"source": "use dep::aztec::{\n keys::getters::{get_nsk_app, get_public_keys},\n macros::notes::note,\n note::utils::compute_note_hash_for_nullify,\n protocol_types::{\n address::AztecAddress, constants::GENERATOR_INDEX__NOTE_NULLIFIER,\n hash::poseidon2_hash_with_separator,\n },\n};\nuse dep::aztec::prelude::{NoteHeader, NullifiableNote, PrivateContext};\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?\n#[note]\npub struct PublicKeyNote {\n x: Field,\n y: Field,\n owner: AztecAddress,\n}\n\nimpl NullifiableNote for PublicKeyNote {\n fn compute_nullifier(\n self,\n context: &mut PrivateContext,\n note_hash_for_nullify: Field,\n ) -> Field {\n let owner_npk_m_hash: Field = get_public_keys(self.owner).npk_m.hash();\n let secret = context.request_nsk_app(owner_npk_m_hash);\n poseidon2_hash_with_separator(\n [note_hash_for_nullify, secret],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n unconstrained fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let owner_npk_m_hash: Field = get_public_keys(self.owner).npk_m.hash();\n let secret = get_nsk_app(owner_npk_m_hash);\n poseidon2_hash_with_separator(\n [note_hash_for_nullify, secret],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl PublicKeyNote {\n pub fn new(x: Field, y: Field, owner: AztecAddress) -> Self {\n PublicKeyNote { x, y, owner, header: NoteHeader::empty() }\n }\n}\n"
|
|
5867
5854
|
},
|
|
5868
|
-
"
|
|
5869
|
-
"path": "/root/nargo/github.com/noir-lang/
|
|
5855
|
+
"432": {
|
|
5856
|
+
"path": "/root/nargo/github.com/noir-lang/schnorr/v0.1.1/src/lib.nr",
|
|
5870
5857
|
"source": "use std::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul};\nuse std::hash::{blake2s, pedersen_hash};\n\npub fn verify_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) -> bool {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n // pub_key is on Grumpkin curve\n let mut is_ok = (public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17)\n & (!public_key.is_infinite);\n\n if ((sig_s.lo != 0) | (sig_s.hi != 0)) & ((sig_e.lo != 0) | (sig_e.hi != 0)) {\n let (r_is_infinite, result) =\n calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n is_ok &= !r_is_infinite;\n for i in 0..32 {\n is_ok &= result[i] == signature[32 + i];\n }\n } else {\n is_ok = false;\n }\n is_ok\n}\n\npub fn assert_valid_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n\n // assert pub_key is on Grumpkin curve\n assert(public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17);\n assert(public_key.is_infinite == false);\n // assert signature is not null\n assert((sig_s.lo != 0) | (sig_s.hi != 0));\n assert((sig_e.lo != 0) | (sig_e.hi != 0));\n\n let (r_is_infinite, result) = calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n assert(!r_is_infinite);\n for i in 0..32 {\n assert(result[i] == signature[32 + i]);\n }\n}\n\nfn calculate_signature_challenge<let N: u32>(\n public_key: EmbeddedCurvePoint,\n sig_s: EmbeddedCurveScalar,\n sig_e: EmbeddedCurveScalar,\n message: [u8; N],\n) -> (bool, [u8; 32]) {\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let r = multi_scalar_mul([g1, public_key], [sig_s, sig_e]);\n // compare the _hashes_ rather than field elements modulo r\n let pedersen_hash = pedersen_hash([r.x, public_key.x, public_key.y]);\n let pde: [u8; 32] = pedersen_hash.to_be_bytes();\n\n let mut hash_input = [0; N + 32];\n for i in 0..32 {\n hash_input[i] = pde[i];\n }\n for i in 0..N {\n hash_input[32 + i] = message[i];\n }\n\n let result = blake2s(hash_input);\n (r.is_infinite, result)\n}\n\n//Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\nfn scalar_from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v: Field = 1;\n let mut lo: Field = 0;\n let mut hi: Field = 0;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = EmbeddedCurveScalar::new(lo, hi);\n sig_s\n}\n\nmod test {\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n use super::verify_signature;\n\n #[test]\n fn test_zero_signature() {\n let public_key: EmbeddedCurvePoint = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let signature: [u8; 64] = [0; 64];\n let message: [u8; _] = [2; 64]; // every message\n let verified = verify_signature(public_key, signature, message);\n assert(!verified);\n }\n\n #[test]\n fn smoke_test() {\n let message: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let pub_key_x: Field = 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a;\n let pub_key_y: Field = 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197;\n let signature: [u8; 64] = [\n 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76,\n 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, 27, 237, 155, 84, 39, 84,\n 247, 27, 22, 8, 176, 230, 24, 115, 145, 220, 254, 122, 135, 179, 171, 4, 214, 202, 64,\n 199, 19, 84, 239, 138, 124, 12,\n ];\n\n let pub_key = EmbeddedCurvePoint { x: pub_key_x, y: pub_key_y, is_infinite: false };\n let valid_signature = verify_signature(pub_key, signature, message);\n assert(valid_signature);\n super::assert_valid_signature(pub_key, signature, message);\n }\n\n}\n\nmod bench {\n use super::{assert_valid_signature, verify_signature};\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n #[export]\n pub fn bench_verify_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) -> bool {\n verify_signature(public_key, signature, message)\n }\n\n #[export]\n pub fn bench_assert_valid_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) {\n assert_valid_signature(public_key, signature, message)\n }\n}\n"
|
|
5871
5858
|
}
|
|
5872
5859
|
}
|