@aztec/accounts 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +38 -0
  2. package/dest/artifacts/EcdsaAccount.json +1090 -0
  3. package/dest/artifacts/SchnorrAccount.json +1078 -0
  4. package/dest/artifacts/SchnorrSingleKeyAccount.json +951 -0
  5. package/dest/defaults/account_contract.d.ts +16 -0
  6. package/dest/defaults/account_contract.d.ts.map +1 -0
  7. package/dest/defaults/account_contract.js +17 -0
  8. package/dest/defaults/account_entrypoint.d.ts +17 -0
  9. package/dest/defaults/account_entrypoint.d.ts.map +1 -0
  10. package/dest/defaults/account_entrypoint.js +117 -0
  11. package/dest/defaults/account_interface.d.ts +17 -0
  12. package/dest/defaults/account_interface.d.ts.map +1 -0
  13. package/dest/defaults/account_interface.js +22 -0
  14. package/dest/defaults/constants.d.ts +5 -0
  15. package/dest/defaults/constants.d.ts.map +1 -0
  16. package/dest/defaults/constants.js +5 -0
  17. package/dest/defaults/entrypoint_payload.d.ts +32 -0
  18. package/dest/defaults/entrypoint_payload.d.ts.map +1 -0
  19. package/dest/defaults/entrypoint_payload.js +50 -0
  20. package/dest/defaults/index.d.ts +13 -0
  21. package/dest/defaults/index.d.ts.map +1 -0
  22. package/dest/defaults/index.js +13 -0
  23. package/dest/ecdsa/account_contract.d.ts +15 -0
  24. package/dest/ecdsa/account_contract.d.ts.map +1 -0
  25. package/dest/ecdsa/account_contract.js +33 -0
  26. package/dest/ecdsa/artifact.d.ts +3 -0
  27. package/dest/ecdsa/artifact.d.ts.map +1 -0
  28. package/dest/ecdsa/artifact.js +3 -0
  29. package/dest/ecdsa/index.d.ts +31 -0
  30. package/dest/ecdsa/index.d.ts.map +1 -0
  31. package/dest/ecdsa/index.js +32 -0
  32. package/dest/schnorr/account_contract.d.ts +15 -0
  33. package/dest/schnorr/account_contract.d.ts.map +1 -0
  34. package/dest/schnorr/account_contract.js +33 -0
  35. package/dest/schnorr/artifact.d.ts +3 -0
  36. package/dest/schnorr/artifact.d.ts.map +1 -0
  37. package/dest/schnorr/artifact.js +3 -0
  38. package/dest/schnorr/index.d.ts +30 -0
  39. package/dest/schnorr/index.d.ts.map +1 -0
  40. package/dest/schnorr/index.js +32 -0
  41. package/dest/single_key/account_contract.d.ts +14 -0
  42. package/dest/single_key/account_contract.d.ts.map +1 -0
  43. package/dest/single_key/account_contract.js +40 -0
  44. package/dest/single_key/artifact.d.ts +3 -0
  45. package/dest/single_key/artifact.d.ts.map +1 -0
  46. package/dest/single_key/artifact.js +3 -0
  47. package/dest/single_key/index.d.ts +31 -0
  48. package/dest/single_key/index.d.ts.map +1 -0
  49. package/dest/single_key/index.js +33 -0
  50. package/dest/testing/create_account.d.ts +16 -0
  51. package/dest/testing/create_account.d.ts.map +1 -0
  52. package/dest/testing/create_account.js +30 -0
  53. package/dest/testing/index.d.ts +11 -0
  54. package/dest/testing/index.d.ts.map +1 -0
  55. package/dest/testing/index.js +11 -0
  56. package/dest/testing/sandbox.d.ts +22 -0
  57. package/dest/testing/sandbox.d.ts.map +1 -0
  58. package/dest/testing/sandbox.js +48 -0
  59. package/package.json +74 -0
