@aztec/accounts 0.66.0 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/EcdsaKAccount.json +297 -302
- package/artifacts/EcdsaRAccount.json +271 -276
- package/artifacts/SchnorrAccount.json +659 -672
- package/artifacts/SchnorrSingleKeyAccount.json +110 -110
- package/dest/testing/configuration.js +4 -4
- package/package.json +12 -8
- package/src/testing/configuration.ts +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.0+
|
|
3
|
+
"noir_version": "1.0.0-beta.0+b3f4ad661c8c6f88544d714fd5b7b6f58a8ce4ad-x8664",
|
|
4
4
|
"name": "SchnorrSingleKeyAccount",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
90
|
"bytecode": "H4sIAAAAAAAA/9VZ227aQBBdsI2xiQmFP4jUt1ayCdc3pF7yHSiBL+gH+KEv7VeXFTv2YTypkJipykjRGs/6zNkz4931pufONjz99cJ1HNqB6xr12YW2vM0qRazSkmfvTnj274RndCc8Y0WePYGnb+l9S9z5nUvd+X3sOPFhn+gI/O5vQCzo79Bmoe2DXzExVSYMVgt/Uy5eM3dpyvyfs4CZ2uAvCX9og18S7y91i49jobhRaF/qVssXeMZbEa6xiAmXfH3wfWW+CHzfmA9r+DvzYd0TJ9JtAGNRrKuNdV5obCmMrfdO61yrHd4jrXNnWqMV5TxjfDh/4lNQn7rlM2C+GHwZ8yXgI/19+wT9eO5T6PcZ7vOajFy3hslPOUetLWoqNsA/2ULSneckri9jow91j0HPJ6aPxVqB+ljo7/WZvcOfrr2ltWssYnqiRqTZEPszXwa+uL6Mk4ffMcRBLOKRsP6fwu/H0A7gGXp+IsQfsPgXvIV7qBHHioR71N+/kx/D9cid6+cn9XfdeUpvU71aSHO2Hv66wc9s+B8JP7fBXxH+yAa/2cs8mODPS8IvbPhvCX9sUz/NXvLRhv+B8Ccm+IsDrbsfXGvN/BCup3Bfb+6uqmv2RBg/Z1yt9kRTxofrg+uv980ErhPBx3M4E+LMhDgSVqaI9aCI9fifjnGoiDVSxBorYmnmMVXE0tQrV8QqFLE0615TL8qjtE/ztgtteaNJ+zRF/Erap2l+u5PWVF+xoCGOL2H9fzCdRyY8qzmtOfSuUwyMXRjFvna9pviFwId454LvlkPZw3Jz3G6W29OWrFrNt00+C8aV38NvIpyPsb+09kv7PkWtS+m7fwy6eovBVzBfAj7iKH33j434X6M/xp8IPr7+X5vLqeuuhyM2bjzj2qmMuT3/k87mjeev5bXvJsXPXXe+/lfni6gP30vnAteJ4OP7k1yIkwtx7hGLn9Gjhr6uSae4bv1auVxv2n9w0VyUuMtzf8fiJ6z/r/Abx0btLXP+cb2vjs/74365f3tbvO6nDN9bH3T6A/vRhmkVHwAA",
|
|
91
|
-
"debug_symbols": "tdfRioQgFAbgd/HaC49aZq+yLIOVDYJYWC0s0buvDbE77FwO/0104vQJ4o+cnQ2+2+63kMZpYe3HzuLUuzVMqVT7wVmXQ4zhfnv+zMT5sOrRv8wuneWyuryythac+
|
|
91
|
+
"debug_symbols": "tdfRioQgFAbgd/HaC49aZq+yLIOVDYJYWC0s0buvDbE77FwO/0104vQJ4o+cnQ2+2+63kMZpYe3HzuLUuzVMqVT7wVmXQ4zhfnv+zMT5sOrRv8wuneWyuryythac+TSUl6b8PYboWauVPvhLp5FXpzG/nZU8PjmzGiZXMLmGyQYmNzDZomQSAkcTjpY4WuFojaMrHF3jaIOjGxyNSyPh0ki4NBIujYRLI+HSSLg00ptptOrqLFv7Yhug3QBti7OlANoEtCXQVkBbA+0KaANzKYG5lMBcSlQuj1J9uRxcF/01WI1b6p/mrPV79v9GrjlPvR+27M/h62/uOs+y0lzrx9VeClKSkzJlkbLQDw==",
|
|
92
92
|
"brillig_names": [
|
|
93
93
|
"compute_note_hash_and_optionally_a_nullifier"
|
|
94
94
|
]
|
|
@@ -474,7 +474,7 @@
|
|
|
474
474
|
}
|
|
475
475
|
],
|
|
476
476
|
"kind": "struct",
|
|
477
|
-
"path": "authwit::aztec::protocol_types::
|
|
477
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
478
478
|
}
|
|
479
479
|
},
|
|
480
480
|
{
|
|
@@ -1573,7 +1573,7 @@
|
|
|
1573
1573
|
}
|
|
1574
1574
|
],
|
|
1575
1575
|
"kind": "struct",
|
|
1576
|
-
"path": "authwit::aztec::protocol_types::
|
|
1576
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
1577
1577
|
}
|
|
1578
1578
|
},
|
|
1579
1579
|
{
|
|
@@ -1684,8 +1684,8 @@
|
|
|
1684
1684
|
"visibility": "databus"
|
|
1685
1685
|
}
|
|
1686
1686
|
},
|
|
1687
|
-
"bytecode": "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",
|
|
1688
|
-
"debug_symbols": "
|
|
1687
|
+
"bytecode": "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",
|
|
1688
|
+
"debug_symbols": "7Z3bjt020oXfxde+EIvFU15lEAycxDMwYNhBDj/wI8i7z95tS3u3paG6hyXtctXKxSA9YdNVn6hSLUpe/OvNL+9/+vPf//zw6V+ff3/zwz/+evPx88/v/vjw+dPlp7/eBHr6/37/9d2n64+///Hutz/e/BBym96+ef/pl8u/lmn6++2bf334+P7NDxz577er0VRj/Tqaar6NDiVtjI4ptK+jY2q0M7q2kr6Orq22ZXQMYWN0KDXOcdfpNjflrcET5XnwdP3Db4N/fPsmRIDZBsMAsw0mAcw2mDwOhqc0B89TC8vo/OVPKIf/CfW1f8L1l9rWL7WJvv5Oi7S3HhrNg+PUyu2a8bQ1eip5WT5Tm/Ld+Li1IlKYr3FNadpZEZV4GU13gLZHxzSvCKapv3qI2ryMKYa9pRaXNR9irCPrkiZcHs2XJ+DyaL48hMvzkstTFohUeGew4EOXIi6P5svDuDyaL08avTwxpDJfntDizuUJU+M5mkD0bSNJWVc4RVc4VVc4TVU4cdIVTtAVDukKJ+oKh3WFo6sqR11VOeqqylFXVY66qjLrqsqsqyqzrqrMuqoy66rKrKsqs66qzLqqMuuqyqyrKiddVTnpqspJV1VOuqpy0lWVk66qnHRV5aSrKiddVTnpqspZV1XOuqpy1lWVs66qnHVV5ayrKmddVTnrqspZV1XOuqpy0VWVi66qXHRV5aKrKhddVbnoqspFV1Uuuqpy0VWVi66qXHVV5aqrKlddVbnqqspVV1Wuuqpy1VWVq66qXHVV5aqrKjddVbnpqspNV1VuuqpyO7sqh3gLp+z+hRWeB1Oud2O3/gIK0xIHU7nFEdrG4MTT/H1eYuL7wVcoCVDWUDKgrKEUQFlDqYCyhtIAZQUlTBOobFAJoLJBhUBlg0oElQ0qDCobVNDXblFBY7tFBZ3tFhW0tltU0NtuUAnobbeooLfdooLedosKetstKgwqG1TQ225RQW+7RQW97RYV9LZbVNDbblAh9LZbVNDbblFBb7tFBb3tFhUGlQ0q6G23qKC33aKC3naLip3eNk/zYM53Bmdzonba1X6i0U4HupOonaZyJ1E7fWK+mT3nsk7UTuu3kyh7SdROg7aTqJ2eaydRO23UTtX10hlFL50Re+mM2FBn1C1G7KUzYi+d0ekmew9L1EtnxF46IzbUGfUTNdQZ9RM11Bl1E02GOqN+ol72jJKhzqifqKHOqJ8oe0nUS2eUvHRGyUtnlLx0RslLZ5S9dEbZy55R9rJnlL3sGZ1uNvuwRA11Rt0WMBvqjPqJenmblr28TcteOqPipTMqXjqj4qUzKl46o9MNnx+WqJc9o+Jlz6h42TMqXvaMipfvjKqX74yql7dp1cvbtOqlMzrddP1hiXrpjKqXzqh66Yyql86oetkzal72jJqXPaPmZc+oefnOyNDBBzuJenmbZuiAgp1EvXRGhg4S2EnUSWdEhvz+dxJ10hmRIVf+nUSd7BnRxF4SdbJnRIYc7ncSdfKdERnyod9J1MnbNDLkFr+TqJfOyJCn+06iXjojQ87rO4l66YwM+aPvJOpkz4gMuZjvJOplz8iQ1/hOok6+MyJDjuA7iTp5m0aGfLt3EvXSGRly195J1EtnZMkDu5+ol87Ikgd2P1Eve0ZePLDJiwc2efHAJkse2N0W0JIHdj9RL2/TvHhgkyUP7G4xsuSB3U/US2fkxQObvHhgkxcPbPLigU1ePLDJiwc2efHAJkse2N0W0JIHdj9RL2/TvHhgkyUP7G4xsuSB3U/US2fkxQObvHhgkxcPbPLigU1ePLDJiwc2efHAJkse2N0W0JIHdj9RL2/TvHhgkyUP7H4x8tIZefHAJi8e2OTFA5u8eGCTFw9s8uKBTV48sMmLBzZZ8sDutoCWPLD7iXp5m+bFA5sseWB3i5ElD+x+ol46Iy8e2OTFA5u8eGCTFw9s8uKBTV48sMmLBzZZ8sDutoCWPLD7iXp5m+bFA5sseWD3i5GXzsiLBzZ58cAmLx7Y0YsHdvTigR29eGBHLx7YcWIviTr5ziha8sDuJ+rkbVr04oEdLXlgd4uRJQ/sfqJeOiMvHtjRiwd29OKBHb14YEcvHtjRiwd29OKBHS15YHdbQEse2P1EnbxNi148sKMlD+xuMbLkgd1P1Etn5MUDO3rxwI5ePLCjFw/s6MUDO3rxwI5ePLCjJQ/sbgtoyQO7n6iXt2lePLCjJQ/sfjHy0hl58cCOXjywoxcP7OjFAzt68cCOXjywoxcP7OjFAzta8sDutoCWPLD7iXp5m+bFAzta8sDuFiNLHtj9RL10Rl48sKMXD+zoxQM7evHAjl48sKMXD+zoxQM7WvLA7raAljyw+4l6eZvmxQM7WvLA7hcjL52RFw/s6MUDO3rxwI5ePLCjFw/s6MUDO3rxwI5ePLCjJQ/sbgtoyQO7n6iXt2lePLCjJQ/sbjGy5IHdT9RLZ+TFAzt68cCOXjywoxcP7OjFAzt68cCOXjywoyUP7G4LaMkDu5+ol7dpXjywoyUP7G4xsuSB3U/US2fkxQM7evHAjl48sKMXD2z24oHNXjyw2YsHNlvywO61gDyxl0SdvE1jLx7YbMkDu1+MnHRG7MUDm714YLMXD2z24oHNXjyw2YsHNnvxwGYvHthsyQO72wJa8sDuJ+rkbRp78cBmSx7Y3WJkyQO7n6iXzsiLBzZ78cBmLx7Y7MUDm714YLMXD2z24oHNljywuy2gJQ/sfqJe3qZ58cBmSx7Y/WLkpTPy4oHNXjyw2YsHNnvxwGYvHtjsxQObvXhgsxcPbLbkgd1tAS15YPcT9fI2zYsHNlvywO4WI0se2P1EvXRGXjyw2YsHNnvxwGYvHtjsxQObvXhgsxcPbLbkgd1tAS15YPcT9fI2zYsHNlvywO4WI0se2P1EvXRGXjyw2YsHNnvxwGYvHtjsxQObvXhgsxcPbLbkgd1tAS15YPcT9fI2zYsHNlvywO4XIy+dkRcPbPbigc1ePLDZiwc2e/HAZi8e2OzFA5u9eGCzJQ/sbgtoyQO7n6iXt2lePLDZkgd2txhZ8sDuJ+qlM/Ligc1ePLDZiwc2e/HAZi8e2OzFAzt58cBOljywey1gsuSB3U/Uydu0NLGXRJ10RsmSB3Y/USedUfLigZ28eGAnLx7YyYsHdvLigZ28eGAnLx7YyZIHdrcFtOSB3U/Uydu05MUDO1nywO4WI0se2P1EvXRGXjywkxcP7OTFAzt58cBOXjywkxcP7OTFAztZ8sDutoCWPLD7iXp5m2bJA7t7j3rxwE5ePLCTJQ/sfqJeOiNLHtj9K+plz8iSB3Y3UUse2P1EvewZefHATl48sJMXD+xkyQO7n6iXzsiSB3Y/US97RoY8sEsNc6Klxm8T1e2BnaZ56lR5J9FAtc0zxxjuRtOXTFW3Rq/LNNVbpnmdqere6FWZXlKaZ2ZO60xVN0eimbKbTFW3R6KZqu6PRDNV3SCJZqq6Q3pdpmlaMs1xnanqFkkyU91u2KKZ2umR9jI11CPtZGqoR9rJlA09ZcItU15naqhHKotq40brTA31SDuZGuqRdjI11CPtZGqoR+pnqtsXWzRTQz1SmweHFKZ1poZ6pJ1MDfVIO5mym0wN9Ug7mRrqkXYytdQj1Vum67cVuv2xX5Xp5WXaPHMOz1XbxqutaXldReGbtzgbOZa85Fjv5g7lC0Q77dfjIOr29f5eINppGh8I0U4/+kCIdlrdIyHWNo+ObQMiA+I4RDsN+gMh2un9HwjRjqx4IEQoFgGIUCzjEHX77X8vEKFYBCB6VSxEC0TKbWf0ZS8s3fbCbnNT2Lw+YZl6irU/OFLMMz0q7X7w0+XxqoW0XJ64fMgeY8ury8O4PJrvHq/67Tu5e7wqw+/k7vGqOb+Tu8ermj3w8kSaX3lSLHVF3Kv0pZYWLDTtjGZacmQqz/4630bQPM0lKDHx/eAL8az79BWTxL2K6scRd6vAH0bcrah+GHEG8ZOJu5W+DyPuVs0+jLhbgfow4m4158OIQ3OeTFz3uVYmiUNznk0cmvNs4tCcZxNnED+ZODTn2cShOc8mDs15NnFozrOJQ3OeTFz3iYEmiUNznk0cmvNs4tCcZxNnED+ZODTn2cShOc8mDs15NnFozrOJQ3OeTFz3WawmiUNznk0cmvNs4tCcLyHePSMx6z6C93uBCGUoABFiTwAi9NuLIPbOu8u6jzz+XiBCZY1D1H1U8/cCEVpIACLkzfjTWffx1d8LRAbEcYhQLAIQoVgEHixQLAIQoVgEIEKxjEM0dIT6AyFCsQhAhGIRgAjFIgCRAXEcIhSLAEQolnHZl6BYBCBCsQhAhGIZh5ihWMYfLBmKRQAiFIsARCgWAYgMiOMQoVgEIEKxCECEYhGACMUiABGKZRxigWIZl30FikUAIhSLAEQoFgGIDIjjDxYoFgGIUCwCEKFYBCBCsQhAhGIZh1ihWAQgQrEIQIRiEYAIxSIAkQFxWPZVKBYBiFAsAhChWAQgQrEIPFigWMYhNigWAYhQLAIQoVgEIEKxCEBkQByHCMUiABGKRQAiFIsARCiWcdnXoFiGIZYJikUAIhSLAEQoluEHS5mgWAQgMiCOQ4RiEYAIxSIAEYpFACIUiwBEKJZxiAGKRQAiFIsARCiWcdkXoFgEIDIgjkOEYhGACMUi8GCBYhGACMUiABGKZRwiQbEIQIRiEYAIxSIAEYpFACID4jhEKBYBiFAs47KPoFgEIEKxCECEYhmHGKFYxh8sEYpFACIUiwBEKBYBiAyI4xChWAQgQrEIQIRiEYAIxSIAEYplHCLOvBeQfTjzXgIiFIsARCgWAYgMiOMPFigWAYhQLAIQoVgEIEKxCECEYhmHiDPvJSBCsQhAhGIRgAjFIgCRAXFY9uHMewmIUCwCEKFYBCBCsQg8WKBYxiHizHsJiFAsAhChWAQgQrEIQGRAHIcIxSIAEYpFACIUiwBEKJZx2Ycz7wUg4sx7CYhQLAIQoVjGHyw4814CIgPiOEQoFgGIUCwCEKFYBCBCsQhAhGIZh4gz7yUgQrEIQIRiGZd9OPNeAiID4jhEKBYBiFAsAg8WKBYBiFAsAhChWMYh4sx7CYhQLAIQoVgEIEKxCEBkQByHCMUiABGKZVz24cx7CYhQLAIQoViGIVaceT/+YKk4814CIhSLAEQoFgGIDIjjEKFYBCBCsQhAhGIRgAjFIgARimUcIs68F5B9OPNeAiIUiwBEKBYBiAyI4w8WKBYBiFAsAhChWAQgQrEIQIRiGYeIM+8lIEKxCECEYhGACMUiAJEBcVj24cx7CYhQLAIQoVgEIEKxCDxYoFjGIeLMewmIUCwCEKFYBCBCsQhAZEAchwjFIgARikUAIhSLAEQolnHZhzPvBSDizHsJiFAsAhChWMYfLDjzXgIiA+I4RCgWAYhQLAIQoVgEIEKxCECEYhmHiDPvJSBCsQhAhGIZl304814CIgPiOEQoFgGIUCwCDxYoFgGIUCwCEKFYxiHizHsJiFAsAhChWAQgQrEIQGRAHIcIxSIAEYplXPbhzHsJiFAsAhChWMYh4sx7gQcLzryXgAjFIgARikUAIgPiOEQoFgGIUCwCEKFYBCBCsQhAhGIZh4gz7wVkH868l4AIxSIAEYpFACID4viDBYpFACIUiwBEKBYBiFAsAhChWMYh4sx7CYhQLAIQoVgEIEKxCEBkQByWfTjzXgIiFIsARCgWAYhQLAIPFiiWYYgNZ95LQIRiEYAIxSIAEYpFACID4jhEKBYBiFAsAhChWAQgQrEMy76GM+8FIOLMewmIUCwCEKFYxh8sOPNeAiID4jhEKBYBiFAsAhChWAQgQrEIQIRiGYeIM+8lIEKxCECEYhmXfTjzXgIiA+I4RCgWAYhQLAIPFigWAYhQLAIQoVjGIeLMewmIUCwCEKFYBCBCsQhAZEAchwjFIgARimVc9uHMewmIUCwCEKFYxiHizHuBBwvOvJeACMUiABGKRQAiA+I4RCgWAYhQLAIQoVgEIEKxCECEYhmHiDPvBWQfzryXgAjFIgARikUAIgPi+IMFikUAIhSLAEQoFgGIUCwCEKFYxiHizHsJiFAsAhChWAQgQrEIQGRAHJZ9OPNeAiIUiwBEKBYBiFAsAg8WKJZxiDjzXgIiFIsARCgWAYhQLAIQGRDHIUKxCECEYhGACMUiABGKZVz24cx7AYg4814CIhSLAEQolvEHC868l4DIgDgOEYpFACIUiwBEKBYBiFAsAhChWMYh4sx7CYhQLAIQoVjGZR/OvJeAyIA4DhGKRQAiFIvAgwWKRQAiFIsARCiWYYhhwqH3IhShWSQoQrRIUIRqkaDIoChAEbpFgiKEy7D6u1CEcpGgCOkiQRHaRYBigHYReLoEaBcJitAuEhShXSQoMigKUIR2kaAI7SJBEdpFgiK0iwRFaBcBigTtIqAACdpFgiK0iwRFaBcJigyKAk8XaBcJitAuEhShXSQoQrtIUIR2EaAYoV0kKEK7SFCEdpGgCO0iQZFBcVwBRmgXCYrQLhIUoV0k6iK0i8RahHYRoMjQLhIUoV0E6iJDu0isRWgXCYoMigIUoV0kKEK7SDxdoF0kKEK7SFCEdhGgmKBdJChCu0hQhHaRoAjtIkGRQfEFFEsNM8VS45qiV+1ym5oS5Wejv4CxI0cylQUMh41U7WiGXKd55hKmjVTtNPa7qdrpvvdSNXQu+26qdvrY3VTtNJu7qdrpCHdTZT+p2umtdlM11C3tpeqnWzJ0jvVuqn66JUNnQu+m6qdbMnS+8m6qfrolQ2cV76bqp1sydO7vbqp+uiVDZ+jupuqnWzJ0Hu1uqn66JUNnu+6m6qdbMnRO6m6qfrolQ2eO7qbqp1sydH7nbqq6u6U2fyCQU9hJleryTQbVchsdSt6KeiJaouZ6izpsRV1TiF9HX/6U6W502BpNvIymFnZGx5S/Dua7LyZoK2iiNn9GQDFQf3C4XI2ZdIx1Z/BEcxRXtXs/+GmZKD9HFMtEyTLR3aVjmShZJroVDpaJkmWiWx1imShZJoxlgmWyv0x070pgmShZJrp3dLBMlCwT3bthWCZKlonunUQsEyXLBLuwWCa7yyQoPxody0TJMsEuLJbJC5YJdmGxTF6wTLALi2XygmXCWCbfzzIpy8WkwjuDQ6lzFKFONLhMsAuLZfKCZWJnF/YWdJxy3FkmuPB29lVx4V914e3slOLCv+rCm9n7vFyE2zM+5Z0LT7x4QhHXcjd6K+haF4htultT9QvEYGZn8EiIbenYQiv1HuJ6MOcZB7eVNdnlH/De5U3TNMdBE/EQbzN7VUfyDsujhEJs6yJhZifnSIiX0fNgqrG/aEOsi30dT2lNnEH8ZOJm9hfUEE9xafbSfRz/QxU3o+otXhwzylvPxSlLv5naWL9pRh1bvDh2FOzU+HZxys7FYV4uJV/+6V+cWBaGsYb7XZEvEMmOgj0QYl3iiG0Loh1Z+kCIdrTmAyHa0ZoPhMiAOA7RjiJ8IEQ7yu2BEO0orAdCtKOEHggRimUcYrSpWPLep0zXI6vnOKZnHz5thRGWqRMFXkO0qVhOhmhTsZwM0aZiORkiA+I+ROK8QMx5DdGmYjkZok3FcjJEm4rlZIg2FYswxFzmOFIJO515yXEmXnLd6MxtyhvFxBla6AXEa1iI10SDxCGcxIm3mUcpIayJQ2WdTfxsSXbjcn0N+GzuLwGxtoDwcuMlG3nLX5qI9dnUXyHi5YYARFGpQFN4BvHLH7HZSIfcbhbn0x7NcnkzPZeckG6f/eS8ib7O6OMNT61//3j54affPnz8+OHf//z4+ed3f3z4/On36y9O1//Z3o4rdZ6sPkOxeWXKoijC/Wp6Mm3f3qiSm56PnT4dO30+dvpy7PT1ddNff6W9+le2m/X+r2x2mzUuv1LCTt5xyTuWspqejp0+Hjs9Hzt9Onb6fOz05djp67HTt0OnT9Ox0x9716Zj79p07F2bjr1r07F3bTr2rk3H3rXp2Ls2D7Pnae6jecqr6YejT7yI5Fz2Qlmey+kulHCRy9dQmppQyqQnlKAnFNITStQTCusJJekJJesJpegJRU+1LXqqbdVTbauealv1VNuqp9pWPdW26qm29dS6kmj5biqGb0Npp95Biec92XRnRDeHMn4HheV4ylz3uvjW4tJn312iqyveNZioKRjWFEw6MxieYliCuXtRMAeTNQVTNAVTzw2mtCWYRqtgmqJg/ouX/cOiCaqioUdFE6ZpHU1UFQ2riubcOkxhnpgphnU0WVU0RVU0VVU059ZiujOCzG0VTZhURRNURUOqojm3FsfbNngMZR0Nq4omqYomq4qmPCwaSutoqqpomqZo6NxazMtXXcwpr6MJqqIhVdFEVdGcW4u5LrqXG6+jSaqiyaqiKaqiObcWJ1r01GUfch1N0xRNnFRFE1RFQw+LJq11eIyqomFV0Zxbi3NeFEwuawUTs6poiqpoqqpozq3F5dYXl1BX0fCkKpqgKhpSFc25tbikpS8uea18mVVFk1RFk1VFUx4WTVnrcK6qommaokkH1uKn+cPB89PB88eD5x+uaXmx1c6predPB8+fD56/HDv/uZ+vdj8dCud+v5rSbWxex5IVxVIUxVIVxdL0xHLuR6w7sQRFsZz6GWv3e8Bw7nesO7GwoliSoliyoliKoliqolianljapCgWPd8+h6ao7jZFdbcpqrtNUd1tiupu01N3afzb3u7fv6Xxr3XvXqbntJ6fDp4/Hjw/Hzz/+N+vjrdXDxvXNx88fzl4/nrw/O3Y+ce/B92ZPxw8PwnOX2g9fzx4fj54/vH7l5aPSmJcz58Pnr8cPH89eP527Pzj3xDuzB8Onp8Onj8ePD8fPP/B9y8dfP/SwfcvHXz/0sH3bzzy/r38FK4jtx8yYVr8W8MUn52vvf5Tbh8ClED3Q6+CJB07fR6ffjk6uXD7dvoiMP0skUqO305fj52+jU9f5xdgpZVvpt9+vMhNH4anrzS3P5W/XTnbD5dXTj8fHVyfn7n9dPOOT1/mS1vXcFhw+vbNbXX5gTqlISxmrpd/rS+7YwIvpyyHnHcCm9Ls5Fqn8vyc5csP8Tp0+1OnQsvNcPcBZH0KbPtzpO5v8Kt/I736N/LrfuPvy0//9+63D+9++vj+6jR7/Y9/fvp5Np69/PjH//86/5fZmvbX3z7//P6XP397fzWpvfnTXm9fSvEtFf7xCes/6FIKieP1Mj79R+bLj+36Y3gaO72lRLcnx9OY8jbSbcV8mfNtnJYrdZ03Tm95mmfl+jbFSyKXZP4D",
|
|
1689
1689
|
"brillig_names": [
|
|
1690
1690
|
"get_auth_witness",
|
|
1691
1691
|
"decompose_hint",
|
|
@@ -1695,8 +1695,28 @@
|
|
|
1695
1695
|
"directive_invert",
|
|
1696
1696
|
"directive_integer_quotient"
|
|
1697
1697
|
],
|
|
1698
|
-
"verification_key": "
|
|
1699
|
-
"artifact_hash": "
|
|
1698
|
+
"verification_key": "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",
|
|
1699
|
+
"artifact_hash": "ff6671ddb572df3d961df43ed4c3adf75a7d3763-6e546195386f377a0e79408c93f24148-client-ivc-true"
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
"name": "sync_notes",
|
|
1703
|
+
"is_unconstrained": true,
|
|
1704
|
+
"custom_attributes": [],
|
|
1705
|
+
"abi": {
|
|
1706
|
+
"error_types": {
|
|
1707
|
+
"17843811134343075018": {
|
|
1708
|
+
"error_kind": "string",
|
|
1709
|
+
"string": "Stack too deep"
|
|
1710
|
+
}
|
|
1711
|
+
},
|
|
1712
|
+
"parameters": [],
|
|
1713
|
+
"return_type": null
|
|
1714
|
+
},
|
|
1715
|
+
"bytecode": "H4sIAAAAAAAA/9VUyw6CMBBseURBOaiJ3kz8gyIYOJJ49x8akKMe8OKNT5eabbqpVRKlJkzSbEs3szNlW0oUKESPvAH9tGnIFdhBDCA6aN/tRgFr9hviQKs7JH/O0iQw+BtQ/5OfWtIvIPktnT+bAM+xVfzYi6w77UaIesKWZ/nPbHpe9fhc/MFnh32k1caghm+uIYci3RuYR4Y8iRlRd9prh/eV5YzJei7w++RVO67va/lrWIeafvmOFV/qrDMe1wmv+YFXVVrypcYv4KBzGnMvbGHe1wvY45yo3mjul/J0vZ0b0gNB8gCVxsvQjgYAAA==",
|
|
1716
|
+
"debug_symbols": "ndLNCoQgEAfwd5lzh/yq7FViCSsLQTTMFpbo3deiXdqli10GR/yNh/kv0MlmHmplejtBWS2gbSu8siZ0y5pA45TWaqjP15BuBaH9/TQKs7WTF85DmaUJSNOFQxF0r7SEkhK6PhJAOBaQWEBjAYsE+PIHTnh2EE4x+SKOdsNumOyGyW+YIt6Qy8VzWrCPYSn9MWvonsIp0Wh55KqfTXuKmX+N8i9xo7Ot7GYnt+ydYhdqhfIE4zA2jH4D",
|
|
1717
|
+
"brillig_names": [
|
|
1718
|
+
"sync_notes"
|
|
1719
|
+
]
|
|
1700
1720
|
},
|
|
1701
1721
|
{
|
|
1702
1722
|
"name": "entrypoint",
|
|
@@ -2074,7 +2094,7 @@
|
|
|
2074
2094
|
}
|
|
2075
2095
|
],
|
|
2076
2096
|
"kind": "struct",
|
|
2077
|
-
"path": "authwit::aztec::protocol_types::
|
|
2097
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
2078
2098
|
}
|
|
2079
2099
|
},
|
|
2080
2100
|
{
|
|
@@ -3337,7 +3357,7 @@
|
|
|
3337
3357
|
}
|
|
3338
3358
|
],
|
|
3339
3359
|
"kind": "struct",
|
|
3340
|
-
"path": "authwit::aztec::protocol_types::
|
|
3360
|
+
"path": "authwit::aztec::protocol_types::block_header::BlockHeader"
|
|
3341
3361
|
}
|
|
3342
3362
|
},
|
|
3343
3363
|
{
|
|
@@ -3448,8 +3468,8 @@
|
|
|
3448
3468
|
"visibility": "databus"
|
|
3449
3469
|
}
|
|
3450
3470
|
},
|
|
3451
|
-
"bytecode": "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",
|
|
3452
|
-
"debug_symbols": "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kBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhBeSFF5AXXkBeeAF54QXkhReQF15AXngBeeEF5IUXkBdeQF54AXnhFeSFV5AXXkFeeAV54XWroF45uamCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywgXkhQvICxeQFy4gL1y2CuqVk5sE5IULyAsXkBcuIC9cQF64gLxwAXnhAvLCBeSFC8gLF5AXLiAvXEBeuIC8cAF54QLywgXkhQvICxeQFy4gL1xAXriAvHABeeEC8sIF5IULyAsXkBcuIC9cQF64gLxwAXnhAvLCBeSFC8gLF5AXLiAvXEBeuIC8cAF54QLywgXkhQvICxeQFy4gL1xAXriAvHABeeEC8sIF5IULyAsXkBcuIC9cQF64gLxwAXnhAvLCBeSFC8gLF5AXLiAvXEBeuIC8cAF54QLywgXkhQvICxeQFy4gL1xAXriAvHABeeEC8sIF5IULyAsXkBcuL/fCS71cOpe99no9fi8hl4sf95b0udcf9efg9Rff9bc9X+u3XDrf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",
|
|
3471
|
+
"bytecode": "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",
|
|
3472
|
+
"debug_symbols": "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vPBOr5zcpHN54Z1eOblJtwLqlZObdC4vvNMrJzfpXF54p1dQbprLC+/0CspNIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF24gL9xAXriBvHADeeG2FVCvnNxkIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IVXkBdeQV54BXnhFeSF162AeuXkpgrywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK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FZSb5vLCO72CctNcXninV1BumssL7/QKyk1zeeGdXkG5aS4vvNMrKDfN5YV3egXlprm88E6voNw0lxfe6RWUm+bywju9gnLTXF54p1dQbgJ54QXkhReQF15AXngBeeEF5IUXkBdeQF64grxwBXnhCvLCFeSF61ZAvXJyk4K8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXriAvXEFeuIK8cAV54QrywhXkhSvIC1eQF64gL1xBXriCvHAFeeEK8sIV5IUryAtXkBeuIC9cQV64grxwBXnhCvLCFeSFK8gLV5AXbiAv3EBeuIG8cAN54bYVUK+c3GQgL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khRvICzeQF24gL9xAXriBvHADeeEG8sIN5IUbyAs3kBduIC/cQF64gbxwA3nhBvLCDeSFG8gLN5AXbiAv3EBeuIG8cAN54Qbywg3khVeQF15BXngFeeEV5IXXrYB65eSmCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuv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ryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwCvLCK8gLryAvvIK88ArywivIC68gL7yCvPAK8sIryAuvIC+8grzwBvLCG8gLbyAvvIG88LYVUK+c3NRAXngDeeEN5IU3kBfeQF54A3nhDeSFN5AX3kBeeAN54Q3khTeQF95AXngDeeEN5IU3kBfeQF54A3nhDeSFN5AX3kBeeAN54Q3khTeQF95AXngDeeEN5IU3kBfeQF54A3nhDeSFN5AX3kBeeAN54Q3khTeQF95AXngDeeEN5IU3kBfeQF54A3nhDeSFN5AX3kBeeAN54e3pXngu1+LzXjq9iu4tXx7cZN/f9/qj/hy8/uK6fktpu9afVDqvtSbX19rxbvzNa01BvRqo1wrqtYF63Tm9Pt31fmWvMlWvlq91t5t8Y77zzdhefWehsb0WUK9z5abzXufKTee9zpWbznudKzed9zpXbjrttc6Vm857BeWmCspNFZSbnu56v7JXUG6qoNxUQbmpgnJTBeWmBspNDZSbGig3NVBuerrr/cpeQbmpgXJTA+WmBspNDZSbdlBu2kG5aQflph2Um57uer+yV1Bu2kG5aQflph2Um3ZObto3Tm7aN05u2jdObto3Tm7atwLqlZOb9o2Tm/aNk5v2jZOb9g2UmwSUmwSUmwSUmwSUm57uer+yV1BuElBuElBuElBuElBuSqDclEC5KYFyUwLlpqe73q/sFZSbEig3JVBuSqDclEC5KYNyUwblpgzKTRmUm57uer+yV1BuyqDclEG5KYNyUwblpgLKTQWUmwooNxVQbnq66/3KXkG5qYByUwHlpgLKTcV3bqr5Wsnxv3d93+v3+tV3FurX7zvf9Ov3nVn69fvOIf36S/D6feeFfv2+M0C/ft/ner9+32d1v/7g569zS7pff/Dz17n53K8/+Pnr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",
|
|
3453
3473
|
"brillig_names": [
|
|
3454
3474
|
"get_auth_witness",
|
|
3455
3475
|
"decompose_hint",
|
|
@@ -3462,34 +3482,41 @@
|
|
|
3462
3482
|
"directive_invert",
|
|
3463
3483
|
"directive_integer_quotient"
|
|
3464
3484
|
],
|
|
3465
|
-
"verification_key": "
|
|
3466
|
-
"artifact_hash": "
|
|
3467
|
-
},
|
|
3468
|
-
{
|
|
3469
|
-
"name": "sync_notes",
|
|
3470
|
-
"is_unconstrained": true,
|
|
3471
|
-
"custom_attributes": [],
|
|
3472
|
-
"abi": {
|
|
3473
|
-
"error_types": {
|
|
3474
|
-
"17843811134343075018": {
|
|
3475
|
-
"error_kind": "string",
|
|
3476
|
-
"string": "Stack too deep"
|
|
3477
|
-
}
|
|
3478
|
-
},
|
|
3479
|
-
"parameters": [],
|
|
3480
|
-
"return_type": null
|
|
3481
|
-
},
|
|
3482
|
-
"bytecode": "H4sIAAAAAAAA/9VUyw6CMBBseURBOaiJ3kz8gyIYOJJ49x8akKMe8OKNT5eabbqpVRKlJkzSbEs3szNlW0oUKESPvAH9tGnIFdhBDCA6aN/tRgFr9hviQKs7JH/O0iQw+BtQ/5OfWtIvIPktnT+bAM+xVfzYi6w77UaIesKWZ/nPbHpe9fhc/MFnh32k1caghm+uIYci3RuYR4Y8iRlRd9prh/eV5YzJei7w++RVO67va/lrWIeafvmOFV/qrDMe1wmv+YFXVVrypcYv4KBzGnMvbGHe1wvY45yo3mjul/J0vZ0b0gNB8gCVxsvQjgYAAA==",
|
|
3483
|
-
"debug_symbols": "ndLBCoQgEAbgd5lzh7TM7FViCSsLQTTMFpbo3dd2t6VduuhlcMRvPMy/Qi/aZWykHswMVb2CMh130mjfrVsCrZVKybE5X0O6F4Re7+eJ672dHbcOqiJNQOjeH0qvB6kEVHmGt1sCCIeCLBTkoYAEAnz5A8vJQVhO6Rch9EYkBhUxiMagMgJll9tnJGMHIqT8RZtv79xK3irxSdew6O4UNveYxF/uJms60S9W7Ak8hc/XGtEEYz/Wj34C",
|
|
3484
|
-
"brillig_names": [
|
|
3485
|
-
"sync_notes"
|
|
3486
|
-
]
|
|
3485
|
+
"verification_key": "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",
|
|
3486
|
+
"artifact_hash": "ff6671ddb572df3d961df43ed4c3adf75a7d3763-8cb9b5d75fb0c03d02ef0128073ac4df-client-ivc-true"
|
|
3487
3487
|
}
|
|
3488
3488
|
],
|
|
3489
3489
|
"outputs": {
|
|
3490
3490
|
"globals": {},
|
|
3491
3491
|
"structs": {
|
|
3492
3492
|
"functions": [
|
|
3493
|
+
{
|
|
3494
|
+
"fields": [
|
|
3495
|
+
{
|
|
3496
|
+
"name": "parameters",
|
|
3497
|
+
"type": {
|
|
3498
|
+
"fields": [
|
|
3499
|
+
{
|
|
3500
|
+
"name": "inner_hash",
|
|
3501
|
+
"type": {
|
|
3502
|
+
"kind": "field"
|
|
3503
|
+
}
|
|
3504
|
+
}
|
|
3505
|
+
],
|
|
3506
|
+
"kind": "struct",
|
|
3507
|
+
"path": "SchnorrSingleKeyAccount::verify_private_authwit_parameters"
|
|
3508
|
+
}
|
|
3509
|
+
},
|
|
3510
|
+
{
|
|
3511
|
+
"name": "return_type",
|
|
3512
|
+
"type": {
|
|
3513
|
+
"kind": "field"
|
|
3514
|
+
}
|
|
3515
|
+
}
|
|
3516
|
+
],
|
|
3517
|
+
"kind": "struct",
|
|
3518
|
+
"path": "SchnorrSingleKeyAccount::verify_private_authwit_abi"
|
|
3519
|
+
},
|
|
3493
3520
|
{
|
|
3494
3521
|
"fields": [
|
|
3495
3522
|
{
|
|
@@ -3672,33 +3699,6 @@
|
|
|
3672
3699
|
],
|
|
3673
3700
|
"kind": "struct",
|
|
3674
3701
|
"path": "SchnorrSingleKeyAccount::entrypoint_abi"
|
|
3675
|
-
},
|
|
3676
|
-
{
|
|
3677
|
-
"fields": [
|
|
3678
|
-
{
|
|
3679
|
-
"name": "parameters",
|
|
3680
|
-
"type": {
|
|
3681
|
-
"fields": [
|
|
3682
|
-
{
|
|
3683
|
-
"name": "inner_hash",
|
|
3684
|
-
"type": {
|
|
3685
|
-
"kind": "field"
|
|
3686
|
-
}
|
|
3687
|
-
}
|
|
3688
|
-
],
|
|
3689
|
-
"kind": "struct",
|
|
3690
|
-
"path": "SchnorrSingleKeyAccount::verify_private_authwit_parameters"
|
|
3691
|
-
}
|
|
3692
|
-
},
|
|
3693
|
-
{
|
|
3694
|
-
"name": "return_type",
|
|
3695
|
-
"type": {
|
|
3696
|
-
"kind": "field"
|
|
3697
|
-
}
|
|
3698
|
-
}
|
|
3699
|
-
],
|
|
3700
|
-
"kind": "struct",
|
|
3701
|
-
"path": "SchnorrSingleKeyAccount::verify_private_authwit_abi"
|
|
3702
3702
|
}
|
|
3703
3703
|
]
|
|
3704
3704
|
}
|
|
@@ -3728,93 +3728,93 @@
|
|
|
3728
3728
|
"path": "std/hash/poseidon2.nr",
|
|
3729
3729
|
"source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
|
|
3730
3730
|
},
|
|
3731
|
-
"
|
|
3731
|
+
"52": {
|
|
3732
3732
|
"path": "std/panic.nr",
|
|
3733
3733
|
"source": "pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"
|
|
3734
3734
|
},
|
|
3735
|
-
"
|
|
3735
|
+
"66": {
|
|
3736
3736
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
|
|
3737
|
-
"source": "use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n header::get_header_at,\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n header::Header,\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: Header,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
3737
|
+
"source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
3738
3738
|
},
|
|
3739
|
-
"
|
|
3740
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
3741
|
-
"source": "use dep::protocol_types::{
|
|
3742
|
-
},
|
|
3743
|
-
"112": {
|
|
3744
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr",
|
|
3745
|
-
"source": "use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n indexed_tagging_secret::{INDEXED_TAGGING_SECRET_LENGTH, IndexedTaggingSecret},\n utils::arr_copy_slice,\n};\n\n/// Notifies the simulator that a note has been created, so that it can be returned in future read requests in the same\n/// transaction. This note should only be added to the non-volatile database if found in an actual block.\npub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n notify_created_note_oracle_wrapper(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n )\n };\n}\n\n/// Notifies the simulator that a note has been nullified, so that it is no longer returned in future read requests in\n/// the same transaction. This note should only be removed to the non-volatile database if its nullifier is found in an\n/// actual block.\npub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { notify_nullified_note_oracle_wrapper(nullifier, note_hash, counter) };\n}\n\nunconstrained fn notify_created_note_oracle_wrapper<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_created_note_oracle(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n );\n}\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_nullified_note_oracle_wrapper(\n nullifier: Field,\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_nullified_note_oracle(nullifier, note_hash, counter);\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(\n _nullifier: Field,\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S],\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S],\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields,\n )\n}\n\npub unconstrained fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N], // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S]\nwhere\n Note: NoteInterface<N>,\n{\n sync_notes_oracle_wrapper();\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields,\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n/// Returns true if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before the\n/// current transaction is included in a block. While this might seem of little use at first, certain design patterns\n/// benefit from this abstraction (see e.g. `PrivateMutable`).\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n/// Same as `get_app_tagging_secret_as_sender`, except it returns the derived tag, ready to be included in a log.\npub unconstrained fn get_app_tag_as_sender(sender: AztecAddress, recipient: AztecAddress) -> Field {\n get_app_tagging_secret_as_sender(sender, recipient).compute_tag(recipient)\n}\n\n/// Returns the tagging secret for a given sender and recipient pair, siloed for the current contract address.\n/// Includes the last known index used to send a note tagged with this secret.\n/// For this to work, PXE must know the ivpsk_m of the sender.\n/// For the recipient's side, only the address is needed.\npub unconstrained fn get_app_tagging_secret_as_sender(\n sender: AztecAddress,\n recipient: AztecAddress,\n) -> IndexedTaggingSecret {\n let result = get_app_tagging_secret_as_sender_oracle(sender, recipient);\n IndexedTaggingSecret::deserialize(result)\n}\n\n#[oracle(getAppTaggingSecretAsSender)]\nunconstrained fn get_app_tagging_secret_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) -> [Field; INDEXED_TAGGING_SECRET_LENGTH] {}\n\n/// Notifies the simulator that a tag has been used in a note, and to therefore increment the associated index so that\n/// future notes get a different tag and can be discovered by the recipient.\n/// This change should only be persisted in a non-volatile database if the tagged log is found in an actual block -\n/// otherwise e.g. a reverting transaction can cause the sender to accidentally skip indices and later produce notes\n/// that are not found by the recipient.\npub fn increment_app_tagging_secret_index_as_sender(sender: AztecAddress, recipient: AztecAddress) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n increment_app_tagging_secret_index_as_sender_wrapper(sender, recipient);\n }\n}\n\nunconstrained fn increment_app_tagging_secret_index_as_sender_wrapper(\n sender: AztecAddress,\n recipient: AztecAddress,\n) {\n increment_app_tagging_secret_index_as_sender_oracle(sender, recipient);\n}\n\n#[oracle(incrementAppTaggingSecretIndexAsSender)]\nunconstrained fn increment_app_tagging_secret_index_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) {}\n\n/// Finds new notes that may have been sent to all registered accounts in PXE in the current contract and makes them available\n/// for later querying via the `get_notes` oracle.\npub fn sync_notes() {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n sync_notes_oracle_wrapper();\n }\n}\n\nunconstrained fn sync_notes_oracle_wrapper() {\n sync_notes_oracle();\n}\n\n#[oracle(syncNotes)]\nunconstrained fn sync_notes_oracle() {}\n"
|
|
3739
|
+
"87": {
|
|
3740
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr",
|
|
3741
|
+
"source": "use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n unsafe { notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter) };\n}\n\npub unconstrained fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n"
|
|
3746
3742
|
},
|
|
3747
|
-
"
|
|
3743
|
+
"88": {
|
|
3748
3744
|
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr",
|
|
3749
3745
|
"source": "/// Notifies the simulator that `returns` will be later fetched once the function return is processed, referenced by\n/// their hash. This allows the simulator to know how to respond to this future request.\n///\n/// This is only used during private execution, since in public it is the VM itself that keeps track of return values.\npub fn pack_returns(returns: [Field]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call. When\n // unpacking however the caller must check that the returned value is indeed the preimage.\n unsafe { pack_returns_oracle_wrapper(returns) };\n}\n\npub unconstrained fn pack_returns_oracle_wrapper(returns: [Field]) {\n let _ = pack_returns_oracle(returns);\n}\n\npub unconstrained fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n\n#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n"
|
|
3750
3746
|
},
|
|
3751
|
-
"
|
|
3752
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/
|
|
3753
|
-
"source": "use
|
|
3747
|
+
"91": {
|
|
3748
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr",
|
|
3749
|
+
"source": "use crate::{note::{note_header::NoteHeader, note_interface::NoteInterface}, utils::array};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n indexed_tagging_secret::{INDEXED_TAGGING_SECRET_LENGTH, IndexedTaggingSecret},\n};\n\n/// Notifies the simulator that a note has been created, so that it can be returned in future read requests in the same\n/// transaction. This note should only be added to the non-volatile database if found in an actual block.\npub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n notify_created_note_oracle_wrapper(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n )\n };\n}\n\n/// Notifies the simulator that a note has been nullified, so that it is no longer returned in future read requests in\n/// the same transaction. This note should only be removed to the non-volatile database if its nullifier is found in an\n/// actual block.\npub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { notify_nullified_note_oracle_wrapper(nullifier, note_hash, counter) };\n}\n\nunconstrained fn notify_created_note_oracle_wrapper<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_created_note_oracle(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n );\n}\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_nullified_note_oracle_wrapper(\n nullifier: Field,\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_nullified_note_oracle(nullifier, note_hash, counter);\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(\n _nullifier: Field,\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S],\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S],\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields,\n )\n}\n\npub unconstrained fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N], // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S]\nwhere\n Note: NoteInterface<N>,\n{\n sync_notes_oracle_wrapper();\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields,\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let note_content = array::subarray(fields, read_offset + 2);\n\n let mut note = Note::deserialize_content(note_content);\n note.set_header(NoteHeader { contract_address, nonce, storage_slot, note_hash_counter });\n\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n/// Returns true if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before the\n/// current transaction is included in a block. While this might seem of little use at first, certain design patterns\n/// benefit from this abstraction (see e.g. `PrivateMutable`).\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n/// Same as `get_app_tagging_secret_as_sender`, except it returns the derived tag, ready to be included in a log.\npub unconstrained fn get_app_tag_as_sender(sender: AztecAddress, recipient: AztecAddress) -> Field {\n get_app_tagging_secret_as_sender(sender, recipient).compute_tag(recipient)\n}\n\n/// Returns the tagging secret for a given sender and recipient pair, siloed for the current contract address.\n/// Includes the last known index used to send a note tagged with this secret.\n/// For this to work, PXE must know the ivpsk_m of the sender.\n/// For the recipient's side, only the address is needed.\npub unconstrained fn get_app_tagging_secret_as_sender(\n sender: AztecAddress,\n recipient: AztecAddress,\n) -> IndexedTaggingSecret {\n let result = get_app_tagging_secret_as_sender_oracle(sender, recipient);\n IndexedTaggingSecret::deserialize(result)\n}\n\n#[oracle(getAppTaggingSecretAsSender)]\nunconstrained fn get_app_tagging_secret_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) -> [Field; INDEXED_TAGGING_SECRET_LENGTH] {}\n\n/// Notifies the simulator that a tag has been used in a note, and to therefore increment the associated index so that\n/// future notes get a different tag and can be discovered by the recipient.\n/// This change should only be persisted in a non-volatile database if the tagged log is found in an actual block -\n/// otherwise e.g. a reverting transaction can cause the sender to accidentally skip indices and later produce notes\n/// that are not found by the recipient.\npub fn increment_app_tagging_secret_index_as_sender(sender: AztecAddress, recipient: AztecAddress) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n increment_app_tagging_secret_index_as_sender_wrapper(sender, recipient);\n }\n}\n\nunconstrained fn increment_app_tagging_secret_index_as_sender_wrapper(\n sender: AztecAddress,\n recipient: AztecAddress,\n) {\n increment_app_tagging_secret_index_as_sender_oracle(sender, recipient);\n}\n\n#[oracle(incrementAppTaggingSecretIndexAsSender)]\nunconstrained fn increment_app_tagging_secret_index_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) {}\n\n/// Finds new notes that may have been sent to all registered accounts in PXE in the current contract and makes them available\n/// for later querying via the `get_notes` oracle.\npub fn sync_notes() {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n sync_notes_oracle_wrapper();\n }\n}\n\nunconstrained fn sync_notes_oracle_wrapper() {\n sync_notes_oracle();\n}\n\n#[oracle(syncNotes)]\nunconstrained fn sync_notes_oracle() {}\n"
|
|
3754
3750
|
},
|
|
3755
|
-
"
|
|
3756
|
-
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/
|
|
3757
|
-
"source": "use
|
|
3751
|
+
"92": {
|
|
3752
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
|
|
3753
|
+
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader,\n};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"
|
|
3758
3754
|
},
|
|
3759
|
-
"
|
|
3760
|
-
"path": "/usr/src/noir-projects/
|
|
3761
|
-
"source": "
|
|
3755
|
+
"111": {
|
|
3756
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
|
|
3757
|
+
"source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must be large enough to hold all of\n/// the elements past `offset`.\n///\n/// Example:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n/// ```\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
|
|
3762
3758
|
},
|
|
3763
|
-
"
|
|
3764
|
-
"path": "/usr/src/noir-projects/
|
|
3765
|
-
"source": "
|
|
3759
|
+
"175": {
|
|
3760
|
+
"path": "/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr",
|
|
3761
|
+
"source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(\n contract_address: AztecAddress,\n log: [u8; N],\n) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd,\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = AztecAddress::from_field(\n 0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303,\n );\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"
|
|
3766
3762
|
},
|
|
3767
|
-
"
|
|
3763
|
+
"176": {
|
|
3768
3764
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
3769
|
-
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Empty, FromField, Serialize, ToField},\n
|
|
3770
|
-
},
|
|
3771
|
-
"220": {
|
|
3772
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
3773
|
-
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::scoped::Scoped,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [tx_hash, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), unique_note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage())\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
3765
|
+
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Empty, FromField, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key};\n\n// Aztec address\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
|
|
3774
3766
|
},
|
|
3775
|
-
"
|
|
3767
|
+
"241": {
|
|
3776
3768
|
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
|
|
3777
3769
|
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; K];\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"
|
|
3778
3770
|
},
|
|
3771
|
+
"309": {
|
|
3772
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
|
|
3773
|
+
"source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
|
|
3774
|
+
},
|
|
3779
3775
|
"310": {
|
|
3780
|
-
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
3781
|
-
"source": "
|
|
3776
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
|
|
3777
|
+
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse std::default::Default;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field,\n ))\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field,\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: serialized[0],\n y: serialized[1],\n is_infinite: serialized[2] as bool,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: serialized[3],\n y: serialized[4],\n is_infinite: serialized[5] as bool,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: serialized[6],\n y: serialized[7],\n is_infinite: serialized[8] as bool,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: serialized[9],\n y: serialized[10],\n is_infinite: serialized[11] as bool,\n },\n },\n }\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash =\n 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n let test_data_default_hash = 0x1d3bf1fb93ae0e9cda83b203dd91c3bfb492a9aecf30ec90e1057eced0f0e62d;\n\n assert(actual.to_field() == test_data_default_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"
|
|
3782
3778
|
},
|
|
3783
|
-
"
|
|
3784
|
-
"path": "/usr/src/noir-projects/
|
|
3785
|
-
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
3779
|
+
"311": {
|
|
3780
|
+
"path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
3781
|
+
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::scoped::Scoped,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::utils::{arrays::array_concat, field::field_from_bytes};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [tx_hash, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n tx_hash: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage())\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
3786
3782
|
},
|
|
3787
3783
|
"336": {
|
|
3788
|
-
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr",
|
|
3789
|
-
"source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage()\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage()\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"
|
|
3790
|
-
},
|
|
3791
|
-
"337": {
|
|
3792
3784
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr",
|
|
3793
3785
|
"source": "use crate::entrypoint::function_call::FunctionCall;\nuse dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage()\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage()\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"
|
|
3794
3786
|
},
|
|
3787
|
+
"337": {
|
|
3788
|
+
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr",
|
|
3789
|
+
"source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage()\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage()\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"
|
|
3790
|
+
},
|
|
3795
3791
|
"340": {
|
|
3792
|
+
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/account.nr",
|
|
3793
|
+
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
3794
|
+
},
|
|
3795
|
+
"342": {
|
|
3796
3796
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr",
|
|
3797
3797
|
"source": "#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n *\n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\npub unconstrained fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"
|
|
3798
3798
|
},
|
|
3799
|
-
"
|
|
3799
|
+
"343": {
|
|
3800
3800
|
"path": "/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr",
|
|
3801
3801
|
"source": "use dep::aztec::{context::{gas::GasOpts, PrivateContext, PublicContext}, hash::hash_args_array};\nuse dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::{\n CANONICAL_AUTH_REGISTRY_ADDRESS, GENERATOR_INDEX__AUTHWIT_INNER,\n GENERATOR_INDEX__AUTHWIT_NULLIFIER, GENERATOR_INDEX__AUTHWIT_OUTER,\n },\n hash::poseidon2_hash_with_separator,\n};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR: Field = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` has authorized the current call with a valid authentication witness\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([\n context.msg_sender().to_field(),\n context.selector().to_field(),\n context.args_hash,\n ]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context\n .static_call_private_function(\n on_behalf_of,\n comptime { FunctionSelector::from_signature(\"verify_private_authwit(Field)\") },\n [inner_hash],\n )\n .unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allows the same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` has authorized the current call in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub unconstrained fn assert_current_call_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n) {\n let inner_hash = compute_inner_authwit_hash([\n (*context).msg_sender().to_field(),\n (*context).selector().to_field(),\n (*context).get_args_hash(),\n ]);\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` has authorized a specific `inner_hash` in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the `inner_hash`\n */\npub unconstrained fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n let results: [Field] = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"consume((Field),Field)\") },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default(),\n );\n assert(results.len() == 1, \"Invalid response from registry\");\n assert(results[0] == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N],\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash =\n compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computes the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that has authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [consumer.to_field(), chain_id, version, inner_hash],\n GENERATOR_INDEX__AUTHWIT_OUTER,\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub unconstrained fn set_authorized(\n context: &mut PublicContext,\n message_hash: Field,\n authorize: bool,\n) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\") },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub unconstrained fn set_reject_all(context: &mut PublicContext, reject: bool) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\") },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n"
|
|
3802
3802
|
},
|
|
3803
|
-
"
|
|
3804
|
-
"path": "/root/nargo/github.com/noir-lang/
|
|
3803
|
+
"432": {
|
|
3804
|
+
"path": "/root/nargo/github.com/noir-lang/schnorr/v0.1.1/src/lib.nr",
|
|
3805
3805
|
"source": "use std::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul};\nuse std::hash::{blake2s, pedersen_hash};\n\npub fn verify_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) -> bool {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n // pub_key is on Grumpkin curve\n let mut is_ok = (public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17)\n & (!public_key.is_infinite);\n\n if ((sig_s.lo != 0) | (sig_s.hi != 0)) & ((sig_e.lo != 0) | (sig_e.hi != 0)) {\n let (r_is_infinite, result) =\n calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n is_ok &= !r_is_infinite;\n for i in 0..32 {\n is_ok &= result[i] == signature[32 + i];\n }\n } else {\n is_ok = false;\n }\n is_ok\n}\n\npub fn assert_valid_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n\n // assert pub_key is on Grumpkin curve\n assert(public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17);\n assert(public_key.is_infinite == false);\n // assert signature is not null\n assert((sig_s.lo != 0) | (sig_s.hi != 0));\n assert((sig_e.lo != 0) | (sig_e.hi != 0));\n\n let (r_is_infinite, result) = calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n assert(!r_is_infinite);\n for i in 0..32 {\n assert(result[i] == signature[32 + i]);\n }\n}\n\nfn calculate_signature_challenge<let N: u32>(\n public_key: EmbeddedCurvePoint,\n sig_s: EmbeddedCurveScalar,\n sig_e: EmbeddedCurveScalar,\n message: [u8; N],\n) -> (bool, [u8; 32]) {\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let r = multi_scalar_mul([g1, public_key], [sig_s, sig_e]);\n // compare the _hashes_ rather than field elements modulo r\n let pedersen_hash = pedersen_hash([r.x, public_key.x, public_key.y]);\n let pde: [u8; 32] = pedersen_hash.to_be_bytes();\n\n let mut hash_input = [0; N + 32];\n for i in 0..32 {\n hash_input[i] = pde[i];\n }\n for i in 0..N {\n hash_input[32 + i] = message[i];\n }\n\n let result = blake2s(hash_input);\n (r.is_infinite, result)\n}\n\n//Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\nfn scalar_from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v: Field = 1;\n let mut lo: Field = 0;\n let mut hi: Field = 0;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = EmbeddedCurveScalar::new(lo, hi);\n sig_s\n}\n\nmod test {\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n use super::verify_signature;\n\n #[test]\n fn test_zero_signature() {\n let public_key: EmbeddedCurvePoint = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let signature: [u8; 64] = [0; 64];\n let message: [u8; _] = [2; 64]; // every message\n let verified = verify_signature(public_key, signature, message);\n assert(!verified);\n }\n\n #[test]\n fn smoke_test() {\n let message: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let pub_key_x: Field = 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a;\n let pub_key_y: Field = 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197;\n let signature: [u8; 64] = [\n 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76,\n 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, 27, 237, 155, 84, 39, 84,\n 247, 27, 22, 8, 176, 230, 24, 115, 145, 220, 254, 122, 135, 179, 171, 4, 214, 202, 64,\n 199, 19, 84, 239, 138, 124, 12,\n ];\n\n let pub_key = EmbeddedCurvePoint { x: pub_key_x, y: pub_key_y, is_infinite: false };\n let valid_signature = verify_signature(pub_key, signature, message);\n assert(valid_signature);\n super::assert_valid_signature(pub_key, signature, message);\n }\n\n}\n\nmod bench {\n use super::{assert_valid_signature, verify_signature};\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n #[export]\n pub fn bench_verify_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) -> bool {\n verify_signature(public_key, signature, message)\n }\n\n #[export]\n pub fn bench_assert_valid_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) {\n assert_valid_signature(public_key, signature, message)\n }\n}\n"
|
|
3806
3806
|
},
|
|
3807
|
-
"
|
|
3808
|
-
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/util.nr",
|
|
3809
|
-
"source": "use crate::auth_oracle::AuthWitness;\nuse dep::aztec::prelude::AztecAddress;\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\n\npub fn recover_address(message_hash: Field, witness: AuthWitness) -> AztecAddress {\n let message_bytes: [u8; 32] = message_hash.to_be_bytes();\n let public_key = EmbeddedCurvePoint {\n x: witness.keys.ivpk_m.inner.x,\n y: witness.keys.ivpk_m.inner.y,\n is_infinite: false,\n };\n\n // In a single key account contract we re-used ivpk_m as signing key\n schnorr::assert_valid_signature(public_key, witness.signature, message_bytes);\n\n AztecAddress::compute(witness.keys, witness.partial_address)\n}\n"
|
|
3810
|
-
},
|
|
3811
|
-
"432": {
|
|
3807
|
+
"434": {
|
|
3812
3808
|
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr",
|
|
3813
3809
|
"source": "mod util;\nmod auth_oracle;\n\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract SchnorrSingleKeyAccount {\n use dep::aztec::prelude::PrivateContext;\n\n use dep::authwit::{account::AccountActions, entrypoint::{app::AppPayload, fee::FeePayload}};\n\n use crate::{auth_oracle::get_auth_witness, util::recover_address};\n\n use dep::aztec::macros::functions::{private, view};\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[private]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[private]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n let witness = unsafe { get_auth_witness(outer_hash) };\n recover_address(outer_hash, witness).eq(context.this_address())\n }\n}\n"
|
|
3814
3810
|
},
|
|
3815
|
-
"
|
|
3811
|
+
"435": {
|
|
3812
|
+
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/util.nr",
|
|
3813
|
+
"source": "use crate::auth_oracle::AuthWitness;\nuse dep::aztec::prelude::AztecAddress;\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\n\npub fn recover_address(message_hash: Field, witness: AuthWitness) -> AztecAddress {\n let message_bytes: [u8; 32] = message_hash.to_be_bytes();\n let public_key = EmbeddedCurvePoint {\n x: witness.keys.ivpk_m.inner.x,\n y: witness.keys.ivpk_m.inner.y,\n is_infinite: false,\n };\n\n // In a single key account contract we re-used ivpk_m as signing key\n schnorr::assert_valid_signature(public_key, witness.signature, message_bytes);\n\n AztecAddress::compute(witness.keys, witness.partial_address)\n}\n"
|
|
3814
|
+
},
|
|
3815
|
+
"436": {
|
|
3816
3816
|
"path": "/usr/src/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr",
|
|
3817
|
-
"source": "use dep::authwit::auth_witness;\nuse dep::aztec::
|
|
3817
|
+
"source": "use dep::authwit::auth_witness;\nuse dep::aztec::{\n protocol_types::{address::PartialAddress, public_keys::{PUBLIC_KEYS_LENGTH, PublicKeys}},\n utils::array,\n};\n\npub struct AuthWitness {\n keys: PublicKeys,\n signature: [u8; 64],\n partial_address: PartialAddress,\n}\n\nimpl AuthWitness {\n fn deserialize(values: [Field; 77]) -> Self {\n let mut signature = [0; 64];\n for i in 0..64 {\n signature[i] = values[i + PUBLIC_KEYS_LENGTH] as u8;\n }\n Self {\n keys: PublicKeys::deserialize(array::subarray(values, 0)),\n signature,\n partial_address: PartialAddress::from_field(values[76]),\n }\n }\n}\n\npub unconstrained fn get_auth_witness(message_hash: Field) -> AuthWitness {\n let witness: [Field; 77] = auth_witness::get_auth_witness(message_hash);\n AuthWitness::deserialize(witness)\n}\n"
|
|
3818
3818
|
}
|
|
3819
3819
|
}
|
|
3820
3820
|
}
|