@@ -0,0 +1,1090 @@
1
+ {
2
+ "name": "EcdsaAccount",
3
+ "functions": [
4
+ {
5
+ "name": "compute_note_hash_and_nullifier",
6
+ "functionType": "unconstrained",
7
+ "isInternal": false,
8
+ "parameters": [
9
+ {
10
+ "name": "contract_address",
11
+ "type": {
12
+ "kind": "struct",
13
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
14
+ "fields": [
15
+ {
16
+ "name": "inner",
17
+ "type": {
18
+ "kind": "field"
19
+ }
20
+ }
21
+ ]
22
+ },
23
+ "visibility": "private"
24
+ },
25
+ {
26
+ "name": "nonce",
27
+ "type": {
28
+ "kind": "field"
29
+ },
30
+ "visibility": "private"
31
+ },
32
+ {
33
+ "name": "storage_slot",
34
+ "type": {
35
+ "kind": "field"
36
+ },
37
+ "visibility": "private"
38
+ },
39
+ {
40
+ "name": "serialized_note",
41
+ "type": {
42
+ "kind": "array",
43
+ "length": 5,
44
+ "type": {
45
+ "kind": "field"
46
+ }
47
+ },
48
+ "visibility": "private"
49
+ }
50
+ ],
51
+ "returnTypes": [
52
+ {
53
+ "kind": "array",
54
+ "length": 4,
55
+ "type": {
56
+ "kind": "field"
57
+ }
58
+ }
59
+ ],
60
+ "bytecode": "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",
61
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
62
+ },
63
+ {
64
+ "name": "constructor",
65
+ "functionType": "secret",
66
+ "isInternal": false,
67
+ "parameters": [
68
+ {
69
+ "name": "signing_pub_key_x",
70
+ "type": {
71
+ "kind": "array",
72
+ "length": 32,
73
+ "type": {
74
+ "kind": "integer",
75
+ "sign": "unsigned",
76
+ "width": 8
77
+ }
78
+ },
79
+ "visibility": "public"
80
+ },
81
+ {
82
+ "name": "signing_pub_key_y",
83
+ "type": {
84
+ "kind": "array",
85
+ "length": 32,
86
+ "type": {
87
+ "kind": "integer",
88
+ "sign": "unsigned",
89
+ "width": 8
90
+ }
91
+ },
92
+ "visibility": "public"
93
+ }
94
+ ],
95
+ "returnTypes": [],
96
+ "bytecode": "H4sIAAAAAAAA/+2dB1hUVxbH79BRQY1JrCh2RcR3p8CAiDR7w54YswZkUBRBEQu29N57MT3Z3rJ9N5vsJtnes30325Js79neszlH74vX46jAnEHud/K+7/8dzgB3zu//3rw29917OKDUEhAuGFJAaaB8dew1XCpN9BJbdDq0kR6n3ZBXHA7HSoIxHdL1XrC0IRrxwpGG4qiO6kg00hiMhkKxaDhaUtpQWuKV6nAoppsipaEm03A6X41eMrgzoI2MJHBn9HHuTGgjMwncmYzc/nY/DJRlfQ6Gk3wEyUeSfBTJ80g+muRjSJ5P8rEkH0fy8SSfQPKJJJ9E8skkn0LyqSQvIPk0kheSfDrJi0g+g+QeyTXJgyQPkTxM8gjJi0leQvIoyUtJXkbymSQvJ/kskleQfDbJK0leRfJqkteQvJbkc0g+l+TzSD6f5AtIvpDki0i+mORLSL6U5MtIXkfy5SRfQfKVJF9F8tUkX0PytVaOMV8dXXA/8Ko6+vnHOMLEkSaOMjHPxNEmjjEx38SxJo4zcbyJE0ycaOIkEyebOMXEqSYWmDjNxEITp5tYZOIMEz0TtYlBE0Mmhk2MmFhsYonV/nlxfIma35eaWGbiTBPLTZxlYoWJs02sNLHKxGoTa0ysNXGOiXNNnGfifBMXmLjQxEUmLjZxiYlLTVxmYp2Jy01cYeJKE1eZuNrENSautXw5Xx2/cB/X1ine4xquv0GmvfMMx/kmruvliP5dkGT/1vP5p33//BrXGw4857qQcKQSDvx/L4FlGOVIoLXhjP5OCfCeb57CPy8R6hEqTp09bG0ko39Te9c/r6fUo9RJ6uxBa3mM/hX0vn9eT6hHq1PU2c3WxjD6N+3M+Od1lzpfnabObrQ2ltG/wjPnn9cd6nGqC3V2sbXxjP5NP7P+eV2lnqC6WGcXWpvI6F/RmffP6wr1JNWNOk/T2mRG/2b0Df+801FPUd2s8xStTWX0z+s7/nmnoi5QPajzJK1NY/RP9y3/jpQU78VC1cM647Q2ndG/YN/zz4tHXaQSqJO0NoPRv1Df9M87gVolWKfVmmb0L9x3/TuC6v8QVAx1mtZCjP5F+rZ/nk8dVkx1QmsRRv+K+75/uOhixrbse06J+lfiiH+M94l0AaN/UUf8Y7zPoQsZ/St1xD/G63RdxOhfmSP+MV5nao/Rv5mO+Md4naSDjP6VO+If43m+DjP6N8sR/xjPU3Uxo38VjvjHeJ6lo4z+zXbEP8bzBF3G6F+lI/4xHud0OaN/VY74x7if1hWM/lU74h/jfkZXMvpX44h/jJ8TXc3oX20v+ZdonW9iXBeM24yu7b3tL6H+V1HF1/+qlHG9NjjS/6pM8fW/msno30ZH+l+VK77+V7MY/Wt0pP9VheLrfzWb0b+YI/2vKhVf/6sqRv+aHOl/Va26UGcXW6th9G+TI/2valUX6+xCa3MY/dvsSP+ruaobdZ6mtXmM/jU70v9qvupmnadobQGjf1sc6X+1UPWgzpO0tojRv62O9L9arHpYZ5zWljD61+JI/6ulKoE6SWvLGP3b5kj/qzqVYJ1Wa8sZ/Wt1pP/VCsVQp2ltJaN/bY70v1qlmOqE1lYz+rfdkfunaxjbamC8f7rDEf8Y7xPpRkb/2h3xj/E+h25i9G+nI/4xXqfrzYz+dTjiH+N1pt7C6N8uR/xjvE7SLYz+7XbEP8bzfN3K6N8eR/xjPE/V2xn92+uIf4znWbqd0b9OR/xjPE/QHYz+7XPEP8bjnN7N6N9+R/xj3E/rvYz+HXDEP8b9jN7H6N9BR/xj/JzoA4z+HXKk/9UGxnXBuM1oTv/88bHSTXvY58weR26DOn78tBQTcblIHRtfLsW85o+vdZH1d/Vm3aSqky+VTN4ELBZ/CTC/B2O/PC9ZNZY4UOMGB2pc60CNKSo5+1PuOusV737LXxpAQ8zP2erE/Qy+lkaYcPy/dGa+bNMuLinW+yje94nEG4PaS3DJtmpOjeNlWhwv063X0gkv5jnW7xXxJdf8bQbzOghY9fntppHa8Hg12Pzc2tbR3NRZ0x6r74g1Lm3riNkbVgYxxAYIWK/bBxzblEzSjm1yphXt93y9ag437Da5P80NfG15qfFMUH17TxmwavQ3hI2gRlBMHdvC7JXuL0nYK3jJ3iv4ETfwTItNkd/7n2zmvWso3p6dbjOV1s/2HimNtxaNe5A809amWEfdroaW5o2LYp1VrY119e0dzfUtVY2N7bGdO+NtJKlxik+xDKV7HXtPYu+G6SHGNqhX9i7+ub+99eM5f6OJMRMHgppIDSmklkSv1Rg/2bpJ8e7Z6PWIUu6cA3JvM8n0YGOSPOCus1HxHoXeuN5943qXq0Zp17v2Ado/Jm0CbVZH53LAxb6+UdZrGYTPPlDbB/Qs87N9QPfPnOxrk37MPrl47WlfPqVa3viv+X7ZZ6D+/2SpE9dNdpx10896r8Hk75Q68Uw2i3m9BKxa/HYzCYM950NsW3PHnNaN7Z3b4Rp1cdsm+4Quy2Kh9eNinzHb18X+3wfU8dfsyuT9eZmD9javrPdWxAd/6W/VkozPxQDeNo/s63Ks+n3WARaP//ssiy2HmS1gvaffrp/nJO99j/DnnoY/N04dub3In2vVNoDUmW39vp/1WgrhsPdL/t+fsVs4CT/IxVdnMJl1buGrM2TXmcK8rgKMzFsV/4lYMphTGJlbHGFOZWTe5ghzGiNzqyPM6YzMbY4wZzAyb3eEOZOReYcjzFmMzO2OMF/AyLzTEeZ1jMwdApl3CWTeLZB5j0DmvQKZOwUy7xPIvF8g8wGBzAcFMh8SyHyxQOZLBDJfKpD5MoHMlwtkvkIg85UCma8SyHy1QOZrBDJfK5D5OoHM1wtkvkEg840CmW8SyHyzQOZbBDLfKpD5NoHMtwtkvkMg850Cme8SyHy3QOZ7BDLfK5D5PoHMhwUy3y+Q+QGBzA8KZH5IIPPDApkfEcj8qEDmxwQyPy6Q+c0Cmd8ikPmtApnfJpD57QKZ3yGQ+Z0Cmd8lkPndApnfI5D5vQKZnxDI/D6BzO8XyPwBgcwfFMj8IYHMHxbI/BFHmOsZmT/qCHMzI/PHHGHm3LafFMj8cYHMTwlkflog8ycEMn9SIPMzApmfFcj8nEDmTwlk/rRA5s8IZP6sQObPCWT+vEDmLwhk/qJA5i8JZP6yQOavCGT+qkDmrwlkfl4g89cFMn9DIPM3BTJ/SyDztwUyf0cg83cdYb6Qkfl7Atfz9x1hXs/I/ILA9fwDgcw/FMj8I4HMPxbI/BOBzC8KZH5JIPPLApl/KpD5ZwKZfy6Q+RcCmX8pkPlXApl/LZD5NwKZfyuQ+XcCmX8vkPkPApn/KJD5FYHMfxLI/GeBzH8RyPxXgcx/E8j8d4HM/xDI/E+BzP8SyPxvgcz/Ecj8X4HM/xPI/KpA5v8LZFYBecwBgcwpAplTBTKnCWROF8icIZA5UyBzlkDmbIHM/QQy9xfIPEAgc45A5lyBzAMFMg8SyDzYEeYtjMxnCVzPQwQyny2Q+RyBzOcKZB4qkHmYI8zZjMzDHWHux8g8whHm/ozMIx1hHsDIPMoR5hxG5jxHmHMZmUc7wjyQkXmMI8yDGJnzHWEezMg81hHmsxiZxznCPISRebwjzGczMk9whPkcRuaJjjCfy8g8yRHmoYzMkxmZh5p2AoY5FZQGSgdlgDJBWSC8LsTrJLxuwPNoPK/E8yw878DjMB6XcD+N+y38HON2jevZ5h4GGg4aARoJGgXKA40GjQHlg8aCxoHGgyaAJoImgSaDpoCmggpA00CFoOmgItAM9AKkQUH0GBQGRUDFoBJQFFQKKgPNBJWDZoEqQLNNnVWgalANqBY0BzQXNA80H7QAtBC0CLQYtAS0FLQMVAdaDloBWglaBVoNWgNaC3ra+LAV1ALaBmoFtYG2g3aA2kE7QR2gXaDdoD2gvaBO0D7QftAB0EHQIdDFoEtAl4IuA10OugJ0Jegq0NWga0DXgq4DXQ+6AXQj6CbQzaBbQLeCbgPdDroDdCfoLtDdoHtA94LuAx0G3Q96APQg6CHQw6BHQI+CHgM9DsL56HF+dpyvHOfvxvmscX5nnO8Y5//F+XBxflicL/UJEM6nifNL4nyLOP8gzseH89PhfG04fxnO5/UkCOd7esr4ifPj4Hwxz4CeBT0HwvkmcP4FnI8Ax+fH8epx/HYczxzH98bxrnH8ZxwPGccHxvFynwfheKo4viiOt4njT+J4jDg+IY7Xh+PX4XhuL4BwvC8c/wrHg8LxkXC8oBdBL4FeBuF4Izj+Bo5HgeMz4HgF+Pw+Ps+Oz3fj8874/C8+D4vPh+Lzkq+A8Hk6fL4Mn7fC54/weRx8PgWf18DnF7A/P/Zvx/7e2P8Z+wNj/1jsL4ofYOxPiP3rsL8Z9r/C/kjYPwf7q2D/DezPgN/v4/fd+P0vfh+K3w/i92X4/RF+n4LfL+D9drz/jPdj8f4k3q/D+1d4Pwfvb+D1Pl7/4vUgXh/h9QKeP+P5JJ5f4fkGHn/xeIT7Z9xf+ctrqKebgsEpAQA=",
97
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
98
+ },
99
+ {
100
+ "name": "entrypoint",
101
+ "functionType": "secret",
102
+ "isInternal": false,
103
+ "parameters": [
104
+ {
105
+ "name": "payload",
106
+ "type": {
107
+ "kind": "struct",
108
+ "path": "authwit::entrypoint::EntrypointPayload",
109
+ "fields": [
110
+ {
111
+ "name": "function_calls",
112
+ "type": {
113
+ "kind": "array",
114
+ "length": 4,
115
+ "type": {
116
+ "kind": "struct",
117
+ "path": "authwit::entrypoint::FunctionCall",
118
+ "fields": [
119
+ {
120
+ "name": "args_hash",
121
+ "type": {
122
+ "kind": "field"
123
+ }
124
+ },
125
+ {
126
+ "name": "function_selector",
127
+ "type": {
128
+ "kind": "struct",
129
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
130
+ "fields": [
131
+ {
132
+ "name": "inner",
133
+ "type": {
134
+ "kind": "integer",
135
+ "sign": "unsigned",
136
+ "width": 32
137
+ }
138
+ }
139
+ ]
140
+ }
141
+ },
142
+ {
143
+ "name": "target_address",
144
+ "type": {
145
+ "kind": "struct",
146
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
147
+ "fields": [
148
+ {
149
+ "name": "inner",
150
+ "type": {
151
+ "kind": "field"
152
+ }
153
+ }
154
+ ]
155
+ }
156
+ },
157
+ {
158
+ "name": "is_public",
159
+ "type": {
160
+ "kind": "boolean"
161
+ }
162
+ }
163
+ ]
164
+ }
165
+ }
166
+ },
167
+ {
168
+ "name": "nonce",
169
+ "type": {
170
+ "kind": "field"
171
+ }
172
+ }
173
+ ]
174
+ },
175
+ "visibility": "public"
176
+ }
177
+ ],
178
+ "returnTypes": [],
179
+ "bytecode": "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",
180
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
181
+ },
182
+ {
183
+ "name": "is_valid",
184
+ "functionType": "secret",
185
+ "isInternal": false,
186
+ "parameters": [
187
+ {
188
+ "name": "message_hash",
189
+ "type": {
190
+ "kind": "field"
191
+ },
192
+ "visibility": "private"
193
+ }
194
+ ],
195
+ "returnTypes": [],
196
+ "bytecode": "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",
197
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
198
+ },
199
+ {
200
+ "name": "is_valid_public",
201
+ "functionType": "open",
202
+ "isInternal": false,
203
+ "parameters": [
204
+ {
205
+ "name": "message_hash",
206
+ "type": {
207
+ "kind": "field"
208
+ },
209
+ "visibility": "private"
210
+ }
211
+ ],
212
+ "returnTypes": [
213
+ {
214
+ "kind": "struct",
215
+ "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
216
+ "fields": [
217
+ {
218
+ "name": "call_context",
219
+ "type": {
220
+ "kind": "struct",
221
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
222
+ "fields": [
223
+ {
224
+ "name": "msg_sender",
225
+ "type": {
226
+ "kind": "struct",
227
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
228
+ "fields": [
229
+ {
230
+ "name": "inner",
231
+ "type": {
232
+ "kind": "field"
233
+ }
234
+ }
235
+ ]
236
+ }
237
+ },
238
+ {
239
+ "name": "storage_contract_address",
240
+ "type": {
241
+ "kind": "struct",
242
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
243
+ "fields": [
244
+ {
245
+ "name": "inner",
246
+ "type": {
247
+ "kind": "field"
248
+ }
249
+ }
250
+ ]
251
+ }
252
+ },
253
+ {
254
+ "name": "portal_contract_address",
255
+ "type": {
256
+ "kind": "struct",
257
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
258
+ "fields": [
259
+ {
260
+ "name": "inner",
261
+ "type": {
262
+ "kind": "field"
263
+ }
264
+ }
265
+ ]
266
+ }
267
+ },
268
+ {
269
+ "name": "function_selector",
270
+ "type": {
271
+ "kind": "struct",
272
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
273
+ "fields": [
274
+ {
275
+ "name": "inner",
276
+ "type": {
277
+ "kind": "integer",
278
+ "sign": "unsigned",
279
+ "width": 32
280
+ }
281
+ }
282
+ ]
283
+ }
284
+ },
285
+ {
286
+ "name": "is_delegate_call",
287
+ "type": {
288
+ "kind": "boolean"
289
+ }
290
+ },
291
+ {
292
+ "name": "is_static_call",
293
+ "type": {
294
+ "kind": "boolean"
295
+ }
296
+ },
297
+ {
298
+ "name": "is_contract_deployment",
299
+ "type": {
300
+ "kind": "boolean"
301
+ }
302
+ },
303
+ {
304
+ "name": "start_side_effect_counter",
305
+ "type": {
306
+ "kind": "field"
307
+ }
308
+ }
309
+ ]
310
+ }
311
+ },
312
+ {
313
+ "name": "args_hash",
314
+ "type": {
315
+ "kind": "field"
316
+ }
317
+ },
318
+ {
319
+ "name": "return_values",
320
+ "type": {
321
+ "kind": "array",
322
+ "length": 4,
323
+ "type": {
324
+ "kind": "field"
325
+ }
326
+ }
327
+ },
328
+ {
329
+ "name": "contract_storage_update_requests",
330
+ "type": {
331
+ "kind": "array",
332
+ "length": 16,
333
+ "type": {
334
+ "kind": "struct",
335
+ "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
336
+ "fields": [
337
+ {
338
+ "name": "storage_slot",
339
+ "type": {
340
+ "kind": "field"
341
+ }
342
+ },
343
+ {
344
+ "name": "old_value",
345
+ "type": {
346
+ "kind": "field"
347
+ }
348
+ },
349
+ {
350
+ "name": "new_value",
351
+ "type": {
352
+ "kind": "field"
353
+ }
354
+ }
355
+ ]
356
+ }
357
+ }
358
+ },
359
+ {
360
+ "name": "contract_storage_reads",
361
+ "type": {
362
+ "kind": "array",
363
+ "length": 16,
364
+ "type": {
365
+ "kind": "struct",
366
+ "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
367
+ "fields": [
368
+ {
369
+ "name": "storage_slot",
370
+ "type": {
371
+ "kind": "field"
372
+ }
373
+ },
374
+ {
375
+ "name": "current_value",
376
+ "type": {
377
+ "kind": "field"
378
+ }
379
+ }
380
+ ]
381
+ }
382
+ }
383
+ },
384
+ {
385
+ "name": "public_call_stack_hashes",
386
+ "type": {
387
+ "kind": "array",
388
+ "length": 4,
389
+ "type": {
390
+ "kind": "field"
391
+ }
392
+ }
393
+ },
394
+ {
395
+ "name": "new_commitments",
396
+ "type": {
397
+ "kind": "array",
398
+ "length": 16,
399
+ "type": {
400
+ "kind": "struct",
401
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
402
+ "fields": [
403
+ {
404
+ "name": "value",
405
+ "type": {
406
+ "kind": "field"
407
+ }
408
+ },
409
+ {
410
+ "name": "counter",
411
+ "type": {
412
+ "kind": "field"
413
+ }
414
+ }
415
+ ]
416
+ }
417
+ }
418
+ },
419
+ {
420
+ "name": "new_nullifiers",
421
+ "type": {
422
+ "kind": "array",
423
+ "length": 16,
424
+ "type": {
425
+ "kind": "struct",
426
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
427
+ "fields": [
428
+ {
429
+ "name": "value",
430
+ "type": {
431
+ "kind": "field"
432
+ }
433
+ },
434
+ {
435
+ "name": "note_hash",
436
+ "type": {
437
+ "kind": "field"
438
+ }
439
+ },
440
+ {
441
+ "name": "counter",
442
+ "type": {
443
+ "kind": "field"
444
+ }
445
+ }
446
+ ]
447
+ }
448
+ }
449
+ },
450
+ {
451
+ "name": "new_l2_to_l1_msgs",
452
+ "type": {
453
+ "kind": "array",
454
+ "length": 2,
455
+ "type": {
456
+ "kind": "field"
457
+ }
458
+ }
459
+ },
460
+ {
461
+ "name": "unencrypted_logs_hash",
462
+ "type": {
463
+ "kind": "array",
464
+ "length": 2,
465
+ "type": {
466
+ "kind": "field"
467
+ }
468
+ }
469
+ },
470
+ {
471
+ "name": "unencrypted_log_preimages_length",
472
+ "type": {
473
+ "kind": "field"
474
+ }
475
+ },
476
+ {
477
+ "name": "block_header",
478
+ "type": {
479
+ "kind": "struct",
480
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
481
+ "fields": [
482
+ {
483
+ "name": "note_hash_tree_root",
484
+ "type": {
485
+ "kind": "field"
486
+ }
487
+ },
488
+ {
489
+ "name": "nullifier_tree_root",
490
+ "type": {
491
+ "kind": "field"
492
+ }
493
+ },
494
+ {
495
+ "name": "contract_tree_root",
496
+ "type": {
497
+ "kind": "field"
498
+ }
499
+ },
500
+ {
501
+ "name": "l1_to_l2_message_tree_root",
502
+ "type": {
503
+ "kind": "field"
504
+ }
505
+ },
506
+ {
507
+ "name": "archive_root",
508
+ "type": {
509
+ "kind": "field"
510
+ }
511
+ },
512
+ {
513
+ "name": "public_data_tree_root",
514
+ "type": {
515
+ "kind": "field"
516
+ }
517
+ },
518
+ {
519
+ "name": "global_variables_hash",
520
+ "type": {
521
+ "kind": "field"
522
+ }
523
+ }
524
+ ]
525
+ }
526
+ },
527
+ {
528
+ "name": "prover_address",
529
+ "type": {
530
+ "kind": "struct",
531
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
532
+ "fields": [
533
+ {
534
+ "name": "inner",
535
+ "type": {
536
+ "kind": "field"
537
+ }
538
+ }
539
+ ]
540
+ }
541
+ }
542
+ ]
543
+ }
544
+ ],
545
+ "bytecode": "H4sIAAAAAAAA/+3dB3wVx50H8PckIVg9AaJ38QAhOkiiGFNFE2BMr6YLEMUGhEEgbAxucRzHcdxjx07suPfee48d27Fj55JLcsklueSSXHJxLrk0p939Z9/8zY/18k5znrHmmf9+Pn+/2dndme/M7O572oLfTSQSyURmyqfomPjwxMur9WfFR5sqk/bKqnDpzMsRZ36OOAtyxNkiR5yFOeJsmSPOVjniDHLEWZQjzlSOOItzxNk6R5xtcsTZNkecJTnibJcjzvY54uyQI86OFp3dwdlJf3bWn130Z1f92U1/8jY99GdP/dlLt7VAz5dS9KZIU/TRy7hj+lL0oyij6E9RTjGAYiDFIIrBFEMohlIMoxhOMUJvX0lRRTGSYhTFaIoxFMdRjKU4nmIcxXiKCRQTKSZRTNb9NoViKsU0iukUMyhqKGZSzKKYTXECxRyKEynmUsyjmE+xgGKhbktat2URxWKKJRRLKZZRLKdYQXESxUqKVRSrKdZQrKVYR7GeopZiA8VGik0UdRSbKbZQbKXYRnEyxSkU2yl2UOykqKfYRXFqpM93U+yhaKDYG3Huo2ik2E9xGsXpFAcozqA4SHGI4kyKsyjOpjiH4lyKT1GcR/FpivMpPkNxAcVnKS6k+BzFRRSfp7iY4hKKSykuo7ic4gqKKxNHjv8XKK6iuJriixTXUFxL8SWKL1NcR3E9xVcobqC4keImipspbqG4leI2itsp7qC4k+Iuirsp7qG4l+I+ivspHqB4kOIhiocpHqF4lOIxiscpnqB4kuIpiqcpnqF4luI5iucpXqB4keIlipcpXtFtydNt+SrFq5G81yi+ptOv68839Oeb+vPr+vMt/fm2/vyG/nxHf75LsaxdJq1+M0evbag8PnaTkMfHcR7k8TGdD3l8fBdAHh/rLSCPj/tCyONzQEvI4/NBK8jrBWn+LNXpIsjrrdMpyEvrdDHk9dHp1pDXV6fbQF4/nW4LeWU6XQJ5/XW6HeSV63R7yBug0x30J/eFmqr1Z8VHnFSZlr8zKpSd94OO0B7eDzpBHu8HnSGP94MukMdt7wp5vB90gzzeD7pDHu8HPSCP94OekMf7Ae4/vB+UQh7vB70hj/eDNOTxftAH8ng/6At5vB/0gzzeD8ogj/eD/pDH/VsOedy/vP+o/qyB5TzhsYrXMzmPl+Oxmg9lch4vx2OVl+OxysvxWMXl/MnL8Vjl5Xis8nI8Lnk5HoM8hni88TYdII/HEPdPLgf3RR5D3O+4bNzHeAxxH+P6cB/jMcR9jA24j/ExkoY8duE+xscI7mNs5X1MtbUQbNX6s+KjTZV4nuYpGZmvhjTXXwjtt2QZid8FTbGUgqW35X5JQb/0hnr6WK4Hv8Oa0uY+YOlr2aLK7Ge3zPAnXRn40/qT60nB8k7QtjLLbUtCnVwuz5eBpVfEib8Tenng4zw8f5TF+Prb9VUlE0eOYzXM9wcf5/UFi+V9qiqIWNSU7ZjpB5YBVi2VFfj7sCmWAWApt2rJHL8D7ZYZ/t4cZLlMVcZg6BPuP7anYPkg6K/BlvsrCXVyuTyPPrGKVaxiFatYxSpWsR7bVvw7B6/t8XplHvg4rxwstv82wGtcXLa6tvgA1Gn3GkVlBf6drMpPg4Hryod1hpQcdj2i84oSH/7bGu8blEXKt+fPjB/Xw+XyfBp83Ba83mP72lMS6uFyP7n1Vm20f52wskJdq1bXxHl/6h1pR1p/4rVfzlP75EvQXl+u7eK1zzzwWb7eW/n/vd6L1+nywZd24Ott4EuDj7fDey22r9fiOaspvr7g4+1agM/2NU28dtoUX9x1zkL4tH29zPTaXTn4eLuW4LP8/VqJ95Sb4sPfSrxdK/DZ/i2ifIMMfPj7hLcLwDfUgW+IgW8o+Hi7IvANd+AbZuAbDr5hkGZfhQPfCANfBZh4u2LwVTnwVRr4qsDH27UG3ygHvpEGvlHg4+3agG+MA99oA98Y8PF2bcE31oHvOAPfWPDxdiXgG+fAd7yBbxz4eLt24JvgwDfewDcBfLxde/BNcuCbaOCbBD7eDp+1qnbgm2zgqwYfb9cRfFMd+KYY+KaCZZpdS0UKLNOgnhkO2jw90fQ2c/0p2K4L+Gba9YX3pmsMfDPBcoJdyyhlmWVgOQEss+1awnvTc+yWGf7cOBH83FauJwXLcZ880XLbklAnl8vz6BPrsW1VlpqIM4D1ajzwcd5sh5YgYlFTtvNSnA/Hcp5dX3gOn2vgmweWhVYtI8Nr7PMNLAvBssCqJXMOX2S3zPAcvhj83FauJwXLccwXW25bEurkcnkefWIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxitW+VVnmRpwBrDfXAx/nLXBoCSIWNWV7TiTOh2O51K4vfKZmiYFvKVhWWLVUhc/ULDOwrADLcquWzDM1J9ktM3ymZiX4ua1cTwqW45ivtNy2JNTJ5fI8+sQqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxijVXrMqyJOIMYL0lHvg4b7lDSxCxqCnbdfY4H47laru+8J7EKgPfarCss2sJ/62GNQaWdWBZa9cS3pNYb7fM8J5ELfi5rVxPCpbjmNdablsS6uRyeR59Yj22rcqyKuIMYL1VHvg4b61DSxCxqCnbeSnOh2O50a4vPIdvMPBtBMtmq5bMfeVNBpbNYKmzasmcw7fYLTM8h28FP7eV60nBchzzrZbbloQ6uVyeR59YxSpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrHmilVZNkScAay3wQMf59U5tAQRi5qyXWeP8+FYnmzXF96T2GbgOxksO6xaMv9+9CkGlh1g2W7VkrknsdNumeE9iXrwc1u5nhQsxzGvt9y2JNTJ5fI8+sQqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFat9q7JsizgDWG+bBz7O2+7QEkQsasr2nEicD8fyVLu+8JmaXQa+U8HS4MCy28DSAJY9di3hMzV77ZYZPlOzD/zcVq4nBctxzPdZblsS6uRyeR59uWJVll0RZwDr7fLAx3l7HFqCiEVN2Y6fOB+O5X67vvD4bjTw7QfLAQeW0wwsB8Byul1LeK45w26Z4bnmIPi5rVxPCpbjmB+03LYk1Mnl8jz6csWqLI0RZwDrNXrg47zTHVqCiEVN2Y6fOB+O5ZkOfIcMfGeC71CM72wHvrMMfGeDj7crAt+5DnznGPjOBd85kGbfeQ58nzLwnQcm3q4YfOc78H3awHc++Hi71uC7wIHvMwa+C8DH27UB34UOfJ818F0IPt6uLfgucuD7nIHvIvDxdiXgu9iB7/MGvovBx9vh+e9SB75LDHyXgu+SGN/lDnyXGfguB99lMb4rHfiuMPBdCb4rYnxXOfB9wcB3FViutmupSIHlaqjnGgdt/mKi6W2+BizXOmgzW66Fer7soM1fSjS9zVx/CrZD3/UOfNcZ+K4H33Uxvhsc+L5i4LsBfLwdHsc3OfDdaOC7CXw3xvhuceC72cB3C/hujvHd5sB3q4HvNvDdGuO7w4HvdgPfHeC7PcZ3lwPfnQa+u8B3Z4zvHge+uw1894Dv7hjffQ589xr47gPfvTG+Bxz47jfwPQC++2N8DznwPWjgewh8D8b4HnHge9jA9wj4Ho7xPebA96iB7zHwPRrje8KB73ED3xPgezzG95QD35MGvqfA92SM7xkHvqcNfM+A7+kY33MOfM8a+J4D37Mxvhcc+J438L0AvudjfC858L1o4HsJfC/G+F6x6wvv47xs4HsFLK/ZtYT/r4GvGlheA8urdi3hPaWv2S0zvKf0Ovi5rVxPCpbjmL9uuW1JqJPL5Xn0ifXYtirLyxFnAOu97IGP8151aAkiFjVlOy/F+XAs37TrC8/hbxj43gTL21Yto8J/1+frBpa3wfKWVUvmHP4Nu2WG5/B3wM9t5XpSsBzH/B3LbUtCnVwuz6NPrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVazHtlVZ3og4A1jvDQ98nPeWQ0sQsagp23POcT4cy2/a9YXPhL9r4PsmWL5t1VIVPhP+TwaWb4PlW1YtmWfC/9lumRWqjO+An9vK9aRgOY75dyy3LQl1crk8jz6xilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGLNFauyvBtxBrDeux74OO9bDi1BxKKmbNfZ43w4lt+z6wvvSXzXwPc9sPzAqmVkeE/iXwwsPwDL961aMvck/tVumeE9iR+Cn9vK9aRgOY75Dy23LQl1crk8jz6xilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMVq36os3404A1jvux74OO/7Di1BxKKmbM+JxPlwLH9s1xc+U/MjA9+PwfJTu5bw/9/3bwaWn4LlJ3Yt4TM1/263zPCZmp+Bn9vK9aRgOY75zyy3LQl1crk8jz6xHttWZflRxBnAej/ywMd5P3FoCSIWNWU7L8X5cCx/YdcXnsN/buD7BVh+ZdcSnsP/w8DyK7D80q4lPIf/p90yw3P4r8HPbeV6UrAcx/zXltuWhDq5XJ5Hn1iPbauy/DziDGC9n3vg47xfOrQEEYuasp2X4nw4lr+x6wvP4e8Z+H4Dlt85sPyXgeV3YPmtXUt4Dv9vu2WG5/Dfg5/byvWkYDmO+e8tty0JdXK5PI++XLEqy3sRZwDrveeBj/N+69ASRCxqynb8xPlwLP/owPcHA98fwfeHGN+fHfj+ZOD7M/j+FOP7iwPf+wa+v4Dv/Rjf3xz4/mrg+xv4/hrj+4cD398NfP8A399jfLyxTd//JJru44Up2A59eQ58yWTTfXng4+3QV+DAl2/gKwBffoyv0IGvhYGvEHwtYnytHPhaGvhaga9ljK/IgS8w8BWBj7e7GnzFDnwpA18x+Hi7a8HXxoGvtYGvDfhax/hKHPjaGvhKwNc2xtfega+dga89+NrFHB8dHfg6GPg6gq9DjK+zA18nA19n8HWK8XV14Oti4OsKvi4xvu4OfN0MfN3B1y3G19OBr4eBryf4esT4Sh34ehn4SsHXK8aXduDrbeBLg693jK+vA18fA19f8PWJ8ZU58PUz8JWBr1+Mr9yBr7+Brxx8/WN8Ax34Bhj4BoJvQIxvsAPfIAPfYPANivENdeAbYuAbCr4hMb7hDnzDDHzDwTcsxlfhwDfCwFcBvhExvioHvkoDXxX4KmN8oxz4Rhr4RoFvZIxvjF1feH1/tIGP61eW4+1awvvFxxlYjgfLWMvjpsocZ7fM8F7DeGgQt3UcjPn4mDEfb7ltSaiTy+V59In12LYqC58b2BnAeqOTze/jvLEOLUHEoqZs56U4H47lRAfn8AkGvonQV9VWLaPCfwttkoGlGiyTHZzDpzg4h0+FBnFbp8CYT40Z86kOjo8pkeOD59EnVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jFKtZj26os/KwxOwNYj5c1p4/zJju0BBGLmiKzH9R1NB+O5XS7vvCZ8GkGvunQVzOtWqrCZ8JnGFhmgqXG8ripMmfZLTN8Jnw2NIjbOgvGfHbMmM92cHzMihwfPI8+sYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxizRWrsvC1bnYGsB4va04f59U4tAQRi5ois0dcZ4/z4VjOsesL70mcYOCbA301z6plZHhP4kQDyzywzLU8bqrM+XbLDO9JLIAGcVvnw5gviBnzBQ6Oj/mR44Pn0SdWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jtW5WFn9VgZwDr8bLm9HHeXIeWIGJRU2T2g7qO5sOxXGTXFz5Ts9DAtwj6aqldS/j/71tsYFkKliWWx02VucxumeEzNcuhQdzWZTDmy2PGfLmD42NZ5PjgefSJ9di2KgufGxbDOZzXW5hsfh/nLXFoCSIWNWU7L8X5cCxPcnAOX2HgOwn6arWDc/hKA8tqsKxycA5f4+AcvhYaxG1dA2O+NmbM1zo4PtZEjg+eR59Yj22rsvC5YSWcw3m9Fcnm93HeKoeWIGJRU7bzUpwPx3K9g3P4OgPfeuirjQ4stQaWjWDZ4OAcvsnBObwOGsRt3QRjXhcz5nUOjo9NkeOD59GXK1Zl4X24Fs41vN66ZPP7OG+DQ0sQsagp2/ET58Ox3OLAt9nAtwV8m2N82xz4thr4toFva4zvFAe+kw18p4Dv5BjfDge+7Qa+HeDbHuOrd+DbaeCrB9/OGN+pDny7DHyngm9XjG+PA99uA98e8O2O8e1z8PuhwcC3D87Fex38fmi0W2aFKnO/5T5TZZwGncT91whjx8v3Q3+d5uB7tDHyPcrz6GuqtVOiea0O6q0qpjJaQru5/KsTR/aDmk7X6QLI52NPzR7QeS30PK9/rV4nH9bZmsp8ttZ9zFMe9PEBB32MUzWkD8B489TdI0uNR5ZOHlnaemQp9sgSeGQp9MiS75FljkeWxqQ/li4e9UtnjywlHllae2Qp8sjSUn/6YCnwyNLNI0tXjyxtPLKkPLK08sjSwiNLspktQeLD1z8CWN4I6+VFtlX9OKfd4eUHdX4elHNI5+XHlH0Qyj5Dpw8lP7wt9tFBB32E9VTDPNdVBIZDyea3tPDI0sojS8ojSxuPLF09snTzyFLgkaWlR5YijyytPbKUeGTp7JGli0eWxqQ/ljke9Uu+R5ZCjyyBR5ZijyxtPbJ08shS45Glu0eWvI/Jwn8ncrlnRCzNWe+ZdusNnwU8C+rlv5vPhH7n+s8Cx9mWHcmIIwn1cl35sE4nfSJTv6/bFx92nZCw61Lnbv7bhstWdXZ1UGfd2DG1G0Zt3tyUOmfZbWfm35ZOHDklI/PVkOb6lWW2XUv4zMpMu2WGz6zMsNxnqozp0Cfcf2xPwfIZ0F/TLfdXEurkcnkefU21dmpmq6vxn2a3zA+eg+G+nBbpU2zPFMvtUWVM1WUVQF1ToM7JlutMQln8vA4buK58WGeEPl9le16n2q4x6/VoTh/tOn1zW7p7ZGnvkaWtR5Y5HlkCjyyFHlnyPbIUe2SZ7pGli0eWzh5ZOnhkKfHI0tojS5FHlpYeWQo8snTzyNLVI0tHjyztPLK08ciS8shS45GllUeWZDNbjvZMFS+fDnl5kW2jz1RN1Pl5sM0Enc6PKXsi5E3S6Qkx22IfTYwYKj7aFPYR1lMN81wXPlM1wQNLK48sNR5ZUh5Z2nhkaeeRpaNHlq4eWbp5ZCnwyNLSI0uRR5bWHllKPLJ08MjS2SNLF48s0z2yFHtkyffIUuiRJfDIMscjS1uPLO09snT3yNLCI0vex2Thv+W53EkRS3PWO95uveHzE+Mi9SagniKofxw4jrfsSEYcSaiX68qHdd6D595+5fi5N/7bBp9B+63j597+rzotP/c26pP+3JsqYwb445774uV4z8Tys3JZn/ua4a7esP2fxGf0xNp0q7LURJwBrFfjgY/zZoPF8rmgUtXDv4NnQj1T7dYTnlNx31BTtnPqVLBYfkaz0tWzl+iPPnuZguWu70NPSRzZp9G2mlhniPUTabX/LPDI8Pch1qumbMf4ZId9oMqcZLfM8BifCH5uK9eTguU4vs3x95FYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGJ1Y1X1TrBab1VFEKlXTcnIfDWkXT4v/nE8k81t5XpSsBzHd5zltiWhTi6X59EnVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWsuWJ18O9bhO8CY71qynbN+niHfaDKHGu3zPCa9XHg57ZyPSlYjuN7nOW2JaFOLpfn0SfWY9uq6h1jtd7MfSmsV03ZjvExDvtAlTnabpnhMT4K/NxWricFy3F8R1luWxLq5HJ5Hn1iFatYxSpWsYpVrGIVq1jFKlaxilWsYhWrWMWaK1ZV70ir9Wb+/UqsV03ZrlmPdNgHqswqu2WG16wrwc9t5XpSsBzHt9Jy25JQJ5fL8+gTq1jFKlaxilWsYhWrWMUqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxilWs9q2q3gq79VYFkXrVlO2ZiwqHfaDKHGG3zJA7HPzcVq4nBctxfIdbblsS6uRyeR59uWJV9Q6zW2+4L2K9asq2Lw5z2AeqzKF2ywz3xSHg57ZyPSlYjuM7xHLbklAnl8vz6MsVawB5eZDHy/Mhb7BOF0DeIJ1uAXkDoU2cN0CnW0JeuU63grz+kObPMp3uAnkn6vR0yJur09Mgb55OT4G8+TpdDXkLdHoS5C3U6YmQt0inx0PeYp0eB3lLdHos5C3V6eMgb5lOj4a85To9CvJW6HQV5J2k05WQt1KnR0DeKp0eDnmrdXoG5K3R6SLIW6vTKchbp9PFkLdep1tDXq1Ot4G8DTrdFvI26nQJ5G2K8fH+ORTyeP/E/Zn3z8GQx/vnIMjj/XMg5PH+OQDyeP8shzzeP3F/5X4rgzzutxMhj/ttLuRxv82DPO63+ZDH/bYA8rjfFkJeO51eBHntdXox5HXQ6SWQ11Gnl0JeJ51eBnmddXo55PExugLyuur0SZDXTadXQl53nV4FeT10ejXk9dTpNZDXS6fXQl6pTq+DvN46vR7y0jpdC3l9dHoD5PXV6Y2Q10+neX9V+08hrFutPys+2lSJdfGU7fud6y+EtliyVKTA0gfq6W21nqoK1b60LitPp3mf6w31ltqpt5ITqt5ekf5jB9eVD+uM0Qdga71+L6v9kPFwvS20hT29wMPrjNMedR78QcmR7bDoqsJjgqds+yTuK5bGjCkVeBw3xVIKFrv7beb3r+19QJXZ03KZqowe0Cdp/cn2FCzvCf3Vw3J/4fHG5fI8+sQqVrGKVaxiFatYxSpWsYpVrGIVq1jFKlaxijVXrMrSN+LEe1l9PfBxHt5vsX1tG+/9cdnq3sUbcO8ibbXOzL0lvB+RBgPXlQ/rtGh32PW2dhXBch4rvMeI42f3fkdm/LgeLpfnua4iaAuOn+37HXifjsv95NZbtdH+MVBVoZ4JUPeOeX+KHnc8pnjvlfPwPp8ac97v8DmEdCSvucYDj5k05HG6H/js9nGli3to4aM3PWAcuG1cTz4s/wXcl/1lyeGxiZ4v1PL3Y5bzlIzMV0Ma71uX221reM4cAOVXQx1Y70C79VZivUkdXAfn50P6z/xADKynJu5fNqv9rn/MepjuHdkmBcv7O25zOTiqYZ7rUvvJr2Gfeh++L21/32B7sV86Q7/w8jT0i+3jTfVL9PcdG3qCpSzixN9VeA7s78B3tN9V/cHHeaXg43bg+eQBsKatWo/8DRR9viYN9Vr6njji+Rp8/qIPOLgufJ4lpX97qedror970rBtdyjz43gmKPrdjM8ElYD543omiD1xzwR1hN+vM3X6aL9fSyN5DvyV6OdySyN+/F1Q6s5i3Je9ImNr+28zfMaRp2zf+T2gb2yfz1z8jlBlDAA/txW/Y3l5J2jbAMtty/Ydi77yGCv+ni2NrGf/90BV+Nt1kNUyM9/p+Ex/Wqe5nnxYPgzOHyN0Gp/h7wPlTIpZzlO2/RjfG7D9/oiqF995qYY6sF4X7wMNg7YnoQ7Oz4f0RH5wO3Hk+0zcv2xW+92QmPUwXR7ZBt+BGuK4zUd774TrUvtJFexTvM+4OM6xvdgv3aFfeDn+nR39ewHfgcHvRtvHZRLq4XJ5fhD4OG8A9OlM6Me0A1cfcKUTH75mhtfy8JyA1/LyLbsKE4ff5bBVJr5HwlO2c1chfLawbFHvn/B7JHsa6nfXbqlbVFe7KQmsgggxD2iYxte5+FUXfJ2LX3XB17l4e3x1i8tpBcui3WOt/R2hcXm68gKNLNSVt0ocfgdH9ZW6nqZ+n6l3aNQ7M2r3U4eGegdGvfPSEZzP6k/1W0P9/aPeYVHvrKh3VNS+rH5fqe999VtQnR/Ud386kdm/1XlAXbNSf1Oq317qXKGOR/Wdoo5VdYyqc4s6/6lzvDr/qXez1I8gdWJS73Opf4tdveul3gFT/y9R9X6Yem9M/b+D1Ttl4ykmJDLvoan30ybrvp1CMTWRed9NvQen3pWqoZhJMYtiNsUJFHMSmfeP1PtG6v0i9T6Ren9IvS+k3g9S7wOp93/U+z7q/R71Po96f0e9r6Pez1mVyLx/syaReb9GvU+zPpF5X2ZDIvM+jHr/pY5iM8UWiq0U2yhOpjiFYjvFDoqdFPUUuyhOpdhNsYeigWIvxT6KRor9FKdRnE5xgOIMioMUhyjOpDiL4myKcyjOpfgUxXkUn6Y4n+IzFBdQfJbiQorPUVxE8XmKiykuobiU4jKKyymuoLiS4gsUV1FcTfFFimsorqX4EsWXKa6juJ7iKxQ3UNxIcRPFzRS3UNxKcRvF7RR3UNxJcRfF3RT3UNxLcR/F/YnM3/YPUjxE8TDFIxSPUjxG8TjFExRPUjxF8TTFM4nMvvocxfMUL1C8SPESxcsUr1B8leJVitcovkbxOsUbFG9SfJ3iLYq3Kb5B8Q7Fu4nD5y48gLfoE84EPb84c95J79le35CuSO+k/9Zu317fWLdpeBqX7Unv2LunIb2noXZ3Q3rz7vod6crhWO7wYjfljtbfL/ydU9vQULdjV0O6oZ423N6wbdf209KN2xq2puv31e3eTBXgxkXtPsLGbfXGPT+8ce2mTUffrqfejt/Am71zU93+dP3ehnT95vSG+r07N+35X73qTQbF+wIA",
546
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
547
+ },
548
+ {
549
+ "name": "set_is_valid_storage",
550
+ "functionType": "open",
551
+ "isInternal": true,
552
+ "parameters": [
553
+ {
554
+ "name": "message_hash",
555
+ "type": {
556
+ "kind": "field"
557
+ },
558
+ "visibility": "private"
559
+ },
560
+ {
561
+ "name": "value",
562
+ "type": {
563
+ "kind": "boolean"
564
+ },
565
+ "visibility": "private"
566
+ }
567
+ ],
568
+ "returnTypes": [
569
+ {
570
+ "kind": "struct",
571
+ "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs",
572
+ "fields": [
573
+ {
574
+ "name": "call_context",
575
+ "type": {
576
+ "kind": "struct",
577
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext",
578
+ "fields": [
579
+ {
580
+ "name": "msg_sender",
581
+ "type": {
582
+ "kind": "struct",
583
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
584
+ "fields": [
585
+ {
586
+ "name": "inner",
587
+ "type": {
588
+ "kind": "field"
589
+ }
590
+ }
591
+ ]
592
+ }
593
+ },
594
+ {
595
+ "name": "storage_contract_address",
596
+ "type": {
597
+ "kind": "struct",
598
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
599
+ "fields": [
600
+ {
601
+ "name": "inner",
602
+ "type": {
603
+ "kind": "field"
604
+ }
605
+ }
606
+ ]
607
+ }
608
+ },
609
+ {
610
+ "name": "portal_contract_address",
611
+ "type": {
612
+ "kind": "struct",
613
+ "path": "authwit::aztec::protocol_types::address::EthAddress",
614
+ "fields": [
615
+ {
616
+ "name": "inner",
617
+ "type": {
618
+ "kind": "field"
619
+ }
620
+ }
621
+ ]
622
+ }
623
+ },
624
+ {
625
+ "name": "function_selector",
626
+ "type": {
627
+ "kind": "struct",
628
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector",
629
+ "fields": [
630
+ {
631
+ "name": "inner",
632
+ "type": {
633
+ "kind": "integer",
634
+ "sign": "unsigned",
635
+ "width": 32
636
+ }
637
+ }
638
+ ]
639
+ }
640
+ },
641
+ {
642
+ "name": "is_delegate_call",
643
+ "type": {
644
+ "kind": "boolean"
645
+ }
646
+ },
647
+ {
648
+ "name": "is_static_call",
649
+ "type": {
650
+ "kind": "boolean"
651
+ }
652
+ },
653
+ {
654
+ "name": "is_contract_deployment",
655
+ "type": {
656
+ "kind": "boolean"
657
+ }
658
+ },
659
+ {
660
+ "name": "start_side_effect_counter",
661
+ "type": {
662
+ "kind": "field"
663
+ }
664
+ }
665
+ ]
666
+ }
667
+ },
668
+ {
669
+ "name": "args_hash",
670
+ "type": {
671
+ "kind": "field"
672
+ }
673
+ },
674
+ {
675
+ "name": "return_values",
676
+ "type": {
677
+ "kind": "array",
678
+ "length": 4,
679
+ "type": {
680
+ "kind": "field"
681
+ }
682
+ }
683
+ },
684
+ {
685
+ "name": "contract_storage_update_requests",
686
+ "type": {
687
+ "kind": "array",
688
+ "length": 16,
689
+ "type": {
690
+ "kind": "struct",
691
+ "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest",
692
+ "fields": [
693
+ {
694
+ "name": "storage_slot",
695
+ "type": {
696
+ "kind": "field"
697
+ }
698
+ },
699
+ {
700
+ "name": "old_value",
701
+ "type": {
702
+ "kind": "field"
703
+ }
704
+ },
705
+ {
706
+ "name": "new_value",
707
+ "type": {
708
+ "kind": "field"
709
+ }
710
+ }
711
+ ]
712
+ }
713
+ }
714
+ },
715
+ {
716
+ "name": "contract_storage_reads",
717
+ "type": {
718
+ "kind": "array",
719
+ "length": 16,
720
+ "type": {
721
+ "kind": "struct",
722
+ "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead",
723
+ "fields": [
724
+ {
725
+ "name": "storage_slot",
726
+ "type": {
727
+ "kind": "field"
728
+ }
729
+ },
730
+ {
731
+ "name": "current_value",
732
+ "type": {
733
+ "kind": "field"
734
+ }
735
+ }
736
+ ]
737
+ }
738
+ }
739
+ },
740
+ {
741
+ "name": "public_call_stack_hashes",
742
+ "type": {
743
+ "kind": "array",
744
+ "length": 4,
745
+ "type": {
746
+ "kind": "field"
747
+ }
748
+ }
749
+ },
750
+ {
751
+ "name": "new_commitments",
752
+ "type": {
753
+ "kind": "array",
754
+ "length": 16,
755
+ "type": {
756
+ "kind": "struct",
757
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect",
758
+ "fields": [
759
+ {
760
+ "name": "value",
761
+ "type": {
762
+ "kind": "field"
763
+ }
764
+ },
765
+ {
766
+ "name": "counter",
767
+ "type": {
768
+ "kind": "field"
769
+ }
770
+ }
771
+ ]
772
+ }
773
+ }
774
+ },
775
+ {
776
+ "name": "new_nullifiers",
777
+ "type": {
778
+ "kind": "array",
779
+ "length": 16,
780
+ "type": {
781
+ "kind": "struct",
782
+ "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffectLinkedToNoteHash",
783
+ "fields": [
784
+ {
785
+ "name": "value",
786
+ "type": {
787
+ "kind": "field"
788
+ }
789
+ },
790
+ {
791
+ "name": "note_hash",
792
+ "type": {
793
+ "kind": "field"
794
+ }
795
+ },
796
+ {
797
+ "name": "counter",
798
+ "type": {
799
+ "kind": "field"
800
+ }
801
+ }
802
+ ]
803
+ }
804
+ }
805
+ },
806
+ {
807
+ "name": "new_l2_to_l1_msgs",
808
+ "type": {
809
+ "kind": "array",
810
+ "length": 2,
811
+ "type": {
812
+ "kind": "field"
813
+ }
814
+ }
815
+ },
816
+ {
817
+ "name": "unencrypted_logs_hash",
818
+ "type": {
819
+ "kind": "array",
820
+ "length": 2,
821
+ "type": {
822
+ "kind": "field"
823
+ }
824
+ }
825
+ },
826
+ {
827
+ "name": "unencrypted_log_preimages_length",
828
+ "type": {
829
+ "kind": "field"
830
+ }
831
+ },
832
+ {
833
+ "name": "block_header",
834
+ "type": {
835
+ "kind": "struct",
836
+ "path": "authwit::aztec::protocol_types::abis::block_header::BlockHeader",
837
+ "fields": [
838
+ {
839
+ "name": "note_hash_tree_root",
840
+ "type": {
841
+ "kind": "field"
842
+ }
843
+ },
844
+ {
845
+ "name": "nullifier_tree_root",
846
+ "type": {
847
+ "kind": "field"
848
+ }
849
+ },
850
+ {
851
+ "name": "contract_tree_root",
852
+ "type": {
853
+ "kind": "field"
854
+ }
855
+ },
856
+ {
857
+ "name": "l1_to_l2_message_tree_root",
858
+ "type": {
859
+ "kind": "field"
860
+ }
861
+ },
862
+ {
863
+ "name": "archive_root",
864
+ "type": {
865
+ "kind": "field"
866
+ }
867
+ },
868
+ {
869
+ "name": "public_data_tree_root",
870
+ "type": {
871
+ "kind": "field"
872
+ }
873
+ },
874
+ {
875
+ "name": "global_variables_hash",
876
+ "type": {
877
+ "kind": "field"
878
+ }
879
+ }
880
+ ]
881
+ }
882
+ },
883
+ {
884
+ "name": "prover_address",
885
+ "type": {
886
+ "kind": "struct",
887
+ "path": "authwit::aztec::protocol_types::address::AztecAddress",
888
+ "fields": [
889
+ {
890
+ "name": "inner",
891
+ "type": {
892
+ "kind": "field"
893
+ }
894
+ }
895
+ ]
896
+ }
897
+ }
898
+ ]
899
+ }
900
+ ],
901
+ "bytecode": "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",
902
+ "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
903
+ }
904
+ ],
905
+ "events": [],
906
+ "debug": {
907
+ "debugSymbols": [
908
+ "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DgxicEcYUgcGQbgjDKkDgyjcEYbUgUEY7ghD6sAgDneEIXVgEIg7wpA6MIjEHWFAHVhIJk5IJk5IJk5IJk42UAcWkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokTkokLJBMXSCYukExcIJm4sIE6cCCZuEAycYFk4gLJxAWSiQskExdIJi6QTFwgmbhAMnGBZOICycQFkokLJBMXSCYukExcIJm4QDJxgWTiAsnEBZKJCyQTF0gmLpBMXCCZuEAycYFk4gLJxAWSiQskExdIJi6QTFwgmbhAMnGBZOICycQFkokLJBMXSCYukExcIJm4QDJxgWTiAsnEBZKJCyQTF0gmLpBMXCCZuEAycYFk4gLJxAWSiQskExdIJi6QTFwgmbhAMnGBZOICycQFkokLJBMXSCYukExcIJm4QDJxgWTiAsnEBZKJCyQTF0gmLpBMXCCZuEAycYFk4gLJxAWSiQskExdIJi6QTFwgmbhAMnGBZOICycQFkokLJBMXSCYukExcIJm4QDJxgWTiAsnEBZKJCyQTF0gmTkkmTkkmTkkmTkkmTjdQB1aSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOSiVOS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usAnard1gQ/Ibuuy5t32uqx5t70ua95tr8uad9vrsubd5rqENe+212XNu+11WfNue13WvNtelzXvttdlzbvtdVnzbntd1rzbXpc177bXZc27zXXRNe+212XNu+11WfNue13WvNtelzXvttdlzbvtdVnzbntd1rzbXpc177bXZc27zXWJa95tr8uad9vrsubd9rqsebe9Lmveba/Lmnfb67Lm3fa6rHm3vS5r3m2vy5p3m+uS1rzbXpc177bXZc277XVZ8257Xda8216XNe+212XNu+11WfNue13WvNtelzXvNteF/mp0t3VZ8257Xda8216XNe+212XNu+11WfNue13WvNtelzXvttdlzbvtdVnzbnNd6C/1dVuXNe+212XNu+11WfNue13WvNtelzXvttdlzbvtdVnzbntd1rzbXpc17zbXhf7STrd1WfNue13WvNtelzXvttdlzbvtdVnzbntd1rzbXpc177bXZc277XVZ825zXeivD3RblzXvttdlzbvtdVnzbntd1rzbXpc177bXZc277XVZ8257Xda8216XNe+21mWnv1TObV3WvNtelzXvttdlzbvtdVnzbntd1rzbXpc177bXZc277XVZ8257Xda821yX9X61H6zLmnfb6zLrvLuH80s3aa3LrPNub11mnXd76zLpvJu388/NElrrMum8212XSefd7rpMOu/mXM8vLaW1LpPOu711mfX9at11mXTeLbJ9+9KSvluXP35prVeELXyKIK0/V2TbzxByfEn6+LP3a80nnaVd13zSOd11zSe9B3Bd80nvL1zXfNJ7F9c1n/S+yHXNJ73ncl3zSe/nPNd81ncTuq75ug8dv+brPnT8mq/70PFrvu5Dx6/5ug8dv+brPnT8mq/70PFrvu5Dx6/5ug8dvuazvjPUdc1nvQ8t55rXbfu85ue6zHqv2FuXWe/neuvyqHuucqYu8t26nMU+6manV+yj7jJ6xT5qvO8V+6i5ulfsowbaTrHPehtnr9hHjXC9Yh81l/WKfdSw1St2pgnqWa+t7BU70wT1rBdM9oqdaYJ61qsgO8U+6/2OvWJnmqCe9SbGXrEzTVDPemdir9iZJqhnvd2wV+xME9Sz3kPYK3amCepZbwzsFTvTBPWsd/v1ip1pgnrWW/h6xc40QT3rfXm9YmeaoJ71ZrtesTNNUM96B12v2JkmqGe9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",
909
+ "eJztnFFrIjEUhf/LPIvkJje5iX9l6YPsdqFQ7LL6VvzvXXcnmaFzcMB2B63nSYWTePwmEz9Q8to9v3zfHp5edvtu89ql3G2+vXb7X9vd6eX+sP196DZu1T3ufvx5PK66n0/Pj91GrBxXk5x3LvZR77y1dIDhoKmG1YUWLigs4or0aRGJcRx/WHWp3GZvc8v11lzn9VHdB3vLjfb2qLeY0zrITGfaSzFr7cPwDqduk3Auoc+WNIqGS7qHG+6uH+/uXWk3nlc93918zZr5Fk1o3tiaJxlmNTRrUC19Nmge7n3JKD0LJRLKFEoilCkUI5QpFOgq9w4FitCdQ8nQsu4dClS4e4fyCX749aB8gnh+PSg0WgCFRgug0GgBFBotgEKjBVBotFMohUYLoNBoARQaLYBCowVQaLQACo0WQKHRAig0WgCFRgug0GinUMRRaREVOi2iQqlFVGi1iAq1FlGh1yIqFFtEhWaLqFBtERW6LaAidFtEhW6LqNBtERW6LaJCt0VU6LaICt0WUaHbIip0W0SFbguoeLotokK3RVTotogK3RZRodsiKnRbRIVui6jQbREVui2iQrcFVALdFlGh2yIqdFtEhW6LqNBtEZUrdtvkGxWTGSq+QRnNenp6AZKlxTZbzRYNYyR/2ywtlOM2edJmaZETZ2W4WPn8ggk5t2VQRmF8b3htrb0GN5OOri6aGEcHEPl/WJY2uavBYlIPCrJoYyxgYeV6tI04X4Z5JV5yl+rSmng9yK0iz869X4m6tCf+VyzaTqFKrsykQ6rnW2kcOofc7+lr/Gt2LPVspiQDzOjaKGgNs6Pgt6rm2LaQ4dOY9TvrGu70IdVroZIm+05eww15bhDcruYG4T/UzI6CC/LsKJU1/olQU10PWvL7S3waBWHMjoI0YrtYaWQURY8Px+MbIwkyRg==",
910
+ "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mPyuZfK7lsnvWia/a5n8rmXyu5bJ71omv2uZ/K5l8ruWye9aJr9rmfyuZfK7lsnvWia/a5n8rmXyu5bJ71omv2uZ/K5l8ruWye9aJr9rmfyuZfK7lsnvWia/a5n8rmXyu5bJ71omv2uZ/K5l8ruWye9aJr9rmfyuZfK7lsnvWia/a5n8rmXyu5bJ71omv2uZ/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jttZgdtagdtbgd1cgTlfuO0VuP0VuA0WuB0WuC0WmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuY/K7jsnvOia/65j8rmPyu47J7zomv+uY/K5j8ruOye86Jr/rmPyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/67k9dLlNdLlddLltdNl9dJnzhdtJl9tKl9tLl9tMl8nveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8rmfyu57J73omv+uZ/K5n8rueye96Jr/rmfyuZ/K7nsnveia/65n8bmDyu4HJ7wYmvxuY/G5g8ruBye8GJr8bmPxuYPK7gcnvBia/G5j8bmDyu4HJ7wYmvxuY/G5g8ruBye8GJr8bmPxuYPK7gcnvBia/G5j8bmDyu4HJ7wYmvxuY/G5g8ruBye8GJr8bmPxuYPK7gcnv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",
911
+ "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VDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0Pkil80EqnQ9S6XyQSueDVDofpNL5IJXOB6l0PshM54PMdD7ITOeDzHQ+yLyx9exM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzng8x0PshM54PMdD7ITOeDzHQ+yEzngyx0PshC54MsdD7IQueDLBtbzy50PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueDLHQ+yELngyx0PshC54MsdD7IQueD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",
912
+ "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DxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwDxdwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD5dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD1dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dwD9dw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7R8CPrbT2z8tfGynt3+s+NhOpX+1M7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TRDW08ztPU0Q1tPM7T1NENbTzO09TSDXE9zGF/71iUXyRzG1751yZUvh/G1b93WvnWX9q27tG/dpX3rLu1bd2nfukv71j3d33VzfO1b93R3183xpW/debq36+b40rfuPN3ZdXN86Vt3PqRv3Xm6revm+NK37jzd1HVzfOlbd55u6bo3/umOrpvja9+6p/u5bo6vfeuerty6Ob72rXu6HOvm+Nq37ukaq5vja9+62m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mmtpuqqntpprabqqp7aaa2m6qqe2mMnI3lT8ez5/1sX4bf+d16yvE6Prxqv29U+4L+sydct/lZ+6U+9r/YztdsbdT7k8IJ+50X73y9fKPgz3GqudP5vjxs/E97/bNKKe9+u4HodNeffdzymmvvvsx4rRX373lT3v13Uv4rFffd1qc9uq799Jpr757F5z26pe+V/d9Cqe9+qXv1X0bwWmvful7dZ/lP+3VL32v7pPwp736pe/VfY78tFe/9L26T2Gf9uqXvlf3GebTXv3S9+o+AXzaq1/6Xt3nZ0979Qvfqz7e+5uZj0d8fRJ/zB//ZWN7Pzza1/d/BcWPl17rK8x7f5Fnh3nr7/3sMG+N1LPDvDWBzw7z1sAGw/SP/+Qbvhfmrfl+dpi3roOzw7x1e5wd5q3L5uwwd07gozD7UOo1YZaN7zC199beR0w/Fea+OTMfY3z/8Jh7Ye6bMz8R5r458xNh7pszPxHmvjnzE2HumzPHYfYxvE+FuW/O/ESY+z7p/USY+z7p/UQYpgm8D6N9KgzTBN4HxT4VhmkC70NcHwqzj2R9KgzTBN7HpT4VhmkC76NMnwrDNIH3MaNPhWGawPsI0KfCME3gfTznU2GYJvA+OvOpMEwTeB9r+VQYpgm8j5x8KgzTBN7HQT4VhmkC76ManwrDNIH3MYpPhWGawPuIw6fCME3gffzgU2GYJvA+GvCpMEQT+MVXSn8qDNEEfvF1z58KQzSBX3wV86fCEE3gF1+T/KkwRBP4xVcYfyoM0wTe/3rhT4VhmsD7X/37qTBME/g9+OTsMEwT+D205ewwTBP4PXDm7DBME/g9LOfsMEwT+D3o5+wwTBP4PaTo7DBME/g9YOnsMEwT+D0c6uwwTBP4Pdjq7DBME/g9lOvsMEwT+D1Q7OwwTBP4PQzt7DBME/g9yO3sMEwT+Eby6yfCME3gG8mvnwjDNIFvJL9+IgzTBL6R/PqJMEwT+Eby6yfCME3gG8mvnwjDNIH3vyrwU2GYJjATE/fiS/k+FYZpAjMxcS++/u5TYZgmMBMT9+KL5j4VhmkCMzFxL77S7VNhmCYwExP34svTPhWGaQIzMXEvvqbsU2GYJjATE/fiC8E+FYZpAjMxcS++eutTYZgmMBMT9+JLrj4UhomJe/EFVJ8KwzSBmZi4F1/19KkwTBOYiYl78aVKnwrDNIGZmLgXX1/0qTBME5iJiXvxRUGfCsM0gZmYuBffqnJRmKzvH+71+zAvviPlU2Fu/Ac84/vbJWbEXpgb/wEfh7nxH/BxmBs/QhyHufEjxHGY+z5C9KO/Xnf7v7+ZM/kd5r45cxzmTqTIPL9+2B/222P6/Q+P8Vhf83qMsXuqdxJIp2e/8QPK6dlvvA5Oz37j7XF69hsvm9fZv8LcON+Pw9z4n4jHYW78HHkY5k5g6TgMxcD+CkMxgb/C3DhS3b9/2D33wtw4I4/D3Dj0jsPc+An7OMyNE/g4zI0T+DjMjRP4MMydwNJxmBsn8HGYGyfwcRimCXwnsHQchmkC3wksHYdhmsB3AkvHYZgm8J3A0nEYpgl8J7B0HIZpAt8JLB2HYZrAdwJLx2GYJvCdwNJxGKYJfCewdByGaQLfCSwdh2GawHcCS8dhbpwzY359jeLc74HvxHKOw9w4Zw7D3InlHIe5cc4ch7lxzhyHuXHO/H9h9h5uuBPLOQ5z4ye94zA3ftI7DvOpCbwb5s4J3D8ebhh7d9OdWM5hmDvhk+Mwd86ZwzB3zpnDMHfOmcMwd86ZwzC3Prf0PWdm7V2Ud8Inx2FunDOHYe6ET47D3PhJ7zjMjRP4OMytT44ehblxAh+HufXJ0aMwtz45ehSGaQLfCZ8ch2GawHfCJ8dhmCbwnfDJ4aPPd8Inx2FuncBHYZie3b/zC5mOwzA9u3/nFzIdh7l1Av/rMH4nI3Qc5tYJfBSGaAI7Ez3lD6IJ7Ez0lDPRU85ET/mdX8h0HIZpAt9JTx2HYZrAd/JNx2GYJvCdBNJxGKYJfOcXMh2HYZrAd/JNx2GYJvCdfNNxGKYJfCdSdByGaejtgzPz8W1BcP+x6vG9avc9eLhq981ytGqfGTlctfvP73DV7k39etU//vFfnrYIgg==",
913
+ "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"
914
+ ],
915
+ "fileMap": {
916
+ "15": {
917
+ "source": "impl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n \n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(_self: Self, _bit_size: u32) -> [u1] {}\n \n #[builtin(to_be_bits)]\n fn __to_be_bits(_self: Self, _bit_size: u32) -> [u1] {}\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n \n #[builtin(to_be_radix)]\n fn __to_be_radix(_self: Self, _radix: u32, _result_len: u32) -> [u8] {}\n\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> Field {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n",
918
+ "path": "std/field.nr"
919
+ },
920
+ "16": {
921
+ "source": "struct GrumpkinScalar {\n low: Field,\n high: Field,\n}\n\nimpl GrumpkinScalar {\n pub fn new(low: Field, high: Field) -> Self {\n // TODO: check that the low and high value fit within the grumpkin modulus\n GrumpkinScalar { low, high }\n }\n}\n\nglobal GRUMPKIN_SCALAR_SERIALIZED_LEN: Field = 2;\n\npub fn deserialize_grumpkin_scalar(fields: [Field; GRUMPKIN_SCALAR_SERIALIZED_LEN]) -> GrumpkinScalar {\n GrumpkinScalar { low: fields[0], high: fields[1] }\n}\n\npub fn serialize_grumpkin_scalar(scalar: GrumpkinScalar) -> [Field; GRUMPKIN_SCALAR_SERIALIZED_LEN] {\n [scalar.low, scalar.high]\n}\n",
922
+ "path": "std/grumpkin_scalar.nr"
923
+ },
924
+ "17": {
925
+ "source": "use crate::grumpkin_scalar::GrumpkinScalar;\nuse crate::scalar_mul::fixed_base_embedded_curve;\n\npub fn grumpkin_fixed_base(scalar: GrumpkinScalar) -> [Field; 2] {\n // TODO: this should use both the low and high limbs to do the scalar multiplication\n fixed_base_embedded_curve(scalar.low, scalar.high)\n}\n",
926
+ "path": "std/grumpkin_scalar_mul.nr"
927
+ },
928
+ "27": {
929
+ "source": "struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some {\n self._value\n } else {\n default\n }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some {\n self\n } else {\n other\n }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some {\n self\n } else {\n default()\n }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some {\n Option::none()\n } else {\n self\n }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n",
930
+ "path": "std/option.nr"
931
+ },
932
+ "38": {
933
+ "source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::oracle;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\npub fn emit_encrypted_log<N>(\n context: &mut PrivateContext,\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n log: [Field; N]\n) {\n let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log);\n context.accumulate_encrypted_logs(log);\n}\n\npub fn emit_unencrypted_log<T>(context: &mut PublicContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n\n// TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n// --> might be a better approach to force devs to make a public function call that emits the log if needed then\n// it would be less easy to accidentally leak information.\n// If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\npub fn emit_unencrypted_log_from_private<T>(context: &mut PrivateContext, log: T) {\n let contract_address = context.this_address();\n let event_selector = 5; // TODO: compute actual event selector.\n let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log);\n // context.accumulate_unencrypted_logs(log);\n}\n",
934
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/log.nr"
935
+ },
936
+ "39": {
937
+ "source": "use dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::hash_args,\n};\n\n// docs:start:private-global-variables\nstruct PrivateGlobalVariables {\n chain_id: Field,\n version: Field,\n}\n// docs:end:private-global-variables\n\nimpl PrivateGlobalVariables {\n fn serialize(self) -> [Field; 2] {\n [self.chain_id, self.version]\n }\n}\n\n// docs:start:public-global-variables\nstruct PublicGlobalVariables {\n chain_id: Field,\n version: Field,\n block_number: Field,\n timestamp: Field,\n}\n// docs:end:public-global-variables\n\nimpl PublicGlobalVariables {\n fn serialize(self) -> [Field; 4] {\n [self.chain_id, self.version, self.block_number, self.timestamp]\n }\n}\n\n// PrivateContextInputs are expected to be provided to each private function\n// docs:start:private-context-inputs\nstruct PrivateContextInputs {\n call_context : CallContext,\n block_header: BlockHeader,\n contract_deployment_data: ContractDeploymentData,\n private_global_variables: PrivateGlobalVariables,\n}\n// docs:end:private-context-inputs\n\n// PublicContextInputs are expected to be provided to each public function\n// docs:start:public-context-inputs\nstruct PublicContextInputs {\n call_context: CallContext,\n block_header: BlockHeader,\n\n public_global_variables: PublicGlobalVariables,\n}\n// docs:end:public-context-inputs\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hasher {\n pub fn new()-> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n\n pub fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n",
938
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/abi.nr"
939
+ },
940
+ "40": {
941
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::{\n address::AztecAddress,\n};\n\nuse crate::context::{PrivateContext, Context};\nuse crate::note::{\n lifecycle::create_note,\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::singleton::compute_singleton_initialization_nullifier;\n\n// docs:start:struct\nstruct ImmutableSingleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> ImmutableSingleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n ImmutableSingleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note, \n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(\n context,\n self.storage_slot,\n note,\n self.note_interface,\n broadcast,\n );\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note(self) -> Note {\n let context = self.context.unwrap();\n let storage_slot = self.storage_slot;\n get_note(context, storage_slot, self.note_interface)\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
942
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr"
943
+ },
944
+ "41": {
945
+ "source": "use crate::context::{Context};\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse crate::types::type_serialization::TypeSerializationInterface;\nuse dep::std::option::Option;\n\n// docs:start:public_state_struct\nstruct PublicState<T, T_SERIALIZED_LEN> {\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n}\n// docs:end:public_state_struct\n\nimpl<T, T_SERIALIZED_LEN> PublicState<T, T_SERIALIZED_LEN> {\n // docs:start:public_state_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field,\n serialization_methods: TypeSerializationInterface<T, T_SERIALIZED_LEN>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicState {\n context,\n storage_slot,\n serialization_methods,\n }\n }\n // docs:end:public_state_struct_new\n\n // docs:start:public_state_struct_read\n pub fn read(self) -> T {\n assert(self.context.private.is_none(), \"Public state writes only supported in public functions\");\n storage_read(self.storage_slot, self.serialization_methods.deserialize)\n }\n // docs:end:public_state_struct_read\n\n // docs:start:public_state_struct_write\n pub fn write(self, value: T) {\n assert(self.context.private.is_none(), \"Public state writes only supported in public functions\");\n let serialize = self.serialization_methods.serialize;\n let fields = serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_state_struct_write\n}\n",
946
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr"
947
+ },
948
+ "42": {
949
+ "source": "use crate::context::{PrivateContext, PublicContext, Context};\nuse dep::std::option::Option;\nuse dep::protocol_types::hash::pedersen_hash;\n\n// docs:start:map\nstruct Map<V> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<V> Map<V> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n ) -> Map<V> {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map {\n context,\n storage_slot,\n state_var_constructor,\n }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: Field) -> V {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = pedersen_hash([self.storage_slot, key],0);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n",
950
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/map.nr"
951
+ },
952
+ "43": {
953
+ "source": "use dep::std::option::Option;\n\nuse dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n },\n hash::pedersen_hash,\n};\n\nuse crate::context::{PrivateContext, PublicContext, Context};\nuse crate::note::{\n lifecycle::{create_note, destroy_note},\n note_getter::{get_note, view_notes},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::{\n get_secret_key::get_secret_key,\n notes::check_nullifier_exists,\n};\n\npub fn compute_singleton_initialization_nullifier(storage_slot: Field, owner: Option<AztecAddress>) -> Field {\n if owner.is_some() {\n let secret = get_secret_key(owner.unwrap_unchecked());\n pedersen_hash(\n [storage_slot, secret.low, secret.high],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n } else {\n pedersen_hash([storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER)\n }\n}\n\n// docs:start:struct\nstruct Singleton<Note, N> {\n context: Option<&mut PrivateContext>,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n compute_initialization_nullifier: fn (Field, Option<AztecAddress>) -> Field,\n}\n// docs:end:struct\n\nimpl<Note, N> Singleton<Note, N> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Singleton {\n context: context.private,\n storage_slot,\n note_interface,\n compute_initialization_nullifier: compute_singleton_initialization_nullifier,\n }\n }\n // docs:end:new\n\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self, owner: Option<AztecAddress>) -> bool {\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // docs:start:initialize\n pub fn initialize(\n self,\n note: &mut Note,\n owner: Option<AztecAddress>,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n\n // Nullify the storage slot.\n let compute_initialization_nullifier = self.compute_initialization_nullifier;\n let nullifier = compute_initialization_nullifier(self.storage_slot, owner);\n context.push_new_nullifier(nullifier, 0);\n\n create_note(context, self.storage_slot, note, self.note_interface, broadcast);\n }\n // docs:end:initialize\n\n // docs:start:replace\n pub fn replace(\n self,\n new_note: &mut Note,\n broadcast: bool,\n ) {\n let context = self.context.unwrap();\n let prev_note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify previous note.\n destroy_note(context, prev_note, self.note_interface);\n\n // Add replacement note.\n create_note(context, self.storage_slot, new_note, self.note_interface, broadcast);\n }\n // docs:end:replace\n\n // docs:start:get_note\n pub fn get_note(self, broadcast: bool) -> Note {\n let context = self.context.unwrap();\n let mut note = get_note(context, self.storage_slot, self.note_interface);\n\n // Nullify current note to make sure it's reading the latest note.\n destroy_note(context, note, self.note_interface);\n\n // Add the same note again.\n // Because a nonce is added to every note in the kernel, its nullifier will be different.\n create_note(context, self.storage_slot, &mut note, self.note_interface, broadcast);\n\n note\n }\n // docs:end:get_note\n\n // docs:start:view_note\n unconstrained pub fn view_note(self) -> Note {\n let options = NoteViewerOptions::new().set_limit(1);\n view_notes(self.storage_slot, self.note_interface, options)[0].unwrap()\n }\n // docs:end:view_note\n}\n",
954
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr"
955
+ },
956
+ "48": {
957
+ "source": "use crate::types::type_serialization::TypeSerializationInterface;\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\n\nfn deserializeBool(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n}\n\nfn serializeBool(value: bool) -> [Field; BOOL_SERIALIZED_LEN] {\n [value as Field]\n}\n\nglobal BoolSerializationMethods = TypeSerializationInterface {\n deserialize: deserializeBool,\n serialize: serializeBool,\n};\n",
958
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr"
959
+ },
960
+ "50": {
961
+ "source": "struct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: Field,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new(initial_value: T) -> Self {\n BoundedVec { storage: [initial_value; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: Field) -> T {\n assert(index as u64 < self.len as u64);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: Field) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len as u64 < MaxLen as u64);\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn push_array<Len>(&mut self, array: [T; Len]) {\n let newLen = self.len + array.len();\n assert(newLen as u64 <= MaxLen as u64);\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = newLen;\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len as u64 > 0);\n\n let elem = self.storage[self.len - 1];\n self.len -= 1;\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if (!exceeded_len) {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n\n#[test]\nfn test_vec_push_pop() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n assert(vec.len == 0);\n vec.push(2);\n assert(vec.len == 1);\n vec.push(4);\n assert(vec.len == 2);\n vec.push(6);\n assert(vec.len == 3);\n let x = vec.pop();\n assert(x == 6);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test]\nfn test_vec_push_array() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n assert(vec.len == 2);\n assert(vec.get(0) == 2);\n assert(vec.get(1) == 4);\n}\n\n#[test(should_fail)]\nfn test_vec_get_out_of_bound() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2, 4]);\n let _x = vec.get(2);\n}\n\n#[test(should_fail)]\nfn test_vec_get_not_declared() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n vec.push_array([2]);\n let _x = vec.get(1);\n}\n\n#[test(should_fail)]\nfn test_vec_get_uninitialized() {\n let mut vec: BoundedVec<Field, 2> = BoundedVec::new(0);\n let _x = vec.get(0);\n}\n\n#[test(should_fail)]\nfn test_vec_push_overflow() {\n let mut vec: BoundedVec<Field, 1> = BoundedVec::new(0);\n vec.push(1);\n vec.push(2);\n}\n\n#[test]\nfn test_vec_any() {\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(0);\n vec.push_array([2, 4, 6]);\n assert(vec.any(|v| v == 2) == true);\n assert(vec.any(|v| v == 4) == true);\n assert(vec.any(|v| v == 6) == true);\n assert(vec.any(|v| v == 3) == false);\n}\n\n#[test]\nfn test_vec_any_not_default() {\n let default_value = 1;\n let mut vec: BoundedVec<Field, 3> = BoundedVec::new(default_value);\n vec.push_array([2, 4]);\n assert(vec.any(|v| v == default_value) == false);\n}\n",
962
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/types/vec.nr"
963
+ },
964
+ "62": {
965
+ "source": "pub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: Field) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n\n// TODO(#3470): Copied over from https://github.com/AztecProtocol/aztec-packages/blob/a07c4bd47313be6aa604a63f37857eb0136b41ba/yarn-project/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr#L599\n// move to a shared place?\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n dep::std::eddsa::lt_bytes32(lhs, rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n dep::std::eddsa::lt_bytes32(rhs, lhs)\n}\n\nstruct Reader<N> {\n data: [Field; N],\n offset: Field,\n}\n\nimpl<N> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_array<K>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, K>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, K, C>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n } \n}\n",
966
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/utils.nr"
967
+ },
968
+ "64": {
969
+ "source": "use dep::protocol_types::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n function_data::FunctionData,\n function_selector::FunctionSelector,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_stack_item::PrivateCallStackItem,\n call_stack_item::PublicCallStackItem,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n address::{\n AztecAddress,\n EthAddress,\n },\n constants::{\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_READ_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256,\n RETURN_VALUES_LENGTH,\n },\n contrakt::{\n deployment_data::ContractDeploymentData,\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n hash::hash_args,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\nuse crate::abi::{\n PrivateContextInputs,\n PublicContextInputs,\n};\n\n// l1 to l2 messaging\nuse crate::messaging::process_l1_to_l2_message;\n\nuse crate::types::{\n vec::BoundedVec,\n};\n\nuse crate::utils::Reader;\n\nuse crate::oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n public_call::call_public_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal,\n context::get_portal_address,\n get_block_header::get_block_header,\n};\n\nuse dep::std::option::Option;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: Field,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n read_requests: BoundedVec<SideEffect, MAX_READ_REQUESTS_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n block_header: BlockHeader,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs: inputs,\n // starts at 1 because all private calls have txhash nullifier as 0th nullifier\n // and therefore 0th sideeffect. increment this for each side effect in this context\n side_effect_counter: 1,\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n read_requests: BoundedVec::new(SideEffect::empty()),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n block_header: inputs.block_header,\n\n private_call_stack_hashes: BoundedVec::new(0),\n public_call_stack_hashes: BoundedVec::new(0),\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_block_header(self, block_number: u32) -> BlockHeader {\n get_block_header(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n read_requests: self.read_requests.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash: encrypted_logs_hash,\n unencrypted_logs_hash: unencrypted_logs_hash,\n encrypted_log_preimages_length: encrypted_log_preimages_length,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n block_header: self.block_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version,\n };\n priv_circuit_pub_inputs\n }\n\n pub fn push_read_request(&mut self, read_request: Field) {\n let side_effect = SideEffect {\n value: read_request,\n counter: self.side_effect_counter,\n };\n self.read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter,\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: nullified_commitment,\n counter: self.side_effect_counter,\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, content: Field) \n // docs:end:context_message_portal\n {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n msg_key: Field,\n content: Field,\n secret: Field\n ) \n // docs:end:context_consume_l1_to_l2_message\n {\n let nullifier = process_l1_to_l2_message(self.block_header.l1_to_l2_message_tree_root, self.this_address(), self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let fields = call_private_function_internal(\n contract_address,\n function_selector, \n args_hash,\n );\n let mut reader = Reader::new(fields);\n\n let item = PrivateCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(reader.read()),\n is_internal: reader.read() as bool,\n is_private: reader.read() as bool,\n is_constructor: reader.read() as bool,\n },\n public_inputs: PrivateCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(reader.read()),\n storage_contract_address : AztecAddress::from_field(reader.read()),\n portal_contract_address : EthAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()), // practically same as fields[1]\n is_delegate_call : reader.read() as bool,\n is_static_call : reader.read() as bool,\n is_contract_deployment: reader.read() as bool,\n start_side_effect_counter: reader.read(),\n },\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]), // +1\n read_requests: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_READ_REQUESTS_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialise, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialise, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n end_side_effect_counter: reader.read(),\n encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n block_header: BlockHeader{\n // Must match order in `private_circuit_public_inputs.hpp`\n note_hash_tree_root : reader.read(),\n nullifier_tree_root : reader.read(),\n contract_tree_root : reader.read(),\n l1_to_l2_message_tree_root : reader.read(),\n archive_root : reader.read(),\n public_data_tree_root: reader.read(),\n global_variables_hash: reader.read(),\n },\n contract_deployment_data: ContractDeploymentData {\n deployer_public_key: GrumpkinPoint {\n x: reader.read(), \n y: reader.read()\n },\n constructor_vk_hash : reader.read(),\n function_tree_root : reader.read(),\n contract_address_salt : reader.read(),\n portal_contract_address : EthAddress::from_field(reader.read()),\n },\n chain_id: reader.read(),\n version: reader.read(),\n },\n is_execution_request: reader.read() as bool,\n };\n\n reader.finish();\n \n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n assert(item.is_execution_request == false);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector, \n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n ) {\n let fields = enqueue_public_function_call_internal(\n contract_address, \n function_selector, \n args_hash\n );\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(fields[0]),\n function_data: FunctionData {\n selector: FunctionSelector::from_field(fields[1]),\n is_internal: fields[2] as bool,\n is_private: fields[3] as bool,\n is_constructor: fields[4] as bool,\n },\n public_inputs: PublicCircuitPublicInputs {\n call_context: CallContext {\n msg_sender : AztecAddress::from_field(fields[5]),\n storage_contract_address : AztecAddress::from_field(fields[6]),\n portal_contract_address : EthAddress::from_field(fields[7]),\n function_selector: FunctionSelector::from_field(fields[8]), // practically same as fields[1]\n is_delegate_call : fields[9] as bool,\n is_static_call : fields[10] as bool,\n is_contract_deployment: fields[11] as bool,\n start_side_effect_counter: fields[12],\n },\n args_hash: fields[13],\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs:[0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash:[0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n block_header: BlockHeader::empty(),\n prover_address: AztecAddress::zero(),\n },\n is_execution_request: true,\n };\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n \n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n // We are issuing a regular call which is not delegate, static, or deployment. We also constrain\n // the msg_sender in the nested call to be equal to our address, and the execution context address\n // for the nested call to be equal to the address we actually called.\n assert(item.public_inputs.call_context.is_delegate_call == false);\n assert(item.public_inputs.call_context.is_static_call == false);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address));\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: Field,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n block_header: BlockHeader,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs: inputs,\n side_effect_counter: 0, // no initial nullifier in new public context. increment on every side effect\n\n args_hash: args_hash,\n return_values: BoundedVec::new(0),\n\n contract_storage_update_requests: BoundedVec::new(empty_storage_update),\n contract_storage_reads: BoundedVec::new(empty_storage_read),\n public_call_stack_hashes: BoundedVec::new(0),\n\n new_commitments: BoundedVec::new(SideEffect::empty()),\n new_nullifiers: BoundedVec::new(SideEffectLinkedToNoteHash::empty()),\n\n new_l2_to_l1_msgs: BoundedVec::new(0),\n\n \n unencrypted_logs_hash: BoundedVec::new(0),\n unencrypted_logs_preimages_length: 0,\n\n block_header: inputs.block_header,\n prover_address: AztecAddress::zero(),\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n pub fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.public_global_variables.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_commitments: self.new_commitments.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n unencrypted_logs_hash: unencrypted_logs_hash,\n unencrypted_log_preimages_length: unencrypted_log_preimages_length,\n block_header: self.inputs.block_header,\n prover_address: self.prover_address,\n };\n pub_circuit_pub_inputs\n }\n\n pub fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect {\n value: note_hash,\n counter: self.side_effect_counter\n };\n self.new_commitments.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.side_effect_counter\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn message_portal(&mut self, content: Field) {\n self.new_l2_to_l1_msgs.push(content);\n }\n\n // PrivateContextInputs must be temporarily passed in to prevent too many unknowns\n // Note this returns self to get around an issue where mutable structs do not maintain mutations unless reassigned\n pub fn consume_l1_to_l2_message(&mut self, msg_key: Field, content: Field, secret: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(self.block_header.l1_to_l2_message_tree_root, this, self.this_portal_address(), self.chain_id(), self.version(), msg_key, content, secret);\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(\n contract_address, \n function_selector, \n args_hash,\n )\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress, \n function_selector: FunctionSelector,\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(\n contract_address, \n function_selector, \n 0,\n )\n }\n\n}\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context {\n private: Option::some(context),\n public: Option::none()\n }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context {\n public: Option::some(context),\n private: Option::none()\n }\n }\n\n pub fn none() -> Context {\n Context {\n public: Option::none(),\n private: Option::none()\n }\n }\n}\n",
970
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/context.nr"
971
+ },
972
+ "69": {
973
+ "source": "use crate::abi::PublicContextInputs;\nuse crate::context::{\n PrivateContext,\n PublicContext,\n};\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_inner_note_hash,\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>,\n broadcast: bool\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n let serialize = note_interface.serialize;\n let serialized_note = serialize(*note);\n assert(notify_created_note(storage_slot, serialized_note, inner_note_hash) == 0);\n\n context.push_new_note_hash(inner_note_hash);\n\n if broadcast {\n let broadcast = note_interface.broadcast;\n broadcast(context, storage_slot, *note);\n }\n}\n\npub fn create_note_hash_from_public<Note, N>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n note_interface: NoteInterface<Note, N>\n) {\n let contract_address = (*context).this_address();\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, is_transient: true };\n let set_header = note_interface.set_header;\n set_header(note, header);\n let inner_note_hash = compute_inner_note_hash(note_interface, *note);\n\n context.push_new_note_hash(inner_note_hash);\n}\n\npub fn destroy_note<Note, N>(\n context: &mut PrivateContext,\n note: Note,\n note_interface: NoteInterface<Note, N>\n) {\n let mut nullifier = 0;\n let mut nullified_commitment: Field = 0;\n let compute_nullifier = note_interface.compute_nullifier;\n nullifier = compute_nullifier(note);\n\n // We also need the note commitment corresponding to the \"nullifier\"\n let get_header = note_interface.get_header;\n let header = get_header(note);\n // `nullified_commitment` is used to inform the kernel which pending commitment\n // the nullifier corresponds to so they can be matched and both squashed/deleted.\n // nonzero nonce implies \"persistable\" nullifier (nullifies a persistent/in-tree\n // commitment) in which case `nullified_commitment` is not used since the kernel\n // just siloes and forwards the nullifier to its output.\n if (header.is_transient) {\n // TODO(1718): Can we reuse the note commitment computed in `compute_nullifier`?\n nullified_commitment = compute_inner_note_hash(note_interface, note);\n }\n assert(notify_nullified_note(nullifier, nullified_commitment) == 0);\n\n context.push_new_nullifier(nullifier, nullified_commitment)\n}\n",
974
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr"
975
+ },
976
+ "70": {
977
+ "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__OUTER_NULLIFIER,\n hash::pedersen_hash,\n};\nuse crate::{\n note::{\n note_hash::{compute_inner_hash, compute_siloed_hash, compute_unique_hash},\n note_header::NoteHeader,\n note_interface::NoteInterface,\n },\n utils::arr_copy_slice,\n};\n\npub fn compute_inner_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n\n compute_inner_hash(header.storage_slot, note_hash)\n}\n\npub fn compute_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let inner_note_hash = compute_inner_note_hash(note_interface, note_with_header);\n\n compute_siloed_hash(header.contract_address, inner_note_hash)\n}\n\npub fn compute_unique_siloed_note_hash<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let siloed_note_hash = compute_siloed_note_hash(note_interface, note_with_header);\n\n compute_unique_hash(header.nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note_with_header);\n\n let input = [header.contract_address.to_field(), inner_nullifier];\n pedersen_hash(input, GENERATOR_INDEX__OUTER_NULLIFIER)\n}\n\npub fn compute_note_hash_for_read_or_nullify<Note, N>(note_interface: NoteInterface<Note, N>, note_with_header: Note) -> Field {\n let get_header = note_interface.get_header;\n let header = get_header(note_with_header);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386)\n if (header.is_transient) {\n // If a note is transient, we just read the inner_note_hash (kernel will silo by contract address).\n compute_inner_note_hash(note_interface, note_with_header)\n } else if (header.nonce == 0) {\n // If not transient and nonce is zero, that means we are reading a public note.\n compute_siloed_note_hash(note_interface, note_with_header)\n } else {\n // When nonce is nonzero, that means we are reading a settled note (from tree) created in a\n // previous TX. So we need the unique_siloed_note_hash which has already been hashed with\n // contract address and then nonce. This hash will match the existing leaf in the private\n // data tree, so the kernel can just perform a membership check directly on this hash/leaf.\n compute_unique_siloed_note_hash(note_interface, note_with_header)\n }\n}\n\npub fn compute_note_hash_and_nullifier<Note, N, S>(\n note_interface: NoteInterface<Note, N>,\n note_header: NoteHeader,\n serialized_note: [Field; S]\n) -> [Field; 4] {\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0));\n set_header(&mut note, note_header);\n\n let compute_note_hash = note_interface.compute_note_hash;\n let note_hash = compute_note_hash(note);\n let inner_note_hash = compute_inner_hash(note_header.storage_slot, note_hash);\n\n let siloed_note_hash = compute_siloed_hash(note_header.contract_address, inner_note_hash);\n\n let unique_siloed_note_hash = compute_unique_hash(note_header.nonce, siloed_note_hash);\n\n let compute_nullifier = note_interface.compute_nullifier;\n let inner_nullifier = compute_nullifier(note);\n\n [inner_note_hash, siloed_note_hash, unique_siloed_note_hash, inner_nullifier]\n}\n",
978
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/utils.nr"
979
+ },
980
+ "72": {
981
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n },\n hash::pedersen_hash,\n};\n\npub fn compute_inner_hash(storage_slot: Field, note_hash: Field) -> Field {\n // TODO(#1205) Do we need a generator index here?\n pedersen_hash([storage_slot, note_hash], 0)\n}\n\npub fn compute_siloed_hash(contract_address: AztecAddress, inner_note_hash: Field) -> Field {\n let inputs = [contract_address.to_field(), inner_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__SILOED_COMMITMENT)\n}\n\npub fn compute_unique_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n pedersen_hash(inputs, GENERATOR_INDEX__UNIQUE_COMMITMENT)\n}\n",
982
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_hash.nr"
983
+ },
984
+ "75": {
985
+ "source": "use dep::std::option::Option;\nuse dep::protocol_types::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n GET_NOTE_ORACLE_RETURN_LENGTH,\n GET_NOTES_ORACLE_RETURN_LENGTH,\n MAX_NOTES_PER_PAGE,\n VIEW_NOTE_ORACLE_RETURN_LENGTH,\n};\nuse crate::context::PrivateContext;\nuse crate::note::{\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder},\n note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_or_nullify,\n};\nuse crate::oracle;\nuse crate::types::vec::BoundedVec;\n\nfn check_note_header<Note, N>(\n context: PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n note: Note\n) {\n let get_header = note_interface.get_header;\n let header = get_header(note);\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address));\n assert(header.storage_slot == storage_slot);\n}\n\nfn check_note_fields<N>(fields: [Field; N], selects: BoundedVec<Option<Select>, N>) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n assert(fields[select.field_index] == select.value, \"Mismatch return note field.\");\n }\n}\n\nfn check_notes_order<N>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let eq = fields_0[sort.field_index] == fields_1[sort.field_index];\n let lt = fields_0[sort.field_index] as u120 < fields_1[sort.field_index] as u120;\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, N>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>\n) -> Note {\n let note = get_note_internal(storage_slot, note_interface);\n\n check_note_header(*context, storage_slot, note_interface, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n\n context.push_read_request(note_hash_for_read_request);\n note\n}\n\npub fn get_notes<Note, N, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let opt_notes = get_notes_internal(storage_slot, note_interface, options);\n let mut num_notes = 0;\n let mut prev_fields = [0; N];\n for i in 0..opt_notes.len() {\n let opt_note = opt_notes[i];\n if opt_note.is_some() {\n let note = opt_note.unwrap_unchecked();\n let serialize = note_interface.serialize;\n let fields = serialize(note);\n check_note_header(*context, storage_slot, note_interface, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_or_nullify(note_interface, note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_read_request(note_hash_for_read_request);\n\n num_notes += 1;\n };\n }\n if options.limit != 0 {\n assert(num_notes <= options.limit, \"Invalid number of return notes.\");\n }\n opt_notes\n}\n\nunconstrained fn get_note_internal<Note, N>(storage_slot: Field, note_interface: NoteInterface<Note, N>) -> Note {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n 0,\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n placeholder_note,\n placeholder_fields\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, N, FILTER_ARGS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteGetterOptions<Note, N, FILTER_ARGS>\n) -> [Option<Note>; MAX_READ_REQUESTS_PER_CALL] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n );\n\n let filter = options.filter;\n let filter_args = options.filter_args;\n filter(opt_notes, filter_args)\n}\n\nunconstrained pub fn view_notes<Note, N>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n options: NoteViewerOptions<Note, N>\n) -> [Option<Note>; MAX_NOTES_PER_PAGE] {\n let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n oracle::notes::get_notes(\n storage_slot,\n note_interface,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n options.limit,\n options.offset,\n placeholder_opt_notes,\n placeholder_fields\n )\n}\n\nunconstrained fn flatten_options<Note, N>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) {\n let mut num_selects = 0;\n let mut select_by = [0; N];\n let mut select_values = [0; N];\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by[num_selects] = select.unwrap_unchecked().field_index;\n select_values[num_selects] = select.unwrap_unchecked().value;\n num_selects += 1;\n };\n }\n\n let mut sort_by = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by[i] = sort.unwrap_unchecked().field_index;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (num_selects, select_by, select_values, sort_by, sort_order)\n}\n",
986
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/note/note_getter.nr"
987
+ },
988
+ "77": {
989
+ "source": "use dep::std::option::Option;\nuse crate::note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n};\nuse crate::utils::arr_copy_slice;\n\nuse dep::protocol_types::address::AztecAddress;\n\n#[oracle(notifyCreatedNote)]\nfn notify_created_note_oracle<N>(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_created_note<N>(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field {\n notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash)\n}\n\n#[oracle(notifyNullifiedNote)]\nfn notify_nullified_note_oracle<N>(_nullifier: Field, _inner_note_hash: Field) -> Field {}\n\nunconstrained pub fn notify_nullified_note<N>(nullifier: Field, inner_note_hash: Field) -> Field {\n notify_nullified_note_oracle(nullifier, inner_note_hash)\n}\n\n#[oracle(getNotes)]\nfn get_notes_oracle<N, S>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by: [u8; N],\n _select_values: [Field; N],\n _sort_by: [u8; N],\n _sort_order: [u2; N],\n _limit: u32,\n _offset: u32,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<N, S>(\n storage_slot: Field,\n num_selects: u8,\n select_by: [u8; N],\n select_values: [Field; N],\n sort_by: [u8; N],\n sort_order: [u2; N],\n limit: u32,\n offset: u32,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, N, M, S, NS>(\n storage_slot: Field,\n note_interface: NoteInterface<Note, N>,\n num_selects: u8,\n select_by: [u8; M],\n select_values: [Field; M],\n sort_by: [u8; M],\n sort_order: [u2; M],\n limit: u32,\n offset: u32,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array.\n) -> [Option<Note>; S] {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by,\n select_values,\n sort_by,\n sort_order,\n limit,\n offset,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n let deserialize = note_interface.deserialize;\n let set_header = note_interface.set_header;\n for i in 0..placeholder_opt_notes.len() {\n if i as u32 < num_notes {\n // lengths named as per typescript.\n let return_header_length: Field = 2; // num_notes & contract_address.\n let extra_preimage_length: Field = 2; // nonce & is_transient.\n let read_offset: Field = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let is_transient = fields[read_offset + 1] as bool;\n let header = NoteHeader { contract_address, nonce, storage_slot, is_transient };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = deserialize(serialized_note);\n set_header(&mut note, header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n#[oracle(checkNullifierExists)]\nfn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n",
990
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/notes.nr"
991
+ },
992
+ "78": {
993
+ "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n};\n\n// contract_address + \n// args_hash +\n// crate::abi::FUNCTION_DATA_SIZE +\n// crate::abi::CALL_CONTEXT_SIZE + side_effect_counter\n// = 2 + 4 + 7 + 1\nglobal ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: Field = 14;\n\n#[oracle(enqueuePublicFunctionCall)]\nfn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {\n enqueue_public_function_call_oracle(contract_address, function_selector, args_hash)\n}\n",
994
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr"
995
+ },
996
+ "83": {
997
+ "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::CALL_PRIVATE_FUNCTION_RETURN_SIZE,\n};\n\n#[oracle(callPrivateFunction)]\nfn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field\n) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {\n call_private_function_oracle(contract_address, function_selector, args_hash)\n}\n",
998
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr"
999
+ },
1000
+ "90": {
1001
+ "source": "#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<T, N>(storage_slot: Field, deserialize: fn([Field; N]) -> T) -> T {\n let fields = storage_read_oracle_wrapper(storage_slot);\n deserialize(fields)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\n// TODO: Remove return value.\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n",
1002
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/storage.nr"
1003
+ },
1004
+ "92": {
1005
+ "source": "use dep::protocol_types::{\n address::{\n AztecAddress,\n PartialAddress,\n },\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getPublicKeyAndPartialAddress)]\nfn get_public_key_and_partial_address_oracle(_address: AztecAddress) -> [Field; 3] {}\n\nunconstrained fn get_public_key_and_partial_address_internal(address: AztecAddress) -> [Field; 3] {\n get_public_key_and_partial_address_oracle(address)\n}\n\npub fn get_public_key(address: AztecAddress) -> GrumpkinPoint {\n let result = get_public_key_and_partial_address_internal(address);\n let pub_key = GrumpkinPoint::new(result[0], result[1]);\n let partial_address = PartialAddress::from_field(result[2]);\n\n let calculated_address = AztecAddress::compute(pub_key, partial_address);\n assert(calculated_address.eq(address));\n\n pub_key\n}\n",
1006
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr"
1007
+ },
1008
+ "94": {
1009
+ "source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::NUM_FIELDS_PER_SHA256,\n grumpkin_point::GrumpkinPoint,\n};\n\n// TODO: Should take encrypted data.\n#[oracle(emitEncryptedLog)]\nfn emit_encrypted_log_oracle<N>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _encryption_pub_key: GrumpkinPoint,\n _preimage: [Field; N]\n) -> Field {}\n\nunconstrained pub fn emit_encrypted_log<N>(\n contract_address: AztecAddress,\n storage_slot: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0]\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(_contract_address: AztecAddress, _event_selector: Field, _message: T) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n // https://github.com/AztecProtocol/aztec-packages/issues/885\n [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0]\n}\n",
1010
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/logs.nr"
1011
+ },
1012
+ "95": {
1013
+ "source": "use crate::oracle::get_public_key::get_public_key;\nuse dep::protocol_types::{\n address::AztecAddress,\n grumpkin_point::GrumpkinPoint,\n};\n\n#[oracle(getSecretKey)]\nfn get_secret_key_oracle(_owner: GrumpkinPoint) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] {}\n\nunconstrained fn get_secret_key_internal(owner_public_key: GrumpkinPoint) -> dep::std::grumpkin_scalar::GrumpkinScalar {\n dep::std::grumpkin_scalar::deserialize_grumpkin_scalar(get_secret_key_oracle(owner_public_key))\n}\n\npub fn get_secret_key(owner: AztecAddress) -> dep::std::grumpkin_scalar::GrumpkinScalar {\n let owner_public_key = get_public_key(owner);\n let secret = get_secret_key_internal(owner_public_key);\n\n // Constrain the owner - Nullifier secret key is currently just the encryption private key so we can constrain\n // the owner by deriving the public key from the secret key and checking the result.\n let computed_public_key = dep::std::grumpkin_scalar_mul::grumpkin_fixed_base(secret);\n assert(owner_public_key.x == computed_public_key[0]);\n assert(owner_public_key.y == computed_public_key[1]);\n\n secret\n}\n",
1014
+ "path": "/usr/src/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr"
1015
+ },
1016
+ "96": {
1017
+ "source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 16;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue bellow is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field = 26;\nglobal MAX_NOTE_FIELDS_LENGTH: Field = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: Field = 23;\nglobal MAX_NOTES_PER_PAGE: Field = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: Field = 212;\nglobal CALL_CONTEXT_LENGTH: Field = 8;\nglobal BLOCK_HEADER_LENGTH: Field = 7;\nglobal FUNCTION_DATA_LENGTH: Field = 4;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we\n// should change this constant as well as the offsets in private_call_stack_item.nr\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 189;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 3;\nglobal CONTRACT_STORAGE_READ_LENGTH: Field = 2;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 190;\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674;\nglobal CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 195;\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 87;\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 177;\nglobal COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__COMMITMENT = 1;\nglobal GENERATOR_INDEX__COMMITMENT_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_COMMITMENT = 3;\nglobal GENERATOR_INDEX__SILOED_COMMITMENT = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\n",
1018
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/constants.nr"
1019
+ },
1020
+ "99": {
1021
+ "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::FunctionLeafPreimage;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint128::U128;\nuse crate::utils::uint256::U256;\nuse crate::utils::bounded_vec::BoundedVec;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT,\n ARGS_HASH_CHUNK_LENGTH,\n CONTRACT_TREE_HEIGHT, \n FUNCTION_TREE_HEIGHT, \n NOTE_HASH_TREE_HEIGHT,\n GENERATOR_INDEX__SILOED_COMMITMENT,\n GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK,\n GENERATOR_INDEX__CONSTRUCTOR,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__COMMITMENT_NONCE,\n GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__FUNCTION_ARGS,\n};\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < (args.len() as u32) {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < (args.len() as u32) {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like \n// this because it means we never even need to consider cases where \n// the index is greater than p.\npub fn root_from_sibling_path<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n function_tree_root: Field,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, function_tree_root };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn read_request_root_from_siblings(\n read_request: Field,\n leaf_index: Field,\n sibling_path: [Field; NOTE_HASH_TREE_HEIGHT]\n) -> Field {\n root_from_sibling_path(read_request, leaf_index, sibling_path)\n}\n\npub fn silo_commitment(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_COMMITMENT\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n portal_contract_address: EthAddress,\n chain_id: Field,\n content: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new(0);\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, portal_contract_address.to_field(), chain_id, content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256 : Field = 2;\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n //\n // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_field(previous_log_hash[0]),\n U128::from_field(previous_log_hash[1]),\n U128::from_field(current_log_hash[0]),\n U128::from_field(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_commitment_nonce(first_nullifier: Field, commitment_index: Field) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index\n ],\n GENERATOR_INDEX__COMMITMENT_NONCE\n )\n}\n\npub fn compute_unique_siloed_commitment(nonce: Field, siloed_commitment: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_commitment\n ],\n GENERATOR_INDEX__UNIQUE_COMMITMENT\n )\n}\n\npub fn compute_unique_siloed_commitments<N>(\n first_nullifier: Field,\n siloed_commitments: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_commitments = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_commitment = siloed_commitments[i];\n if siloed_commitment.value != 0 {\n let nonce = compute_commitment_nonce(first_nullifier, i);\n unique_siloed_commitments[i] = SideEffect {\n value: compute_unique_siloed_commitment(nonce, siloed_commitment.value),\n counter: siloed_commitment.counter\n };\n }\n }\n unique_siloed_commitments\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n",
1022
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/hash.nr"
1023
+ },
1024
+ "115": {
1025
+ "source": "use crate::{\n constants::{\n GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n },\n hash::pedersen_hash,\n utils,\n grumpkin_point::GrumpkinPoint,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::Empty;\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(pub_key: GrumpkinPoint, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_key.x, pub_key.y, partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n \n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs : Self, rhs : Self) -> Self{\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self {\n inner : result\n }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl EthAddress{\n pub fn zero() -> Self {\n Self {\n inner: 0\n }\n }\n\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn to_field(self) -> Field{\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs : Self, rhs : Self) -> Self{\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self {\n inner : result\n }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl PartialAddress {\n pub fn from_field(field : Field) -> Self {\n Self {\n inner : field\n }\n }\n\n pub fn compute(contract_address_salt : Field, function_tree_root : Field, constructor_hash : Field) -> Self {\n PartialAddress::from_field(\n pedersen_hash([\n // TODO why the zeroes?\n 0,\n 0,\n contract_address_salt,\n function_tree_root,\n constructor_hash\n ], GENERATOR_INDEX__PARTIAL_ADDRESS)\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n",
1026
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/address.nr"
1027
+ },
1028
+ "120": {
1029
+ "source": "use crate::address::EthAddress;\nuse crate::constants::{\n CONTRACT_DEPLOYMENT_DATA_LENGTH,\n GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA,\n};\nuse crate::hash::pedersen_hash;\nuse crate::grumpkin_point::GrumpkinPoint;\nuse crate::traits::Hash;\n\n// docs:start:contract-deployment-data\nstruct ContractDeploymentData {\n deployer_public_key : GrumpkinPoint,\n constructor_vk_hash : Field,\n function_tree_root : Field,\n contract_address_salt : Field,\n portal_contract_address : EthAddress,\n}\n// docs:end:contract-deployment-data\n\nimpl Hash for ContractDeploymentData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA)\n }\n}\n\nimpl ContractDeploymentData {\n fn serialize(self) -> [Field; CONTRACT_DEPLOYMENT_DATA_LENGTH] {\n [\n self.deployer_public_key.x,\n self.deployer_public_key.y,\n self.constructor_vk_hash,\n self.function_tree_root,\n self.contract_address_salt,\n self.portal_contract_address.to_field(),\n ]\n }\n\n fn assert_is_zero(self) {\n self.deployer_public_key.assert_is_zero();\n assert(self.constructor_vk_hash == 0);\n assert(self.function_tree_root == 0);\n assert(self.contract_address_salt == 0);\n self.portal_contract_address.assert_is_zero();\n }\n\n}\n",
1030
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"
1031
+ },
1032
+ "121": {
1033
+ "source": "use crate::{\n constants::{\n CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Hash, Empty};\n\nstruct StorageUpdateRequest{\n storage_slot : Field,\n old_value : Field,\n new_value : Field,\n}\n\nimpl Eq for StorageUpdateRequest {\n fn eq(self, request: Self) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n (request.storage_slot == self.storage_slot)\n & (request.old_value == self.old_value)\n & (request.new_value == self.new_value)\n }\n}\n\nimpl Empty for StorageUpdateRequest {\n fn empty() -> Self {\n StorageUpdateRequest {\n storage_slot: 0,\n old_value: 0,\n new_value: 0,\n }\n }\n}\n\nimpl Hash for StorageUpdateRequest {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST)\n }\n}\n\nimpl StorageUpdateRequest {\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH] {\n [self.storage_slot, self.old_value, self.new_value]\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
1034
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr"
1035
+ },
1036
+ "122": {
1037
+ "source": "use crate::{\n constants::{\n CONTRACT_STORAGE_READ_LENGTH,\n GENERATOR_INDEX__PUBLIC_DATA_READ,\n },\n hash::pedersen_hash,\n};\nuse crate::traits::Empty;\n\nstruct StorageRead {\n storage_slot: Field,\n current_value: Field,\n}\n\nimpl Empty for StorageRead { \n fn empty() -> Self {\n Self {\n storage_slot: 0,\n current_value: 0,\n }\n }\n}\n\nimpl StorageRead {\n\n pub fn serialize(self) -> [Field; CONTRACT_STORAGE_READ_LENGTH] {\n [self.storage_slot, self.current_value]\n }\n\n pub fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n",
1038
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr"
1039
+ },
1040
+ "131": {
1041
+ "source": "use crate::abis::{\n function_data::FunctionData,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{\n GENERATOR_INDEX__CALL_STACK_ITEM,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCallStackItem {\n // This is the _actual_ contract address relating to where this function's code resides in the\n // contract tree. Regardless of whether this is a call or delegatecall, this\n // `contract_address` _does not change_. Amongst other things, it's used as a lookup for\n // getting the correct code from the tree. There is a separate `storage_contract_address`\n // within a CallStackItem which varies depending on whether this is a call or delegatecall.\n contract_address: AztecAddress,\n public_inputs: PrivateCircuitPublicInputs,\n function_data: FunctionData,\n // Not really needed for PrivateCallStackItem.\n is_execution_request: bool,\n}\n\nimpl Hash for PrivateCallStackItem {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.contract_address.to_field(),\n self.function_data.hash(),\n self.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs,\n };\n call_stack_item\n }\n}\n",
1042
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_stack_item.nr"
1043
+ },
1044
+ "136": {
1045
+ "source": "use crate::constants::{GENERATOR_INDEX__SIDE_EFFECT};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\nstruct SideEffect{\n value: Field,\n counter: Field,\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffect {\n pub fn serialize(self) -> [Field; 2] {\n [self.value, self.counter]\n }\n\n pub fn deserialise(values: [Field; 2]) -> Self {\n Self {\n value: values[0],\n counter: values[1],\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.counter == 0)\n }\n}\n\nstruct SideEffectLinkedToNoteHash{\n value: Field,\n note_hash: Field,\n counter: Field,\n}\n\nimpl Eq for SideEffectLinkedToNoteHash {\n fn eq(self, side_effect: SideEffectLinkedToNoteHash) -> bool {\n (self.value == side_effect.value)\n & (self.note_hash == side_effect.note_hash) \n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffectLinkedToNoteHash {\n fn empty() -> Self {\n SideEffectLinkedToNoteHash {\n value: 0,\n note_hash: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffectLinkedToNoteHash {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl SideEffectLinkedToNoteHash{\n pub fn serialize(self) -> [Field; 3] {\n [self.value, self.note_hash, self.counter]\n }\n\n pub fn deserialise(values: [Field; 3]) -> Self {\n Self {\n value: values[0],\n note_hash: values[1],\n counter: values[2],\n }\n }\n\n pub fn is_empty(self) -> bool {\n (self.value == 0)\n & (self.note_hash == 0)\n & (self.counter == 0)\n }\n}\n\n",
1046
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"
1047
+ },
1048
+ "139": {
1049
+ "source": "use crate::constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n};\nuse crate::{\n abis::{\n call_context::CallContext,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n block_header::BlockHeader,\n },\n address::AztecAddress,\n contrakt::{\n storage_read::StorageRead,\n storage_update_request::StorageUpdateRequest,\n },\n hash::{NUM_FIELDS_PER_SHA256},\n utils::bounded_vec::BoundedVec,\n};\n\nstruct PublicCircuitPublicInputs{\n call_context: CallContext,\n\n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n block_header: BlockHeader,\n\n prover_address: AztecAddress,\n}\n\nimpl PublicCircuitPublicInputs{\n fn hash(self) -> Field { \n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595) have mercy por favor \n let mut inputs: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0);\n inputs.push(self.call_context.hash());\n inputs.push(self.args_hash);\n inputs.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n inputs.push(self.contract_storage_update_requests[i].hash());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n inputs.push(self.contract_storage_reads[i].hash());\n }\n inputs.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n inputs.push(self.new_commitments[i].hash());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n inputs.push(self.new_nullifiers[i].hash());\n }\n inputs.push_array(self.new_l2_to_l1_msgs);\n inputs.push_array(self.unencrypted_logs_hash);\n inputs.push(self.unencrypted_log_preimages_length);\n inputs.push_array(self.block_header.serialize());\n inputs.push(self.prover_address.to_field());\n\n assert_eq(inputs.len(), PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PublicCircuitPublicInputs\");\n\n dep::std::hash::pedersen_hash_with_separator(inputs.storage, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n\n pub fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize()); \n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.push_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.push_array(self.contract_storage_reads[i].serialize());\n }\n fields.push_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n",
1050
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr"
1051
+ },
1052
+ "141": {
1053
+ "source": "use crate::{\n abis::{\n call_context::CallContext,\n block_header::BlockHeader,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash},\n },\n contrakt::deployment_data::ContractDeploymentData,\n hash::{\n NUM_FIELDS_PER_SHA256,\n pedersen_hash,\n },\n utils::bounded_vec::BoundedVec,\n};\nuse crate::constants::{\n MAX_READ_REQUESTS_PER_CALL,\n MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n RETURN_VALUES_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH,\n GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n};\nuse crate::traits::Hash;\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n \n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n read_requests: [SideEffect; MAX_READ_REQUESTS_PER_CALL],\n\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n end_side_effect_counter : Field,\n\n encrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n block_header: BlockHeader,\n\n contract_deployment_data: ContractDeploymentData,\n\n chain_id: Field,\n version: Field,\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH> = BoundedVec::new(0); \n fields.push(self.call_context.hash());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push(self.contract_deployment_data.hash());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH, \"Incorrect number of input fields when hashing PrivateCircuitPublicInputs\");\n\n pedersen_hash(fields.storage, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.push_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push_array(self.return_values);\n\n for i in 0..MAX_READ_REQUESTS_PER_CALL{\n fields.push_array(self.read_requests[i].serialize());\n }\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.push_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.push_array(self.new_nullifiers[i].serialize());\n }\n fields.push_array(self.private_call_stack_hashes);\n fields.push_array(self.public_call_stack_hashes);\n fields.push_array(self.new_l2_to_l1_msgs);\n fields.push(self.end_side_effect_counter);\n fields.push_array(self.encrypted_logs_hash);\n fields.push_array(self.unencrypted_logs_hash);\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.push_array(self.block_header.serialize());\n fields.push_array(self.contract_deployment_data.serialize());\n fields.push(self.chain_id);\n fields.push(self.version);\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\n#[test]\nfn serialization_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _serialized = pcpi.serialize();\n}\n\n#[test]\nfn hash_smoke() {\n let pcpi: PrivateCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _hashed = pcpi.hash();\n}\n",
1054
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/private_circuit_public_inputs.nr"
1055
+ },
1056
+ "144": {
1057
+ "source": "use crate::abis::function_selector::FunctionSelector;\nuse crate::constants::GENERATOR_INDEX__FUNCTION_DATA;\n\nstruct FunctionData {\n // First four bytes of the abi encoding \n // of a function. \n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n is_constructor : bool,\n}\n\nimpl FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.is_constructor as Field,\n ], GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n",
1058
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"
1059
+ },
1060
+ "147": {
1061
+ "source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{EthAddress,AztecAddress},\n constants::{\n CALL_CONTEXT_LENGTH,\n GENERATOR_INDEX__CALL_CONTEXT,\n },\n hash::pedersen_hash,\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::Hash;\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n portal_contract_address : EthAddress,\n\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n is_contract_deployment : bool,\n\n start_side_effect_counter : Field,\n}\n// docs:end:call-context\n\nimpl Eq for CallContext {\n fn eq(self, call_context: CallContext) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n call_context.msg_sender.eq(self.msg_sender)\n & call_context.storage_contract_address.eq(self.storage_contract_address)\n & call_context.portal_contract_address.eq(self.portal_contract_address)\n & call_context.function_selector.eq(self.function_selector)\n & (call_context.is_delegate_call == self.is_delegate_call)\n & (call_context.is_static_call == self.is_static_call)\n & (call_context.is_contract_deployment == self.is_contract_deployment)\n & (call_context.start_side_effect_counter == self.start_side_effect_counter)\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n [\n self.msg_sender.to_field(),\n self.storage_contract_address.to_field(),\n self.portal_contract_address.to_field(),\n self.function_selector.to_field(),\n self.is_delegate_call as Field,\n self.is_static_call as Field,\n self.is_contract_deployment as Field,\n self.start_side_effect_counter,\n ]\n }\n\n fn assert_is_zero(self) {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n assert(self.msg_sender.to_field() == 0);\n assert(self.storage_contract_address.to_field() == 0);\n assert(self.portal_contract_address.to_field() == 0);\n assert(self.function_selector.to_field() == 0);\n assert(self.is_delegate_call == false);\n assert(self.is_static_call == false);\n assert(self.is_contract_deployment == false);\n assert(self.start_side_effect_counter == 0);\n }\n}\n",
1062
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr"
1063
+ },
1064
+ "153": {
1065
+ "source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_u32(value: u32) -> Self {\n Self {\n inner : value,\n }\n }\n\n pub fn from_field(value : Field) -> Self {\n Self {\n inner : value as u32,\n }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n",
1066
+ "path": "/usr/src/yarn-project/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"
1067
+ },
1068
+ "179": {
1069
+ "source": "mod ecdsa_public_key_note;\n\n// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\ncontract EcdsaAccount {\n use dep::protocol_types::address::AztecAddress;\n use dep::std;\n use dep::std::option::Option;\n use dep::aztec::{\n abi::CallContext,\n context::{PrivateContext, PublicContext, Context},\n note::{\n note_header::NoteHeader,\n utils as note_utils,\n },\n oracle::get_public_key::get_public_key,\n state_vars::immutable_singleton::ImmutableSingleton,\n };\n use dep::authwit:: {\n entrypoint::{ EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE },\n account::AccountActions,\n auth_witness::get_auth_witness,\n };\n\n use crate::ecdsa_public_key_note::{\n EcdsaPublicKeyNote, EcdsaPublicKeyNoteInterface, ECDSA_PUBLIC_KEY_NOTE_LEN,\n };\n\n struct Storage {\n public_key: ImmutableSingleton<EcdsaPublicKeyNote, ECDSA_PUBLIC_KEY_NOTE_LEN>,\n }\n\n impl Storage {\n fn init(context: Context) -> Self {\n Storage {\n public_key: ImmutableSingleton::new(context, 1, EcdsaPublicKeyNoteInterface),\n }\n }\n }\n\n global ACCOUNT_ACTIONS_STORAGE_SLOT = 2;\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n fn constructor(signing_pub_key_x: pub [u8; 32], signing_pub_key_y: pub [u8; 32]) {\n let this = context.this_address();\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n storage.public_key.initialize(&mut pub_key_note, Option::none(), true);\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update default_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(payload: pub EntrypointPayload) {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.entrypoint(payload);\n }\n\n #[aztec(private)]\n fn is_valid(message_hash: Field) -> Field {\n let actions = AccountActions::private(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid(message_hash)\n }\n\n #[aztec(public)]\n fn is_valid_public(message_hash: Field) -> Field {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.is_valid_public(message_hash)\n }\n\n #[aztec(public)]\n internal fn set_is_valid_storage(message_hash: Field, value: bool) {\n let actions = AccountActions::public(&mut context, ACCOUNT_ACTIONS_STORAGE_SLOT, is_valid_impl);\n actions.internal_set_is_valid_storage(message_hash, value)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, message_field: Field) -> pub bool {\n // Load public key from storage\n let storage = Storage::init(Context::private(context));\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = get_auth_witness(message_field);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let hashed_message: [u8; 32] = std::hash::sha256(message_field.to_be_bytes(32));\n let verification = std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message);\n assert(verification == true);\n\n true\n }\n\n // Computes note hash and nullifier.\n // Note 1: Needs to be defined by every contract producing logs.\n // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes.\n unconstrained fn compute_note_hash_and_nullifier(\n contract_address: AztecAddress,\n nonce: Field,\n storage_slot: Field,\n serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]\n ) -> pub [Field; 4] {\n assert(storage_slot == 1);\n let note_header = NoteHeader::new(contract_address, nonce, storage_slot);\n note_utils::compute_note_hash_and_nullifier(EcdsaPublicKeyNoteInterface, note_header, serialized_note)\n }\n}\n",
1070
+ "path": "/usr/src/yarn-project/noir-contracts/contracts/ecdsa_account_contract/src/main.nr"
1071
+ },
1072
+ "180": {
1073
+ "source": "use dep::protocol_types::address::AztecAddress;\nuse dep::aztec::{\n note::{\n note_header::NoteHeader,\n note_interface::NoteInterface,\n utils::compute_unique_siloed_note_hash,\n },\n oracle::{\n get_secret_key::get_secret_key,\n get_public_key::get_public_key,\n },\n log::emit_encrypted_log,\n hash::pedersen_hash,\n context::PrivateContext,\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n owner: AztecAddress, // We store the owner address only to get the secret key to compute the nullifier\n header: NoteHeader,\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], owner: AztecAddress) -> Self {\n EcdsaPublicKeyNote {\n x,\n y,\n owner,\n header: NoteHeader::empty(),\n }\n }\n\n // serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = owner\n pub fn serialize(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n \n [x, last_x, y, last_y, self.owner.to_field()]\n }\n\n pub fn compute_nullifier(self) -> Field {\n let unique_siloed_note_hash = compute_unique_siloed_note_hash(EcdsaPublicKeyNoteInterface, self);\n let secret = get_secret_key(self.owner);\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash([\n unique_siloed_note_hash,\n secret.low,\n secret.high,\n ],0)\n }\n\n pub fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n // Broadcasts the note as an encrypted log on L1.\n pub fn broadcast(self, context: &mut PrivateContext, slot: Field) {\n let encryption_pub_key = get_public_key(self.owner);\n emit_encrypted_log(\n context,\n (*context).this_address(),\n slot,\n encryption_pub_key,\n self.serialize(),\n );\n }\n}\n\nfn deserialize(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x = serialized_note[0].to_be_bytes(32);\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes(32)[31];\n\n let part_y = serialized_note[2].to_be_bytes(32);\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes(32)[31];\n\n EcdsaPublicKeyNote { x, y, owner: AztecAddress::from_field(serialized_note[4]), header: NoteHeader::empty() }\n}\n\nfn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n note.serialize()\n}\n\nfn compute_note_hash(note: EcdsaPublicKeyNote) -> Field {\n // TODO(#1205) Should use a non-zero generator index.\n pedersen_hash(note.serialize(), 0)\n}\n\nfn compute_nullifier(note: EcdsaPublicKeyNote) -> Field {\n note.compute_nullifier()\n}\n\nfn get_header(note: EcdsaPublicKeyNote) -> NoteHeader {\n note.header\n}\n\nfn set_header(note: &mut EcdsaPublicKeyNote, header: NoteHeader) {\n note.set_header(header);\n}\n\n// Broadcasts the note as an encrypted log on L1.\nfn broadcast(context: &mut PrivateContext, slot: Field, note: EcdsaPublicKeyNote) {\n note.broadcast(context, slot);\n}\n\nglobal EcdsaPublicKeyNoteInterface = NoteInterface {\n deserialize,\n serialize,\n compute_note_hash,\n compute_nullifier,\n get_header,\n set_header,\n broadcast,\n};\n",
1074
+ "path": "/usr/src/yarn-project/noir-contracts/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr"
1075
+ },
1076
+ "181": {
1077
+ "source": "use dep::aztec::abi;\nuse dep::aztec::types::vec::BoundedVec;\nuse dep::aztec::context::PrivateContext;\nuse dep::protocol_types::{\n abis::{\n call_stack_item::{\n PrivateCallStackItem,\n PublicCallStackItem,\n },\n function_selector::FunctionSelector,\n },\n address::AztecAddress,\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::pedersen_hash,\n};\n\nglobal ACCOUNT_MAX_CALLS: Field = 4;\n// 1 (ARGS_HASH) + 1 (FUNCTION_SELECTOR) + 1 (TARGET_ADDRESS) + 1 (IS_PUBLIC)\nglobal FUNCTION_CALL_SIZE: Field = 4;\n// 3 * 32 + 1\nglobal FUNCTION_CALL_SIZE_IN_BYTES: Field = 97;\n\nstruct FunctionCall {\n args_hash: Field,\n function_selector: FunctionSelector,\n target_address: AztecAddress,\n is_public: bool,\n}\n\nimpl FunctionCall {\n fn serialize(self) -> [Field; FUNCTION_CALL_SIZE] {\n [self.args_hash, self.function_selector.to_field(), self.target_address.to_field(), self.is_public as Field]\n }\n\n fn to_be_bytes(self) -> [u8; FUNCTION_CALL_SIZE_IN_BYTES] {\n let mut bytes: [u8; FUNCTION_CALL_SIZE_IN_BYTES] = [0; FUNCTION_CALL_SIZE_IN_BYTES];\n let args_hash_bytes = self.args_hash.to_be_bytes(32);\n for i in 0..32 { bytes[i] = args_hash_bytes[i]; }\n let function_selector_bytes = self.function_selector.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 32] = function_selector_bytes[i]; }\n let target_address_bytes = self.target_address.to_field().to_be_bytes(32);\n for i in 0..32 { bytes[i + 64] = target_address_bytes[i]; }\n bytes[96] = self.is_public as u8;\n bytes\n }\n}\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal ENTRYPOINT_PAYLOAD_SIZE: Field = 17;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES: Field = 420;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:entrypoint-struct\nstruct EntrypointPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:entrypoint-struct\n\nimpl EntrypointPayload {\n fn hash(self) -> Field {\n pedersen_hash(\n self.serialize(), \n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; ENTRYPOINT_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, ENTRYPOINT_PAYLOAD_SIZE> = BoundedVec::new(0); \n for call in self.function_calls {\n fields.push_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: [u8; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES] = [0; ENTRYPOINT_PAYLOAD_SIZE_IN_BYTES];\n\n for i in 0..ACCOUNT_MAX_CALLS {\n let item_bytes = self.function_calls[i].to_be_bytes();\n for j in 0..FUNCTION_CALL_SIZE_IN_BYTES { \n bytes[i * FUNCTION_CALL_SIZE_IN_BYTES + j] = item_bytes[j];\n }\n }\n\n let nonce_bytes = self.nonce.to_be_bytes(32);\n let nonce_offset = FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS;\n for j in 0..32 {\n bytes[nonce_offset + j] = nonce_bytes[j];\n }\n \n bytes\n }\n\n // Executes all private and public calls \n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address, call.function_selector, call.args_hash\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n",
1078
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/entrypoint.nr"
1079
+ },
1080
+ "182": {
1081
+ "source": "use dep::aztec::context::{PrivateContext, PublicContext, Context};\nuse dep::aztec::state_vars::{map::Map, public_state::PublicState};\nuse dep::aztec::types::type_serialization::bool_serialization::{BoolSerializationMethods,BOOL_SERIALIZED_LEN};\n\nuse crate::entrypoint::EntrypointPayload;\nuse crate::auth::IS_VALID_SELECTOR;\n\nstruct AccountActions {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n approved_action: Map<PublicState<bool, BOOL_SERIALIZED_LEN>>,\n}\n\nimpl AccountActions {\n pub fn init(context: Context, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions {\n context: context,\n is_valid_impl: is_valid_impl,\n approved_action: Map::new(\n context,\n approved_action_storage_slot,\n |context, slot| {\n PublicState::new(context, slot, BoolSerializationMethods)\n },\n ),\n }\n }\n\n pub fn private(context: &mut PrivateContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::private(context), approved_action_storage_slot, is_valid_impl)\n }\n\n pub fn public(context: &mut PublicContext, approved_action_storage_slot: Field, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions::init(Context::public(context), approved_action_storage_slot, is_valid_impl)\n }\n \n // docs:start:entrypoint\n pub fn entrypoint(self, payload: EntrypointPayload) {\n let message_hash = payload.hash();\n let valid_fn = self.is_valid_impl;\n let private_context = self.context.private.unwrap();\n assert(valid_fn(private_context, message_hash));\n payload.execute_calls(private_context);\n }\n // docs:end:entrypoint\n\n pub fn is_valid(self, message_hash: Field) -> Field {\n let valid_fn = self.is_valid_impl;\n if (valid_fn(self.context.private.unwrap(), message_hash)) {\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn is_valid_public(self, message_hash: Field) -> Field {\n let value = self.approved_action.at(message_hash).read();\n if (value){\n IS_VALID_SELECTOR\n } else {\n 0\n }\n }\n\n pub fn internal_set_is_valid_storage(self, message_hash: Field, value: bool) {\n self.approved_action.at(message_hash).write(value);\n }\n}\n",
1082
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/account.nr"
1083
+ },
1084
+ "185": {
1085
+ "source": "#[oracle(getAuthWitness)]\nfn get_auth_witness_oracle<N>(_message_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn get_auth_witness<N>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n",
1086
+ "path": "/usr/src/yarn-project/aztec-nr/authwit/src/auth_witness.nr"
1087
+ }
1088
+ }
1089
+ }
1090
+ }