@aztec/protocol-contracts 0.0.1-commit.87a0206 → 0.0.1-commit.8f9871590
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/AuthRegistry.json +33 -33
- package/artifacts/ContractClassRegistry.json +53 -4015
- package/artifacts/ContractInstanceRegistry.json +35 -35
- package/artifacts/FeeJuice.json +28 -28
- package/artifacts/MultiCallEntrypoint.json +26 -26
- package/artifacts/PublicChecks.json +23 -23
- package/dest/make_protocol_contract.js +2 -1
- package/dest/protocol_contract_data.js +14 -14
- package/dest/scripts/generate_data.js +7 -9
- package/package.json +4 -4
- package/src/make_protocol_contract.ts +1 -1
- package/src/protocol_contract_data.ts +14 -14
package/artifacts/FeeJuice.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.18+
|
|
3
|
+
"noir_version": "1.0.0-beta.18+2db78f8894936db05c53430f364360ac9cc5c61f",
|
|
4
4
|
"name": "FeeJuice",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
|
-
"bytecode": "JwACBAEoAAABBIBIJwAABEglAAAASicCAwQCJwIEBAAfCgADAAQARhwAR0cGLQhGAS0IRwIlAAAAeicCAQRIJwICBAA7DgACAAEsAABDADBkTnLhMaApuFBFtoGBWF0oM+
|
|
74
|
-
"debug_symbols": "
|
|
73
|
+
"bytecode": "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",
|
|
74
|
+
"debug_symbols": "pZnbbhs5DIbfxde5kCiKFPMqi6JIU7cIYDiBmyywKPLuS2pEjVNAQirfZD7TmX94EiXbvw/fj9/efn59Ov94/nW4/+f34dvl6XR6+vn19Pz48Pr0fFbr70OwPxH4cJ/uDjHB4T7blbcrxs2OtF2zvma70nal9ppkuzK2azncx6BQkkI0KA2ENoCg90YyoAYxO0gDQAe3JLckt2By4AYZHFyZ/FlkjxAFDg7oUBoUcOAG4pbqvEIKejtEg9wguiWWBqCOARuYxe5KlkZ7q+a1glsssykZUANyiyW3grmaikFpYOndQF1FUDBXUUuHpP4gGaiHqG5goQaiylgM8gbZwkExQAdpEN0S3QJusbgqWNtswA0swA2oQfZH5OzggqRRZO2WLLwBWSdkTQtBcHBLMgsY5AZW7pwMuAG5xaq8gf0zGuhDs+aHCjqUBpI2YOvMDdT5rDnkGB3cUh1jg9z+GZoyJ3RwC7oytmdx9bmCCWoJ2IqbxUAaWHEpGJQG0izFPNyAGkS3WJkqWJkoGkiD5JZkgpq6Uh0TA25QHavgFuvDDahBzWoFU9b0FksmaXolgAM1sHWxQXawuzSHYgtkg9IguSW5Bd2Cbsn2LE2dWNsQG6irpDkUhgbFsiEG+lDWbIgEBxtR0UA2iCFgp26L7ATQqdus9zZC04VK2Sl3m/nKqZJsz4/B3G5UnLjbmJ1sDDWyaYtGtnIb2dNsREdbu426LaZOxQm6LcVOpkxGtmAbdVuNgyvl9txY46hE2KnbahwbFacaR6nETjUOqUSN6n7QSJxs+DTqtlqFSjZ2SqjETthtFkexGkHdtUql7GTjsdFuE6e6j21UnHoc0OMAi6OkSrlR3RoadVvsttht0G1gnlq/JBtuBd7f7w6+SX99vRyPtkdf7dq6l788XI7n18P9+e10ujv8+3B6q//06+XhXK+vDxd9V/NwPH/Xqwr+eDodjd7v9rvD+FamQu1u5rgLZPigEMcKhLbaqwIhc1egjz7AWCHZ7lAFEmG/n9PnPRBwDzLiyAOceZCbAOpq2JOwlkUZZZFmCqkLUL8f4dMe6AbVBTCPPCiTLOrZzbMIAUZZlLECsAuADOv42Swij2KYKejG5AoCcdjNk2bUgeKJtNXeJcrHZohpkofiCzJJ2WsZ+aPCpB91E/V2EB2sXSOV8lEjT+oZkmtQwL2n0l94IV4P3cPT2AseaxRJPh2KbtdjjUlnpgw9n3tXgMjnixrFR4yOaxoVFSatlcuezX1CFF5qzTQctDCJQuxUv5WDYeQCTBpTjzbZK2rHnPGwxplIiNxFQhrOW8g3DxugG6fNLBARhj0OLEMnpq2J3hYpT9yYFwWviiLDZKRJd8XSl6oeuvalilqepQalUYOmSYNCX2UpXi11+bwLGbsLnIYu4M3jO+Vbx3ei28d34lvH92eTWcbJlNnYDD2ZeqQdjRycNWYofQNQnpzOJge8qLG4Rgll2N1zR7SldkeuDml/OjJdq5n2maFDbCgyO2wSe0YSx7xwUIoSwr7a83BLnA+MviMKyJKE7JuJZF6TsE/XTeJqofyFhH6t6BIQGJckMHgu9HPlmheYdgkKSxI59EAy0JpEDl0ixzUJxF0CFr2gLsHlZi9WJXqD69fCSw0OhNAl8lpRiXpF9DvJNYk+x4FKuDmQNQn95rkfdPRrwEWJ/RwfloqaJMUuQeN00mR7x30zwZL2Do9/4UU/bCnyWiCyHzJkrcFj3wQU1xZ7ENwl1hZ7jL219Bu9xUBol7g9kEWJuE/wiLwmkblLkCxK9E0gcrg5kFWJ/ulMv5Bd24pgLyrEsigRdgm5NZBVif0DBcDVMfpPiQJrI+eLvnp4fLp8+Ln23bQuTw/fTsf28sfb+fHq3df/Xvwd/7n35fL8ePz+djma0v6br/75B/SUBRK+2A8K+lInORd7Ee09nZW6NX15N1f+Bw=="
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
"name": "balance_of_public",
|
|
@@ -122,8 +122,8 @@
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
},
|
|
125
|
-
"bytecode": "
|
|
126
|
-
"debug_symbols": "
|
|
125
|
+
"bytecode": "JwACBAEoAAABBIBGJwAABEYlAAAARScCAgQBJwIDBAAfCgACAAMARC0IRAElAAAARi0CAUUnAgIERScCAwQBOw4AAwACJiUAAAFAHgIAAgknAgMBASQCAAIAAABiJQAAAWYpAgACAO9SU00nAgMAASsCAAQAAAAAAAAAAAMAAAAAAAAAAC0IAQUnAgYEBQAIAQYBJwMFBAEAIgUCBi0KBgctDgIHACIHAgctDgMHACIHAgctDgEHACIHAgctDgQHLQsFAQAiAQIBLQ4BBS0IAQEnAgIEBQAIAQIBJwMBBAEAIgUCAgAiAQIDPw8AAgADJwICBAEAKgECBC0LBAMnAgEAAAoqAwECJwIBAQAKKgIBBCQCAAQAAAEfJQAAAXgeAgABAC8qAAMAAQACHAoCAwYcCgMBABwKAQIGLQoCASYoAAAEBHhGDAAABAMkAAADAAABZSoBAAEF2sX11rRKMm08BAIBJioBAAEF3Btu6/u2vEM8BAIBJioBAAEFursh14IzGGQ8BAIBJg==",
|
|
126
|
+
"debug_symbols": "nZbbjuIwDIbfJde9SJyTzauMRqhAGVWqCurASivUd1+HiVu6UqIRN+SP0361Y8fkoU7d4f6178fz5VvtPh7qMPXD0H/th8uxvfWXka0PpdNP9GpnG4U8cTz450D2Z0C1M6ZRRscsDGRhrQhZcrLkxOLF4sUSjAifRdQinAjKAuUTKG6QACn8CNBGRALaJCgL40SIBcQCYrFicckNl4TPwovFp2dCEpRFEEsQSxQLgggOGYBF8hmYYzUDISThszBPyzw3StKyv01dl7LykifO3rWduvGmduN9GBr1px3uz4e+r+34HG/txKu6Ud144pGB537okpqb9W1dftVoo11+nTU7JQgPG4YpMyikoJ4ICi4uhLD1Ampe4OIEl9xCiPbdOLAUR5UBDhcGhFhi+AqD60gQQH4hoN8QQpkAKOm0tEbhTNwAYiUdfEgkHWDtgrCIGwSWEUhWNhMJTRFBZYT1sISxbiQQbauqkg7g458RfJLDe4w1HQBoy4xKcbpIwnBoYWGY37thidakvmT1fzdqhWWIpLCsDqXCMhWER5sJQa+tAuOb5yNSsVfUqtNFKc4IJScMVr3w4cWLYr8xVINoExeItq7YtCr7EdYCDaChiKi0TohLiZMrtb1aIMS7uMbhsOiErR1VJ4VhfcWNelLcS1KovBm1EselcRky62F1nJ75k6ftsZ82F5k5waa+PQxdnp7v4/Fl9fb3KityEbpOl2N3uk9dIq23ofSX/BFME8Jnuu3wJOomwuecPv0P"
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"name": "check_balance",
|
|
@@ -164,8 +164,8 @@
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
|
-
"bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAARicCAgQBJwIDBAAfCgACAAMARBwAREQGLQhEASUAAABsJwIBBEUnAgIEADsOAAIAASwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/
|
|
168
|
-
"debug_symbols": "
|
|
167
|
+
"bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAARicCAgQBJwIDBAAfCgACAAMARBwAREQGLQhEASUAAABsJwIBBEUnAgIEADsOAAIAASwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAAmJQAAAaceAgACCScCAwEBJAIAAgAAAIglAAABzR4CAAIBCiICQwMWCgMEHAoEBQAEKgUCBCcCAgEACioDAgUkAgAFAAAAuycCBgQAPAYGASkCAAMA71JTTScCBQABKwIABgAAAAAAAAAAAwAAAAAAAAAALQgBBycCCAQFAAgBCAEnAwcEAQAiBwIILQoICS0OAwkAIgkCCS0OBQkAIgkCCS0OBAkAIgkCCS0OBgktCwcDACIDAgMtDgMHLQgBAycCBAQFAAgBBAEnAwMEAQAiBwIEACIDAgU/DwAEAAUnAgQEAQAqAwQGLQsGBScCAwAACioFAwQKKgQCAyQCAAMAAAFzJQAAAd8eAgADAC8qAAUAAwAEHAoEBQYcCgUDABwKAwQGDCoEAQMKKgMCASQCAAEAAAGmJQAAAfEmKAAABAR4RQwAAAQDJAAAAwAAAcwqAQABBdrF9da0SjJtPAQCASYqAQABBQ7+IEnrN048PAQCASYqAQABBbq7IdeCMxhkPAQCASYqAQABBYRygMKEIwtGPAQCASY=",
|
|
168
|
+
"debug_symbols": "nZZLbuMwDIbv4nUWEqkHmasUReGmbmHAcAI3GWBQ5O5D1aIfM5DQySb8TcVfKIpk9NW8da+3j5d+fD9/Nsenr+Z16oeh/3gZzqf22p9H8X41Jn1Yi80RD2KpOTqxgLNFm21ojlGsk2dONszWm9nv/WyDPFubhM8iqidSFoQqoggSwWEWYGwWACp0CXUJ1ePU49STopmFU8FZBFRBWUT9iZjDAFIg+SxYgSxAMEnQLNCgCvVY9Vj1gHpAwgDZMqJToR6XvoNJUBZePV49IWQRJULgJMSD6XUSIKYl4ixYPZw8cnjOOBXqsTGJ+/3QaC28XKeuS6WwKQ4pmUs7deO1OY63YTg0v9rh9v2lz0s7fttrO8mqbLEb38QK8L0fuqTuh/VtU36V2If8NnGkBeBhR7BlAgdQAgcXF0LYxwBlgjXkMsFasxIiPrQLMqVdVAhsrcbAFot58GVCcEEJkoZiHkKZgI4zAIMrZaEaAYNG4J0rRUC1CHwGOBktaxIeyuKmFv6upgoiBsyEGMMCcD8/SMNrCBaLIdTqEZY0WGC/IGifB4tlBJD2JPJaTNL3e4KrpZKXtgJc94FEe4avtQW6tS1smVErSg/LTtYDBeY9IVZyYYkyAmRTjzHWIwEgLDO4zHCRl+omhIVhfx6GzPT1XDcH+08YteqyrG1u0YRSdUEF4Ul7JJi1Syk+1CPel3oEauXpohIilEIAXxv6sMxs0eWBCaEGMTYuEIPFmQeVQw1rfQYwUERU5ibEpcK5OLlrG2HJ4roPR6Ug0NQ61WlZoK+EUT8UtzkULiYDawVOy+SyvJnA7vvG8/8FGvf/58/y1J76aXeNvifW1LevQ5cf32/jabN6/X3RFb2GX6bzqXu7TV0ibe7i8vkU3SHyc7qQy4N0G/nne/rpPw=="
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"name": "claim",
|
|
@@ -1145,7 +1145,7 @@
|
|
|
1145
1145
|
}
|
|
1146
1146
|
},
|
|
1147
1147
|
{
|
|
1148
|
-
"name": "
|
|
1148
|
+
"name": "expiration_timestamp",
|
|
1149
1149
|
"type": {
|
|
1150
1150
|
"kind": "integer",
|
|
1151
1151
|
"sign": "unsigned",
|
|
@@ -2015,9 +2015,9 @@
|
|
|
2015
2015
|
}
|
|
2016
2016
|
}
|
|
2017
2017
|
},
|
|
2018
|
-
"bytecode": "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NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF669hiOLaeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrk36LU5OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL137W44tp5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla5MaunB66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla2/h2HJ66dqcXro2p5euzemla3N66dqcXro2p5euvZNjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzeml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euw+ml63B66TqcXroOp5euE+DYZnJsC3JsC3FsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9apwLHl9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91KnFsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vnTs5tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rZHFsOf1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bJ5thy+t86nP63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",
|
|
2019
|
-
"debug_symbols": "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",
|
|
2020
|
-
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdwAAAAAAAAAAAAAAAAAAAADgP/lLerko/hiriWnBP+K5AAAAAAAAAAAAAAAAAAAAAAAABmyLPSzjG3iBfa3quTIwAAAAAAAAAAAAAAAAAAAP3tasvvMvhHkQHPGOE4T0imAAAAAAAAAAAAAAAAAAAAAAAW1EL8AIg+
|
|
2018
|
+
"bytecode": "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",
|
|
2019
|
+
"debug_symbols": "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auc61R1Pl+x40vKMRnRiEDsxqVBEaKdL1r89XbIjtAltQpvQJrQJbUKb0KbGZueCVkXR7FzSqujEIHZiEos4iPOKDdrpkh2N6MQgQmvQGrQGrUGzB5GxGWMzxmbQTpfsmMQiDiI0h+bQHJpDc2bSGZszNmdsDs05bsFMBjMZzGRAC2gBLaAFtGAmg7F1xtYZW4fWOW6dmezMZGcmO7QOrUNLaAktmclkbMnYkrEltOS4JTOZzGQxkwWtoBW0glbQipksxlaMrRjbgDY4boOZHMzkYCYHtAFtQBvQBrTJTE7GNhnbZGwT2uS4TWZyMpOTmZwXba173bERjejEIHZiEot40da61xVxScMlDZesda+rQoOGSxouabik4ZKGSxouabhkrXtdNHNiEDsxidAMGi5puKThkoZLGi5puKThkrXuddG8iMwkLmm4ZK17XRUCGi5puKThkoZLGi5puKThkrXuddE6xw2XNFzScMla97orQMMlDZc0XNJwScMlDZc0XLLWvS5actxwScMlDZesda+rQkHDJQ2XNFzScEnDJQ2XNFzSClpx3HBJwyUNl7QBbUDDJQ2XNFzScEnDJQ2XNFyy1r0u2uS44ZKGSxouWetedwVouMRwieESwyWGSwyXGC5Z615P2lr3uuMgXjNpuGSte10VGjRcYrjEcInhEsMlhksMl6x1r4tmjWhEJwYRmkHDJYZLDJcYLjFcYrjEcMla97po3onMJC4xXLLWva4KAQ2XGC4xXGK4xHCJ4RLDJWvd66IFxw2XGC4xXLLWva4KHRouMVxiuMRwieESwyWGS9a610VLjhsuMVxiuGSte90VoOESwyWGSwyXGC4xXGK4ZK17XbTiuOESwyWGS2xAG9BwieESwyWGSwyXGC4xXLLWvS7a5LjhEsMlhktsQpvQcInhEsMljksclzgucVyy1r2etLXudcckFnEQoTVouMRxieMSxyWOSxyXOC5Z614XrV3HzXGJ4xLHJc5nnLXudUdouMRxieMSxyWOSxyXrHWvi+ZOZCZxieMS5zPOWve6IzRc4rjEcYnjEscljkvWutdFC44bLnFc4rjE+Yyz1r3uCA2XOC5xXOK4xHGJ45K17nXRkuOGSxyXOC5xPuOsda87QsMljksclzgucVziuGSte1204rjhEscljkuczziOS5zrEue6xHGJ8xlnrXvdERou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",
|
|
2020
|
+
"verification_key": "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"
|
|
2021
2021
|
},
|
|
2022
2022
|
{
|
|
2023
2023
|
"name": "claim_and_end_setup",
|
|
@@ -2997,7 +2997,7 @@
|
|
|
2997
2997
|
}
|
|
2998
2998
|
},
|
|
2999
2999
|
{
|
|
3000
|
-
"name": "
|
|
3000
|
+
"name": "expiration_timestamp",
|
|
3001
3001
|
"type": {
|
|
3002
3002
|
"kind": "integer",
|
|
3003
3003
|
"sign": "unsigned",
|
|
@@ -3867,9 +3867,9 @@
|
|
|
3867
3867
|
}
|
|
3868
3868
|
}
|
|
3869
3869
|
},
|
|
3870
|
-
"bytecode": "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eunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrj2GY8vppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWuTfouT00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX/pZjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqkhi6cXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dpbOLacXro2p5euzemla3N66dqcXro2p5euzemla//LseX00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1+H00nU4vXQdTi9dh9NL1wlwbDM5tgU5toU4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rVODYcvrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpU4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+t86dHFtO/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dTj9bx1O/1uH0//W4fS/dbI4tpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/rcPrfOpz+tw6n/63D6X/r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",
|
|
3871
|
-
"debug_symbols": "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bUALaAEtoAW0gBbQAlpAC2gBLaEltISW0BJaQktoCe10yfGtYHKua93xdMmOJy3PqEQjOnEQgwpJhHa6ZP3b0yU7QpvQJrQJbUKb0Ca0CW322HSte92xabrWve5oRCcOYhCTWMR5RYF2umRHJRrRidAEmkATaAJNH0TGpoxNGZtCO12yYxCTWERoBs2gGTSDZsykMTZjbMbYDJpx3JyZdGbSmUmH5tAcmkNzaM5MOmMbjG0wtgFtcNwGMzmYycFMDmgD2oAW0AJaMJPB2IKxBWMLaMFxC2YymMlkJhNaQktoCS2hJTOZjC0ZWzK2glYct2Imi5ksZrKgFbSCVtAK2mQmJ2ObjG0ytgltctwmMzmZyclMzou21r3uKEQlGtGJgxjEJF60te51RVwiuERwyVr3uioINFwiuERwieASwSWCSwSXrHWvi6ZGdOIgBhGaQsMlgksElwguEVwiuERwyVr3umiWRGYSlwguWeteVwWHhksElwguEVwiuERwieCSte510QbHDZcILhFcsta97grQcIngEsElgksElwguEVyy1r0uWnDccIngEsEla93rqpDQcIngEsElgksElwguEVwiCS05brhEcIngEiloBQ2XCC4RXCK4RHCJ4BLBJWvd66JNjhsuEVwiuGSte90VoOESxSWKSxSXKC5RXKK4ZK17PWlr3euORbxmUnHJWve6Kgg0XKK4RHGJ4hLFJYpLFJesda+LpkJUohGdCE2h4RLFJYpLFJcoLlFcorhkrXtdNBtEZhKXKC5Z615XBYeGSxSXKC5RXKK4RHGJ4pK17nXRnOOGSxSXKC5Z615XhQENlyguUVyiuERxieISxSVr3euiBccNlyguUVyy1r3uCtBwieISxSWKSxSXKC5RXLLWvS5actxwieISxSVa0AoaLlFcorhEcYniEsUlikvWutdFmxw3XKK4RHGJTmgTGi5RXKK4xHCJ4RLDJYZL1rrXk7bWve4YxCQWEZpAwyWGSwyXGC4xXGK4xHDJWve6aHIdN8MlhksMlxj3OGvd647QcInhEsMlhksMlxguWeteF82MyEziEsMlxj3OWve6IzRcYrjEcInhEsMlhkvWutdFc44bLjFcYrjEuMdZ6153hIZLDJcYLjFcYrjEcMla97powXHDJYZLDJcY9zhr3euO0HCJ4RLDJYZLDJcYLlnrXhctOW64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",
|
|
3872
|
-
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdwAAAAAAAAAAAAAAAAAAAAUq5NnFpeFePs2Epz2s4fzz0AAAAAAAAAAAAAAAAAAAAAABHwSM+cJRkd6g/
|
|
3870
|
+
"bytecode": "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2HJ66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euPYZjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euTfp1S04vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9f+lmPL6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2qSGLpxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2ls4tpxeujanl67N6aVrc3rp2pxeujanl67N6aVr/8ux5fTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTSdTi9dB1OL12H00vX4fTSdTi9dB1OL12H00vX4fTSdTi9dB1OL12H00vX4fTSdTi9dB1OL12H00vXCXBsMzm2BTm2hTi2nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tU4Nhy+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86lTi2nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63zp0cW07/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91OP1vHU7/W4fT/9bh9L91sji2nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPpf+tw+t86nP63Dqf/rcPp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mPPfW/n6992q5fz3Cfmbv1r3wVWbtmoVTDvlM+zOFq3kpp9pkb+VyPezuRzs/Dp8FV5Lc1mbq7Zt1+XUlqp51+QxP7HyjDNeeTUDKx98V8e27YLZUVaa44yqDqnRskUr9Rcp04eeoNXJnWZ2H1GjbVaLlk+0Cf+f7627uFPHlq1aduxy4ulE1VPJ2vB4rt57IlV79w52H3niQUPl5s2zWnTocGoVwe5D72rZul2rFieWE5ksx2IL5CsUnat1H1GlZZum4ccaHRu2ey/i4gyrJ6e++8mmbcIubrKemmRonU6t29V+PPvUPzir+8jabZqfWGnUG3J9jN9u/WH+ntXj6lRo3X3w3fK2BrPdfx+5qid3nD3hsU4tWzV/tHWHJx59rFXbZk8/+mSLVuHbbZ31P77dn5zh7f7kZOY8njvD83esCTVyOySaud3VvWvymMuVezZe3R1EZv38nhtziGq4g+iimu4guqiWO4guqu0OoovquIPoorruILqonjuILqrvDqKLGriD6KKG7iC6qJE7iC66wx1EF93pDqKL7nIH0UV3u4PoonvcQXTRve4guqixO4guus8dRBfd7w6iix5wB9FFD7qD6KKH3EF00cPuILroEXcQXfSoO4guauIOoouauoPoosfcQXRRM3cQXdTcHUQXtXAH0UWPu4PooifcQXTRk+4guqilO4guesodRBc97Q6ii1q5g+ii1u4guqiNO4guausOoovauYPoovbuILooyx1EF3VwB9FFHd1BdFEndxBd9Iw7iC561h1EF3V2B9FFXdxBdNFz7iC66Hl3EF30gjuILnrRHUQXveQOoou6uoPoolA3zyiGrLtnFEP2smcUQ/aKZxRD9qpnFEP2mmcUQ/a6ZxRD1sMziiHr6RnFkL3hGXlfXebUvekZnaY70/eC1c/4dW617oPqt30m2/uq9uRardzevvyuLs83V9Yg+dbO+77K8s6Q823UMM23AFaOyd0pTk2fe8/2yWic/D8d78Gc9r8U8C75tP8lMce7Avl+pmXOGFveqXP8b7Ynp3L8T44njU44d4y2STv3Jt03krkP1slfbN864zdomVEDbUcNtBM10AVOBfpMH428dcaxycz9cMX2muV8uJI/90o5/321/P37ApHHJnnezKScN9Nxg31a7JNdwWk/T3GPLc8JUodWb9+paasO3jlOeSXleqqS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",
|
|
3871
|
+
"debug_symbols": "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",
|
|
3872
|
+
"verification_key": "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"
|
|
3873
3873
|
},
|
|
3874
3874
|
{
|
|
3875
3875
|
"name": "public_dispatch",
|
|
@@ -3940,8 +3940,8 @@
|
|
|
3940
3940
|
}
|
|
3941
3941
|
}
|
|
3942
3942
|
},
|
|
3943
|
-
"bytecode": "JwACBAEoAAABBIBOJwAABE4lAAAAQScCAgQBJwIDBAAfCgACAAMATS0ITQElAAAAoCcCAQROJwICBAA7DgACAAEpAABDAOfwRf8pAABEAPAkOdspAABFAP95SfIsAABGADBkTnLhMaApuFBFtoGBWF0oM+
|
|
3944
|
-
"debug_symbols": "
|
|
3943
|
+
"bytecode": "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",
|
|
3944
|
+
"debug_symbols": "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"
|
|
3945
3945
|
}
|
|
3946
3946
|
],
|
|
3947
3947
|
"outputs": {
|
|
@@ -4200,11 +4200,11 @@
|
|
|
4200
4200
|
},
|
|
4201
4201
|
"19": {
|
|
4202
4202
|
"path": "std/hash/mod.nr",
|
|
4203
|
-
"source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n super::keccakf1600(input)\n }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n if crate::runtime::is_unconstrained() {\n // Temporary measure while Barretenberg is main proving system.\n // Please open an issue if you're working on another proving system and running into problems due to this.\n crate::static_assert(\n N <= 1024,\n \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n );\n }\n __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n // Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n // Check that the decomposition does not overflow the field size\n let (a, b) = if xhi == crate::field::bn254::PHI {\n (xlo, crate::field::bn254::PLO)\n } else {\n (xhi, crate::field::bn254::PHI)\n };\n crate::field::bn254::assert_lt(a, b);\n\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n assert_eq(input.len(), state_len);\n poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n let name = quote { $crate::hash::Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n type H: Hasher;\n\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n type H = H;\n\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u8 as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u16 as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u32 as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u64 as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
|
|
4203
|
+
"source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n super::keccakf1600(input)\n }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n if crate::runtime::is_unconstrained() {\n // Temporary measure while Barretenberg is main proving system.\n // Please open an issue if you're working on another proving system and running into problems due to this.\n crate::static_assert(\n N <= 1024,\n \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n );\n }\n __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n crate::assert_constant(separator);\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n crate::assert_constant(starting_index);\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n // Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n // Check that the decomposition does not overflow the field size\n let (a, b) = if xhi == crate::field::bn254::PHI {\n (xlo, crate::field::bn254::PLO)\n } else {\n (xhi, crate::field::bn254::PHI)\n };\n crate::field::bn254::assert_lt(a, b);\n\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n assert_eq(input.len(), state_len);\n poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n let name = quote { $crate::hash::Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n type H: Hasher;\n\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n type H = H;\n\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u8 as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u16 as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u32 as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as u64 as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
|
|
4204
4204
|
},
|
|
4205
4205
|
"231": {
|
|
4206
4206
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
|
|
4207
|
-
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field =
|
|
4207
|
+
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 12;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n // compatible. It is therefore always safe to call.\n unsafe {\n assert_compatible_oracle_version_wrapper();\n }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(utilityAssertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n #[test]\n unconstrained fn compatible_oracle_version() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n }\n\n #[test(should_fail_with = \"Incompatible oracle version. TXE is using version\")]\n unconstrained fn incompatible_oracle_version() {\n let arbitrary_incorrect_version = 318183437;\n assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n }\n}\n"
|
|
4208
4208
|
},
|
|
4209
4209
|
"299": {
|
|
4210
4210
|
"path": "/home/aztec-dev/nargo/github.com/noir-lang/poseidon/v0.2.3/src/poseidon2.nr",
|
|
@@ -4214,9 +4214,9 @@
|
|
|
4214
4214
|
"path": "std/array/mod.nr",
|
|
4215
4215
|
"source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a vector.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let vector = array.as_vector();\n /// assert_eq(vector, [1, 2].as_vector());\n /// ```\n #[builtin(as_vector)]\n pub fn as_vector(self) -> [T] {}\n\n /// Returns this array as a vector.\n /// This method is deprecated in favor of `as_vector`.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let vector = array.as_slice();\n /// assert_eq(vector, [1, 2].as_vector());\n /// ```\n #[builtin(as_vector)]\n #[deprecated(\"This method has been renamed to `as_vector`\")]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the [`Self::sort_via`] function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
|
|
4216
4216
|
},
|
|
4217
|
-
"
|
|
4217
|
+
"388": {
|
|
4218
4218
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
4219
|
-
"source": "mod poseidon2_chunks;\n\nuse crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_log::{PrivateLog, PrivateLogData},\n transaction::tx_request::TxRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n TWO_POW_64,\n },\n merkle_tree::root_from_sibling_path,\n messaging::l2_to_l1_message::L2ToL1Message,\n poseidon2::Poseidon2Sponge,\n side_effect::{Counted, Scoped},\n traits::{FromField, Hash, ToField},\n utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(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\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n DOM_SEP__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [note_nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), note_hash],\n DOM_SEP__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n/// Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n/// before they send it to the network. If a tx makes public function calls, then _revertible_\n/// note_hashes that are created in private will not be made unique in private by the Reset circuit,\n/// but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n/// until the AVM has executed the public functions of the tx. (See an explanation in\n/// reset_output_composer.nr for why).\n/// For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n/// for txs whose public functions create a varying number of non-revertible notes (determined at\n/// runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n/// tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n compute_note_nonce_and_unique_note_hash(siloed_note_hash, first_nullifier, note_index_in_tx)\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: Scoped<Counted<NoteHash>>) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.innermost())\n }\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), nullifier],\n DOM_SEP__SILOED_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: Scoped<Counted<Nullifier>>) -> Field {\n let value = nullifier.innermost().value;\n // Q: shouldn't we be checking whether the _whole_ scoped, counted, nullifier struct is empty?\n // A: We don't have to. The init and inner circuits add a contract address only to non-empty nullifiers.\n // So we know we should silo it if the contract address is not empty.\n if nullifier.contract_address.is_zero() {\n // Return `.value` instead of 0, because already-siloed nullifiers also have a zero\n // contract_address field, and we of course want to return that already-siloed nullifier\n // (we just don't want to silo it a second time).\n value\n } else {\n compute_siloed_nullifier(nullifier.contract_address, value)\n }\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n // can have counter 1 (see `validate_as_first_call` for that assertion).\n Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n NULL_MSG_SENDER_CONTRACT_ADDRESS,\n )\n}\n\npub fn compute_siloed_private_log_first_field(\n contract_address: AztecAddress,\n field: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), field],\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n )\n}\n\npub fn silo_private_log(private_log: Scoped<Counted<PrivateLogData>>) -> PrivateLog {\n let log = private_log.innermost().log;\n if private_log.contract_address.is_zero() {\n log\n } else {\n let mut fields = log.fields;\n fields[0] = compute_siloed_private_log_first_field(private_log.contract_address, fields[0]);\n PrivateLog::new(fields, log.length)\n }\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n master_secret_key: EmbeddedCurveScalar,\n app_address: AztecAddress,\n app_secret_key_domain_separator: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n app_secret_key_domain_separator,\n )\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 contract_address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n let recipient_bytes: [u8; 20] = recipient.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n let mut bytes: [u8; 148] = std::mem::zeroed();\n for i in 0..32 {\n bytes[i] = contract_address_bytes[i];\n bytes[i + 32] = rollup_version_id_bytes[i];\n // 64 - 84 are for recipient.\n bytes[i + 84] = chain_id_bytes[i];\n bytes[i + 116] = content_bytes[i];\n }\n\n for i in 0..20 {\n bytes[64 + i] = recipient_bytes[i];\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: Scoped<L2ToL1Message>,\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.inner.recipient,\n msg.inner.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n // Concatenate two fields into 32 x 2 = 64 bytes\n let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::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 = [separator.to_field()].concat(inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// NB the below is the same as poseidon::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// This function is unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n inputs: BoundedVec<Field, N>,\n separator: T,\n) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs.get(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 poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\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 = sha256::digest(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 == 0x3b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992);\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 == 0xaab2a5828156782b12a1dc6f336e2bc627eb1b9514b02d511f66296990c050);\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 L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n AztecAddress::from_field(3),\n ),\n version,\n chainId,\n );\n\n // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n let hash_from_typescript = 0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n assert_eq(hash, hash_from_typescript);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n let separator = 42;\n\n // Hash using bounded vec version\n let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n // Hash using regular version\n let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n // Results should match\n assert_eq(bounded_result, regular_result);\n}\n"
|
|
4219
|
+
"source": "mod poseidon2_chunks;\n\nuse crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, nullifier::Nullifier, private_log::PrivateLog,\n transaction::tx_request::TxRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n TWO_POW_64,\n },\n merkle_tree::root_from_sibling_path,\n messaging::l2_to_l1_message::L2ToL1Message,\n poseidon2::Poseidon2Sponge,\n side_effect::{Counted, Scoped},\n traits::{FromField, Hash, ToField},\n utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(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\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 compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), note_hash],\n DOM_SEP__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n/// Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n/// before they send it to the network. If a tx makes public function calls, then _revertible_\n/// note_hashes that are created in private will not be made unique in private by the Reset circuit,\n/// but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n/// until the AVM has executed the public functions of the tx. (See an explanation in\n/// reset_output_composer.nr for why).\n/// For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n/// for txs whose public functions create a varying number of non-revertible notes (determined at\n/// runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n/// tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [note_nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n DOM_SEP__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), nullifier],\n DOM_SEP__SILOED_NULLIFIER,\n )\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n // can have counter 1 (see `validate_as_first_call` for that assertion).\n Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n NULL_MSG_SENDER_CONTRACT_ADDRESS,\n )\n}\n\npub fn compute_siloed_private_log_first_field(\n contract_address: AztecAddress,\n field: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), field],\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n )\n}\n\npub fn compute_siloed_private_log(contract_address: AztecAddress, log: PrivateLog) -> PrivateLog {\n let mut fields = log.fields;\n fields[0] = compute_siloed_private_log_first_field(contract_address, fields[0]);\n PrivateLog::new(fields, log.length)\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n master_secret_key: EmbeddedCurveScalar,\n app_address: AztecAddress,\n app_secret_key_domain_separator: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n app_secret_key_domain_separator,\n )\n}\n\npub fn compute_l2_to_l1_message_hash(\n message: Scoped<L2ToL1Message>,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let contract_address_bytes: [u8; 32] = message.contract_address.to_field().to_be_bytes();\n let recipient_bytes: [u8; 20] = message.inner.recipient.to_be_bytes();\n let content_bytes: [u8; 32] = message.inner.content.to_be_bytes();\n let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n let mut bytes: [u8; 148] = std::mem::zeroed();\n for i in 0..32 {\n bytes[i] = contract_address_bytes[i];\n bytes[i + 32] = rollup_version_id_bytes[i];\n // 64 - 84 are for recipient.\n bytes[i + 84] = chain_id_bytes[i];\n bytes[i + 116] = content_bytes[i];\n }\n\n for i in 0..20 {\n bytes[64 + i] = recipient_bytes[i];\n }\n\n sha256_to_field(bytes)\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n // Concatenate two fields into 32 x 2 = 64 bytes\n let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::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 = [separator.to_field()].concat(inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// This function is unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n inputs: BoundedVec<Field, N>,\n separator: T,\n) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs.get(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 subarray_hash_matches_fixed() {\n let mut values_to_hash = [3; 17];\n let mut padded = values_to_hash.concat([0; 11]);\n let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n // Hash the entire values_to_hash.\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(values_to_hash, values_to_hash.len());\n\n assert_eq(subarray_hash, fixed_len_hash);\n}\n\n#[test]\nfn subarray_hash_matches_variable() {\n let mut values_to_hash = [3; 17];\n let mut padded = values_to_hash.concat([0; 11]);\n let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n // Hash up to values_to_hash.len() fields of the padded array.\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(padded, values_to_hash.len());\n\n assert_eq(subarray_hash, variable_len_hash);\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 = sha256::digest(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 unique_siloed_note_hash_matches_typescript() {\n let inner_note_hash = 1;\n let contract_address = AztecAddress::from_field(2);\n let first_nullifier = 3;\n let note_index_in_tx = 4;\n\n let siloed_note_hash = compute_siloed_note_hash(contract_address, inner_note_hash);\n let siloed_note_hash_from_ts =\n 0x1986a4bea3eddb1fff917d629a13e10f63f514f401bdd61838c6b475db949169;\n assert_eq(siloed_note_hash, siloed_note_hash_from_ts);\n\n let nonce: Field = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n let note_hash_nonce_from_ts =\n 0x28e7799791bf066a57bb51fdd0fbcaf3f0926414314c7db515ea343f44f5d58b;\n assert_eq(nonce, note_hash_nonce_from_ts);\n\n let unique_siloed_note_hash_from_nonce = compute_unique_note_hash(nonce, siloed_note_hash);\n let unique_siloed_note_hash = compute_note_nonce_and_unique_note_hash(\n siloed_note_hash,\n first_nullifier,\n note_index_in_tx,\n );\n assert_eq(unique_siloed_note_hash_from_nonce, unique_siloed_note_hash);\n\n let unique_siloed_note_hash_from_ts =\n 0x29949aef207b715303b24639737c17fbfeb375c1d965ecfa85c7e4f0febb7d16;\n assert_eq(unique_siloed_note_hash, unique_siloed_note_hash_from_ts);\n}\n\n#[test]\nfn siloed_nullifier_matches_typescript() {\n let contract_address = AztecAddress::from_field(123);\n let nullifier = 456;\n\n let res = compute_siloed_nullifier(contract_address, nullifier);\n\n let siloed_nullifier_from_ts =\n 0x169b50336c1f29afdb8a03d955a81e485f5ac7d5f0b8065673d1e407e5877813;\n\n assert_eq(res, siloed_nullifier_from_ts);\n}\n\n#[test]\nfn siloed_private_log_first_field_matches_typescript() {\n let contract_address = AztecAddress::from_field(123);\n let field = 456;\n let res = compute_siloed_private_log_first_field(contract_address, field);\n\n let siloed_private_log_first_field_from_ts =\n 0x29480984f7b9257fded523d50addbcfc8d1d33adcf2db73ef3390a8fd5cdffaa;\n\n assert_eq(res, siloed_private_log_first_field_from_ts);\n}\n\n#[test]\nfn empty_l2_to_l1_message_hash_matches_typescript() {\n // All zeroes\n let res = compute_l2_to_l1_message_hash(\n L2ToL1Message { recipient: EthAddress::zero(), content: 0 }.scope(AztecAddress::from_field(\n 0,\n )),\n 0,\n 0,\n );\n\n let empty_l2_to_l1_msg_hash_from_ts =\n 0x003b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992;\n\n assert_eq(res, empty_l2_to_l1_msg_hash_from_ts);\n}\n\n#[test]\nfn l2_to_l1_message_hash_matches_typescript() {\n let message = L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n AztecAddress::from_field(3),\n );\n let version = 4;\n let chainId = 5;\n\n let hash = compute_l2_to_l1_message_hash(message, version, chainId);\n\n // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n let l2_to_l1_message_hash_from_ts =\n 0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n assert_eq(hash, l2_to_l1_message_hash_from_ts);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n let separator = 42;\n\n // Hash using bounded vec version\n let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n // Hash using regular version\n let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n // Results should match\n assert_eq(bounded_result, regular_result);\n}\n"
|
|
4220
4220
|
},
|
|
4221
4221
|
"39": {
|
|
4222
4222
|
"path": "std/ops/arith.nr",
|
|
@@ -4232,7 +4232,7 @@
|
|
|
4232
4232
|
},
|
|
4233
4233
|
"417": {
|
|
4234
4234
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr",
|
|
4235
|
-
"source": "use crate::{\n constants::DOM_SEP__PUBLIC_STORAGE_MAP_SLOT, hash::poseidon2_hash_with_separator,\n traits::ToField,\n};\n\n// TODO: Move this to src/public_data/storage/map.nr\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field\nwhere\n K: ToField,\n{\n poseidon2_hash_with_separator(\n [storage_slot, key.to_field()],\n DOM_SEP__PUBLIC_STORAGE_MAP_SLOT,\n )\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map, traits::FromField};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(\n 0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f,\n );\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript =\n
|
|
4235
|
+
"source": "use crate::{\n constants::DOM_SEP__PUBLIC_STORAGE_MAP_SLOT, hash::poseidon2_hash_with_separator,\n traits::ToField,\n};\n\n// TODO: Move this to src/public_data/storage/map.nr\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field\nwhere\n K: ToField,\n{\n poseidon2_hash_with_separator(\n [storage_slot, key.to_field()],\n DOM_SEP__PUBLIC_STORAGE_MAP_SLOT,\n )\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map, traits::FromField};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(\n 0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f,\n );\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript =\n 0x2d225f361108379adc2da91378b9702675c5546b57e78bafc1e74ec7fec55967;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"
|
|
4236
4236
|
},
|
|
4237
4237
|
"42": {
|
|
4238
4238
|
"path": "std/option.nr",
|
|
@@ -4256,7 +4256,7 @@
|
|
|
4256
4256
|
},
|
|
4257
4257
|
"450": {
|
|
4258
4258
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/serde/src/type_impls.nr",
|
|
4259
|
-
"source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint;\nuse dep::std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 1;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n reader.read() != 0\n }\n}\n\nimpl Serialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u1\n }\n}\n\nimpl Serialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8\n }\n}\n\nimpl Serialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16\n }\n}\n\nimpl Serialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32\n }\n}\n\nimpl Serialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64\n }\n}\n\nimpl Serialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u128\n }\n}\n\nimpl Serialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self);\n }\n}\n\nimpl Deserialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read()\n }\n}\n\nimpl Serialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u8 as Field);\n }\n}\n\nimpl Deserialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8 as i8\n }\n}\n\nimpl Serialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u16 as Field);\n }\n}\n\nimpl Deserialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16 as i16\n }\n}\n\nimpl Serialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u32 as Field);\n }\n}\n\nimpl Deserialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32 as i32\n }\n}\n\nimpl Serialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u64 as Field);\n }\n}\n\nimpl Deserialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64 as i64\n }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n for i in 0..M {\n self[i].stream_serialize(writer);\n }\n }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut result: [T; M] = std::mem::zeroed();\n for i in 0..M {\n result[i] = T::stream_deserialize(reader);\n }\n result\n }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N + 1;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write_bool(self.is_some());\n if self.is_some() {\n self.unwrap_unchecked().stream_serialize(writer);\n } else {\n writer.advance_offset(<T as Serialize>::N);\n }\n }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n if reader.read_bool() {\n Option::some(<T as Deserialize>::stream_deserialize(reader))\n } else {\n reader.advance_offset(<T as Deserialize>::N);\n Option::none()\n }\n }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n let N: u32 = SCALAR_SIZE;\n\n fn serialize(self) -> [Field; SCALAR_SIZE] {\n [self.lo, self.hi]\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.lo);\n writer.write(self.hi);\n }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n let N: u32 = SCALAR_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { lo: fields[0], hi: fields[1] }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { lo: reader.read(), hi: reader.read() }\n }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn serialize(self) -> [Field; Self::N] {\n [self.x, self.y, self.is_infinite as Field]\n }\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.x);\n writer.write(self.y);\n writer.write(self.is_infinite as Field);\n }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n let N: u32 = M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n str::<Self::N>::from(u8_arr)\n }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n let N: u32 = M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.as_bytes().stream_serialize(writer);\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n let payload_len = Self::N - 1;\n\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n let len = reader.peek_offset(payload_len) as u32;\n\n for i in 0..M {\n if i < len {\n new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n }\n }\n\n // +1 for the length of the BoundedVec\n reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n new_bounded_vec\n }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n let N: u32 = 0;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n ()\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.storage().stream_serialize(writer);\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n writer.write_u32(self.len() as u32);\n }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n let mut slice = @[];\n for i in 0..length {\n slice = slice.push_back(f(i));\n }\n slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n // `T0`, `T1`, `T2`\n let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n // `result0`, `result1`, `result2`\n let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n // `T0, T1, T2`\n let field_generics = type_names.join(quote [,]);\n\n // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n let full_size_serialize = type_names\n .map(|type_name| quote {\n <$type_name as Serialize>::N\n })\n .join(quote [+]);\n\n // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n let full_size_deserialize = type_names\n .map(|type_name| quote {\n <$type_name as Deserialize>::N\n })\n .join(quote [+]);\n\n // `T0: Serialize, T1: Serialize, T2: Serialize,`\n let serialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Serialize,\n })\n .join(quote []);\n\n // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n let deserialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Deserialize,\n })\n .join(quote []);\n\n // Statements to serialize each field\n let serialized_fields = type_names\n .mapi(|i, _type_name| quote {\n $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n })\n .join(quote []);\n\n // Statements to deserialize each field\n let deserialized_fields = type_names\n .mapi(|i, type_name| {\n let result_name = result_names[i];\n quote {\n let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote []);\n let deserialize_results = result_names.join(quote [,]);\n\n quote {\n impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n let N: u32 = $full_size_serialize;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n $serialized_fields\n }\n }\n\n impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n let N: u32 = $full_size_deserialize;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n \n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $deserialized_fields\n ($deserialize_results)\n }\n }\n }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n T1: Serialize,\n{\n let N: u32 = <T1 as Serialize>::N;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.0.stream_serialize(writer);\n }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n T1: Deserialize,\n{\n let N: u32 = <T1 as Deserialize>::N;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n (<T1 as Deserialize>::stream_deserialize(reader),)\n }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n use crate::serialization::{Deserialize, Serialize};\n}\n"
|
|
4259
|
+
"source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 1;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for bool {\n let N: u32 = BOOL_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n reader.read() != 0\n }\n}\n\nimpl Serialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u1 {\n let N: u32 = U1_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u1\n }\n}\n\nimpl Serialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u8 {\n let N: u32 = U8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8\n }\n}\n\nimpl Serialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u16 {\n let N: u32 = U16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16\n }\n}\n\nimpl Serialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u32 {\n let N: u32 = U32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32\n }\n}\n\nimpl Serialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u64 {\n let N: u32 = U64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64\n }\n}\n\nimpl Serialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as Field);\n }\n}\n\nimpl Deserialize for u128 {\n let N: u32 = U128_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u128\n }\n}\n\nimpl Serialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self);\n }\n}\n\nimpl Deserialize for Field {\n let N: u32 = FIELD_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read()\n }\n}\n\nimpl Serialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u8 as Field);\n }\n}\n\nimpl Deserialize for i8 {\n let N: u32 = I8_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u8 as i8\n }\n}\n\nimpl Serialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u16 as Field);\n }\n}\n\nimpl Deserialize for i16 {\n let N: u32 = I16_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u16 as i16\n }\n}\n\nimpl Serialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u32 as Field);\n }\n}\n\nimpl Deserialize for i32 {\n let N: u32 = I32_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u32 as i32\n }\n}\n\nimpl Serialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self as u64 as Field);\n }\n}\n\nimpl Deserialize for i64 {\n let N: u32 = I64_SERIALIZED_LEN;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n reader.read() as u64 as i64\n }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n for i in 0..M {\n self[i].stream_serialize(writer);\n }\n }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut result: [T; M] = std::mem::zeroed();\n for i in 0..M {\n result[i] = T::stream_deserialize(reader);\n }\n result\n }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N + 1;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write_bool(self.is_some());\n if self.is_some() {\n self.unwrap_unchecked().stream_serialize(writer);\n } else {\n writer.advance_offset(<T as Serialize>::N);\n }\n }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n if reader.read_bool() {\n Option::some(<T as Deserialize>::stream_deserialize(reader))\n } else {\n reader.advance_offset(<T as Deserialize>::N);\n Option::none()\n }\n }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n let N: u32 = SCALAR_SIZE;\n\n fn serialize(self) -> [Field; SCALAR_SIZE] {\n [self.lo, self.hi]\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.lo);\n writer.write(self.hi);\n }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n let N: u32 = SCALAR_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { lo: fields[0], hi: fields[1] }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { lo: reader.read(), hi: reader.read() }\n }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn serialize(self) -> [Field; Self::N] {\n [self.x, self.y, self.is_infinite as Field]\n }\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n writer.write(self.x);\n writer.write(self.y);\n writer.write(self.is_infinite as Field);\n }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n let N: u32 = POINT_SIZE;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n let N: u32 = M;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n str::<Self::N>::from(u8_arr)\n }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n let N: u32 = M;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.as_bytes().stream_serialize(writer);\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n T: Deserialize,\n{\n let N: u32 = <T as Deserialize>::N * M + 1;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n let payload_len = Self::N - 1;\n\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n let len = reader.peek_offset(payload_len) as u32;\n\n for i in 0..M {\n if i < len {\n new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n }\n }\n\n // +1 for the length of the BoundedVec\n reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n new_bounded_vec\n }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n let N: u32 = 0;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n ()\n }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n T: Serialize,\n{\n let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: Writer<Self::N> = Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.storage().stream_serialize(writer);\n // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n writer.write_u32(self.len() as u32);\n }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n let mut slice = @[];\n for i in 0..length {\n slice = slice.push_back(f(i));\n }\n slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n // `T0`, `T1`, `T2`\n let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n // `result0`, `result1`, `result2`\n let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n // `T0, T1, T2`\n let field_generics = type_names.join(quote [,]);\n\n // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n let full_size_serialize = type_names\n .map(|type_name| quote {\n <$type_name as Serialize>::N\n })\n .join(quote [+]);\n\n // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n let full_size_deserialize = type_names\n .map(|type_name| quote {\n <$type_name as Deserialize>::N\n })\n .join(quote [+]);\n\n // `T0: Serialize, T1: Serialize, T2: Serialize,`\n let serialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Serialize,\n })\n .join(quote []);\n\n // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n let deserialize_constraints = type_names\n .map(|field_name| quote {\n $field_name: Deserialize,\n })\n .join(quote []);\n\n // Statements to serialize each field\n let serialized_fields = type_names\n .mapi(|i, _type_name| quote {\n $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n })\n .join(quote []);\n\n // Statements to deserialize each field\n let deserialized_fields = type_names\n .mapi(|i, type_name| {\n let result_name = result_names[i];\n quote {\n let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote []);\n let deserialize_results = result_names.join(quote [,]);\n\n quote {\n impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n let N: u32 = $full_size_serialize;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n $serialized_fields\n }\n }\n\n impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n let N: u32 = $full_size_deserialize;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n \n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $deserialized_fields\n ($deserialize_results)\n }\n }\n }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n T1: Serialize,\n{\n let N: u32 = <T1 as Serialize>::N;\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n self.stream_serialize(&mut writer);\n writer.finish()\n }\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n self.0.stream_serialize(writer);\n }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n T1: Deserialize,\n{\n let N: u32 = <T1 as Deserialize>::N;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n (<T1 as Deserialize>::stream_deserialize(reader),)\n }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n use crate::serialization::{Deserialize, Serialize};\n}\n"
|
|
4260
4260
|
},
|
|
4261
4261
|
"460": {
|
|
4262
4262
|
"path": "/home/aztec-dev/nargo/github.com/noir-lang/sha256/v0.3.0/src/sha256.nr",
|
|
@@ -4268,15 +4268,15 @@
|
|
|
4268
4268
|
},
|
|
4269
4269
|
"51": {
|
|
4270
4270
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/fee_juice_contract/src/lib.nr",
|
|
4271
|
-
"source": "use aztec::context::PublicContext;\nuse aztec::protocol::address::AztecAddress;\nuse aztec::protocol::hash::sha256_to_field;\nuse aztec::protocol::traits::ToField;\n\npub fn calculate_fee<TPublicContext>(context: PublicContext) -> Field {\n context.transaction_fee()\n}\n\npub fn get_bridge_gas_msg_hash(owner: AztecAddress, amount: u128) -> Field {\n let mut hash_bytes = [0; 68];\n let recipient_bytes: [u8; 32] = owner.to_field().to_be_bytes();\n let amount_bytes: [u8; 32] = (amount as Field).to_be_bytes();\n\n // The purpose of including the following selector is to make the message unique to that specific call. Note that\n // it has nothing to do with calling the function.\n let selector = comptime { keccak256::keccak256(\"claim(bytes32,uint256)\".as_bytes(), 22) };\n\n for i in 0..4 {\n hash_bytes[i] = selector[i];\n }\n\n for i in 0..32 {\n hash_bytes[i + 4] = recipient_bytes[i];\n hash_bytes[i + 36] = amount_bytes[i];\n }\n\n let content_hash = sha256_to_field(hash_bytes);\n content_hash\n}\n"
|
|
4271
|
+
"source": "use aztec::context::PublicContext;\nuse aztec::protocol::address::AztecAddress;\nuse aztec::protocol::hash::sha256_to_field;\nuse aztec::protocol::traits::ToField;\n\npub fn calculate_fee<TPublicContext>(context: PublicContext) -> Field {\n context.transaction_fee()\n}\n\n/// Computes the content hash for an L1-to-L2 \"bridge gas\" message, matching the hash produced on L1 by\n/// `FeeJuicePortal.depositToAztecPublic`: `sha256ToField(abi.encodeWithSignature(\"claim(bytes32,uint256)\", to, amount))`.\n///\n/// The 68-byte buffer is: [4-byte selector of \"claim(bytes32,uint256)\"][32-byte recipient][32-byte amount], hashed\n/// with `sha256_to_field` to produce a single Field.\npub fn get_bridge_gas_msg_hash(owner: AztecAddress, amount: u128) -> Field {\n let mut hash_bytes = [0; 68];\n let recipient_bytes: [u8; 32] = owner.to_field().to_be_bytes();\n let amount_bytes: [u8; 32] = (amount as Field).to_be_bytes();\n\n // The purpose of including the following selector is to make the message unique to that specific call. Note that\n // it has nothing to do with calling the function.\n let selector = comptime { keccak256::keccak256(\"claim(bytes32,uint256)\".as_bytes(), 22) };\n\n for i in 0..4 {\n hash_bytes[i] = selector[i];\n }\n\n for i in 0..32 {\n hash_bytes[i + 4] = recipient_bytes[i];\n hash_bytes[i + 36] = amount_bytes[i];\n }\n\n let content_hash = sha256_to_field(hash_bytes);\n content_hash\n}\n"
|
|
4272
4272
|
},
|
|
4273
4273
|
"52": {
|
|
4274
4274
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/fee_juice_contract/src/main.nr",
|
|
4275
|
-
"source": "mod lib;\n\npub contract FeeJuice {\n use crate::lib::get_bridge_gas_msg_hash;\n use aztec::{\n protocol::{\n abis::function_selector::FunctionSelector,\n address::{AztecAddress, EthAddress},\n constants::FEE_JUICE_ADDRESS,\n traits::{Deserialize, ToField},\n },\n state_vars::{Map, PublicMutable},\n };\n use std::ops::Add;\n\n struct Storage<Context> {\n // This map is accessed directly by protocol circuits to check balances for fee payment.\n // Do not change this storage layout unless you also update the base rollup circuits.\n balances: Map<AztecAddress, PublicMutable<u128, Context>, Context>,\n }\n\n global INCREASE_PUBLIC_BALANCE_SELECTOR: Field = comptime {\n FunctionSelector::from_signature(\"_increase_public_balance((Field),u128)\").to_field()\n };\n global CHECK_BALANCE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"check_balance(u128)\").to_field() };\n global BALANCE_OF_PUBLIC_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"balance_of_public((Field))\").to_field() };\n\n /// Verifies that a message from L1 exists with the correct claim information, consumes it (emitting a nullifier)\n /// and enqueues the increase in public balance of the recipient.\n #[contract_library_method]\n fn claim_helper(\n context: &mut aztec::context::PrivateContext,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) {\n let content_hash: Field = get_bridge_gas_msg_hash(to, amount);\n let portal_address: EthAddress = EthAddress::from_field(FEE_JUICE_ADDRESS.to_field());\n assert(!portal_address.is_zero());\n\n // Consume message and emit nullifier\n context.consume_l1_to_l2_message(content_hash, secret, portal_address, message_leaf_index);\n\n // Enqueue call to _increase_public_balance\n // Note: The rest of the function body used to be `self.enqueue_self._increase_public_balance(to, amount);`\n // before de-macroification.\n let serialized_params: [Field; 2] = [to.to_field(), amount.to_field()];\n let calldata: [Field; 1 + 2] = [INCREASE_PUBLIC_BALANCE_SELECTOR].concat(serialized_params);\n let calldata_hash: Field = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n context.call_public_function_with_calldata_hash(\n context.this_address(),\n calldata_hash,\n false,\n false,\n );\n }\n\n /// Claims FeeJuice by consuming an L1 to L2 message with the provided information.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn claim(\n inputs: aztec::context::inputs::PrivateContextInputs,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n // Note: The macros initially inserted a phase check here, but since there is no phase change in this function.\n // nor in the claim helper function or the enqueued public function call, I have removed that check.\n aztec::oracle::version::assert_compatible_oracle_version();\n let serialized_params: [Field; 4] =\n [to.to_field(), amount.to_field(), secret, message_leaf_index];\n let args_hash: Field = aztec::hash::hash_args(serialized_params);\n let mut context: aztec::context::PrivateContext =\n aztec::context::PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n claim_helper(&mut context, to, amount, secret, message_leaf_index);\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /// Claims FeeJuice by consuming an L1 to L2 message with the provided information. After enqueuing the\n /// the balance increase it ends the setup phase, making sure the claim happens in the non-revertible phase\n /// of the transaction. This variant should only be used when the intent is to pay the transaction fee via\n /// the claimed fee juice in a single interaction.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn claim_and_end_setup(\n inputs: aztec::context::inputs::PrivateContextInputs,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n aztec::oracle::version::assert_compatible_oracle_version();\n let serialized_params: [Field; 4] =\n [to.to_field(), amount.to_field(), secret, message_leaf_index];\n let args_hash: Field = aztec::hash::hash_args(serialized_params);\n let mut context: aztec::context::PrivateContext =\n aztec::context::PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n claim_helper(&mut context, to, amount, secret, message_leaf_index);\n\n // MACRO CODE START\n context.end_setup();\n context.finish()\n // MACRO CODE END\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_only_self]\n unconstrained fn _increase_public_balance(to: AztecAddress, amount: u128) {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N\n + <u128 as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(\n context.maybe_msg_sender().unwrap() == context.this_address(),\n \"Function _increase_public_balance can only be called by the same contract\",\n );\n // MACRO CODE END\n\n let new_balance = storage.balances.at(to).read().add(amount);\n storage.balances.at(to).write(new_balance);\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn check_balance(fee_limit: u128) {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <u128 as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(context.is_static_call(), \"Function check_balance can only be called statically\");\n // MACRO CODE END\n\n assert(\n storage.balances.at(context.maybe_msg_sender().unwrap()).read() >= fee_limit,\n \"Balance too low\",\n );\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn balance_of_public(owner: AztecAddress) -> pub u128 {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(\n context.is_static_call(),\n \"Function balance_of_public can only be called statically\",\n );\n // MACRO CODE END\n\n storage.balances.at(owner).read()\n }\n\n // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == INCREASE_PUBLIC_BALANCE_SELECTOR {\n let input_calldata: [Field; 2] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N\n + <u128 as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<2> =\n aztec::protocol::utils::reader::Reader::<2>::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let arg1: u128 = <u128 as Deserialize>::stream_deserialize(&mut reader);\n _increase_public_balance(arg0, arg1);\n aztec::oracle::avm::avm_return([].as_vector());\n };\n if selector == CHECK_BALANCE_SELECTOR {\n let input_calldata: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <u128 as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<1> =\n aztec::protocol::utils::reader::Reader::<1>::new(input_calldata);\n let arg0: u128 = <u128 as Deserialize>::stream_deserialize(&mut reader);\n check_balance(arg0);\n aztec::oracle::avm::avm_return([].as_vector());\n };\n if selector == BALANCE_OF_PUBLIC_SELECTOR {\n let input_calldata: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<1> =\n aztec::protocol::utils::reader::Reader::<1>::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let return_value: [Field; 1] =\n <u128 as aztec::protocol::traits::Serialize>::serialize(balance_of_public(arg0));\n aztec::oracle::avm::avm_return(return_value.as_vector());\n };\n panic(f\"Unknown selector {selector}\")\n }\n\n pub struct StorageLayoutFields {\n pub balances: aztec::state_vars::Storable,\n }\n\n pub struct StorageLayout<let N: u32> {\n pub contract_name: str<N>,\n pub fields: StorageLayoutFields,\n }\n\n #[abi(storage)]\n pub global STORAGE_LAYOUT_FeeJuice: StorageLayout<8> = StorageLayout::<8> {\n contract_name: \"FeeJuice\",\n fields: StorageLayoutFields { balances: aztec::state_vars::Storable { slot: 1 } },\n };\n\n impl<Context> Storage<Context> {\n fn init(context: Context) -> Self {\n Self {\n balances: <Map<AztecAddress, PublicMutable<u128, Context>, Context> as aztec::state_vars::StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n }\n }\n }\n pub struct _increase_public_balance_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n }\n\n pub struct balance_of_public_parameters {\n pub _owner: AztecAddress,\n }\n\n pub struct check_balance_parameters {\n pub _fee_limit: u128,\n }\n\n pub struct claim_and_end_setup_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n pub _secret: Field,\n pub _message_leaf_index: Field,\n }\n\n pub struct claim_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n pub _secret: Field,\n pub _message_leaf_index: Field,\n }\n\n #[abi(functions)]\n pub struct _increase_public_balance_abi {\n parameters: _increase_public_balance_parameters,\n }\n\n #[abi(functions)]\n pub struct balance_of_public_abi {\n parameters: balance_of_public_parameters,\n return_type: u128,\n }\n\n #[abi(functions)]\n pub struct check_balance_abi {\n parameters: check_balance_parameters,\n }\n\n #[abi(functions)]\n pub struct claim_abi {\n parameters: claim_parameters,\n }\n\n #[abi(functions)]\n pub struct claim_and_end_setup_abi {\n parameters: claim_and_end_setup_parameters,\n }\n}\n"
|
|
4275
|
+
"source": "/// Protocol contract that manages the native gas token (\"Fee Juice\") used to pay transaction fees.\n///\n/// Fee Juice is minted on L2 by bridging from L1: a user deposits ERC-20 tokens into the L1 FeeJuicePortal, which\n/// sends an L1-to-L2 message. On L2, `claim` or `claim_and_end_setup` consumes that message and credits the\n/// recipient's balance via an enqueued public call to `_increase_public_balance`.\n///\n/// The protocol's base rollup circuits read directly from this contract's `balances` storage map (at slot 1) to verify\n/// fee payers can cover their transaction costs. This storage layout is protocol-critical and must not change without\n/// updating the base rollup circuits.\n///\n/// There is no withdrawal mechanism -- Fee Juice can only be bridged in, not withdrawn or transferred by users. Tokens\n/// leave the L1 portal only via `distributeFees` called by the Rollup contract to pay sequencers.\n\nmod lib;\n\npub contract FeeJuice {\n use crate::lib::get_bridge_gas_msg_hash;\n use aztec::{\n protocol::{\n abis::function_selector::FunctionSelector,\n address::{AztecAddress, EthAddress},\n constants::FEE_JUICE_ADDRESS,\n traits::{Deserialize, ToField},\n },\n state_vars::{Map, PublicMutable},\n };\n use std::ops::Add;\n\n struct Storage<Context> {\n // contract address --> public fee juice balance\n balances: Map<AztecAddress, PublicMutable<u128, Context>, Context>,\n }\n\n global INCREASE_PUBLIC_BALANCE_SELECTOR: Field = comptime {\n FunctionSelector::from_signature(\"_increase_public_balance((Field),u128)\").to_field()\n };\n\n global CHECK_BALANCE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"check_balance(u128)\").to_field() };\n\n global BALANCE_OF_PUBLIC_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"balance_of_public((Field))\").to_field() };\n\n /// A helper implementing the core L1-to-L2 message claim logic shared by `claim` and `claim_and_end_setup`.\n /// Computes the expected content hash, consumes the L1-to-L2 message (emitting a nullifier to prevent\n /// double-claiming), and enqueues a public call to `_increase_public_balance` to credit the recipient.\n #[contract_library_method]\n fn claim_helper(\n context: &mut aztec::context::PrivateContext,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) {\n let content_hash: Field = get_bridge_gas_msg_hash(to, amount);\n let portal_address: EthAddress = EthAddress::from_field(FEE_JUICE_ADDRESS.to_field());\n assert(!portal_address.is_zero());\n\n // Consume the L1-to-L2 message (verifies existence + emits nullifier to prevent replay).\n context.consume_l1_to_l2_message(content_hash, secret, portal_address, message_leaf_index);\n\n // Enqueue a public call to _increase_public_balance to credit the recipient.\n let serialized_params: [Field; 2] = [to.to_field(), amount.to_field()];\n let calldata: [Field; 1 + 2] = [INCREASE_PUBLIC_BALANCE_SELECTOR].concat(serialized_params);\n let calldata_hash: Field = aztec::hash::hash_calldata_array(calldata);\n aztec::oracle::execution_cache::store(calldata, calldata_hash);\n context.call_public_function_with_calldata_hash(\n context.this_address(),\n calldata_hash,\n false,\n false,\n );\n }\n\n /// Claims Fee Juice by consuming an L1-to-L2 message from the FeeJuicePortal.\n ///\n /// Use this variant when the claimed Fee Juice is NOT intended to pay for the current transaction's fees (e.g.,\n /// pre-funding an account for future transactions).\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn claim(\n inputs: aztec::context::inputs::PrivateContextInputs,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n // Note: The macros initially inserted a phase check here, but since there is no phase change in this function\n // nor in the claim helper function or the enqueued public function call, I have removed that check.\n aztec::oracle::version::assert_compatible_oracle_version();\n let serialized_params: [Field; 4] =\n [to.to_field(), amount.to_field(), secret, message_leaf_index];\n let args_hash: Field = aztec::hash::hash_args(serialized_params);\n let mut context: aztec::context::PrivateContext =\n aztec::context::PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n claim_helper(&mut context, to, amount, secret, message_leaf_index);\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /// Claims Fee Juice and ends the transaction setup phase.\n ///\n /// Use this variant when the claimed Fee Juice is intended to pay for THIS transaction's fees. By ending setup\n /// after the claim, the balance increase is placed in the non-revertible phase, ensuring the fee payer's balance\n /// is credited even if the revertible portion of the transaction fails. This guarantees the sequencer can collect\n /// fees.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn claim_and_end_setup(\n inputs: aztec::context::inputs::PrivateContextInputs,\n to: AztecAddress,\n amount: u128,\n secret: Field,\n message_leaf_index: Field,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n aztec::oracle::version::assert_compatible_oracle_version();\n let serialized_params: [Field; 4] =\n [to.to_field(), amount.to_field(), secret, message_leaf_index];\n let args_hash: Field = aztec::hash::hash_args(serialized_params);\n let mut context: aztec::context::PrivateContext =\n aztec::context::PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n claim_helper(&mut context, to, amount, secret, message_leaf_index);\n\n // MACRO CODE START\n // End setup: everything before this point (including the enqueued _increase_public_balance\n // call) is non-revertible. Everything after is revertible.\n context.end_setup();\n context.finish()\n // MACRO CODE END\n }\n\n /// Internal function that credits a recipient's Fee Juice balance. Only callable by this contract itself\n /// (`#[only_self]`), enqueued by `claim` / `claim_and_end_setup` after consuming an L1-to-L2 message.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_only_self]\n unconstrained fn _increase_public_balance(to: AztecAddress, amount: u128) {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N\n + <u128 as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(\n context.maybe_msg_sender().unwrap() == context.this_address(),\n \"Function _increase_public_balance can only be called by the same contract\",\n );\n // MACRO CODE END\n\n let new_balance = storage.balances.at(to).read().add(amount);\n storage.balances.at(to).write(new_balance);\n }\n\n /// Asserts the caller has at least `fee_limit` Fee Juice. Used during transaction validation to verify the fee\n /// payer can cover the transaction's fee limit.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn check_balance(fee_limit: u128) {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <u128 as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(context.is_static_call(), \"Function check_balance can only be called statically\");\n // MACRO CODE END\n\n assert(\n storage.balances.at(context.maybe_msg_sender().unwrap()).read() >= fee_limit,\n \"Balance too low\",\n );\n }\n\n /// Returns the Fee Juice balance of the given address.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn balance_of_public(owner: AztecAddress) -> pub u128 {\n // MACRO CODE START\n let context: aztec::context::PublicContext = aztec::context::PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N,\n );\n aztec::hash::hash_args(serialized_args)\n },\n );\n let storage: Storage<aztec::context::PublicContext> =\n Storage::<aztec::context::PublicContext>::init(context);\n\n assert(\n context.is_static_call(),\n \"Function balance_of_public can only be called statically\",\n );\n // MACRO CODE END\n\n storage.balances.at(owner).read()\n }\n\n // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == INCREASE_PUBLIC_BALANCE_SELECTOR {\n let input_calldata: [Field; 2] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N\n + <u128 as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<2> =\n aztec::protocol::utils::reader::Reader::<2>::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let arg1: u128 = <u128 as Deserialize>::stream_deserialize(&mut reader);\n _increase_public_balance(arg0, arg1);\n aztec::oracle::avm::avm_return([].as_vector());\n };\n if selector == CHECK_BALANCE_SELECTOR {\n let input_calldata: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <u128 as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<1> =\n aztec::protocol::utils::reader::Reader::<1>::new(input_calldata);\n let arg0: u128 = <u128 as Deserialize>::stream_deserialize(&mut reader);\n check_balance(arg0);\n aztec::oracle::avm::avm_return([].as_vector());\n };\n if selector == BALANCE_OF_PUBLIC_SELECTOR {\n let input_calldata: [Field; 1] = aztec::oracle::avm::calldata_copy(\n 1,\n <AztecAddress as aztec::protocol::traits::Serialize>::N,\n );\n let mut reader: aztec::protocol::utils::reader::Reader<1> =\n aztec::protocol::utils::reader::Reader::<1>::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let return_value: [Field; 1] =\n <u128 as aztec::protocol::traits::Serialize>::serialize(balance_of_public(arg0));\n aztec::oracle::avm::avm_return(return_value.as_vector());\n };\n panic(f\"Unknown selector {selector}\")\n }\n\n pub struct StorageLayoutFields {\n pub balances: aztec::state_vars::Storable,\n }\n\n pub struct StorageLayout<let N: u32> {\n pub contract_name: str<N>,\n pub fields: StorageLayoutFields,\n }\n\n #[abi(storage)]\n pub global STORAGE_LAYOUT_FeeJuice: StorageLayout<8> = StorageLayout::<8> {\n contract_name: \"FeeJuice\",\n fields: StorageLayoutFields { balances: aztec::state_vars::Storable { slot: 1 } },\n };\n\n impl<Context> Storage<Context> {\n fn init(context: Context) -> Self {\n Self {\n balances: <Map<AztecAddress, PublicMutable<u128, Context>, Context> as aztec::state_vars::StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n }\n }\n }\n\n pub struct _increase_public_balance_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n }\n\n pub struct balance_of_public_parameters {\n pub _owner: AztecAddress,\n }\n\n pub struct check_balance_parameters {\n pub _fee_limit: u128,\n }\n\n pub struct claim_and_end_setup_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n pub _secret: Field,\n pub _message_leaf_index: Field,\n }\n\n pub struct claim_parameters {\n pub _to: AztecAddress,\n pub _amount: u128,\n pub _secret: Field,\n pub _message_leaf_index: Field,\n }\n\n #[abi(functions)]\n pub struct _increase_public_balance_abi {\n parameters: _increase_public_balance_parameters,\n }\n\n #[abi(functions)]\n pub struct balance_of_public_abi {\n parameters: balance_of_public_parameters,\n return_type: u128,\n }\n\n #[abi(functions)]\n pub struct check_balance_abi {\n parameters: check_balance_parameters,\n }\n\n #[abi(functions)]\n pub struct claim_abi {\n parameters: claim_parameters,\n }\n\n #[abi(functions)]\n pub struct claim_and_end_setup_abi {\n parameters: claim_and_end_setup_parameters,\n }\n}\n"
|
|
4276
4276
|
},
|
|
4277
4277
|
"59": {
|
|
4278
4278
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/context/private_context.nr",
|
|
4279
|
-
"source": "use crate::{\n context::{inputs::PrivateContextInputs, NullifierExistenceRequest, ReturnsHash},\n hash::hash_args,\n messaging::process_l1_to_l2_message,\n oracle::{\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n is_side_effect_counter_revertible_oracle_wrapper, notify_enqueued_public_function_call,\n notify_set_min_revertible_side_effect_counter,\n },\n execution_cache,\n logs::notify_created_contract_class_log,\n nullifiers::notify_created_nullifier,\n },\n};\nuse crate::protocol::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n function_selector::FunctionSelector,\n gas_settings::GasSettings,\n log_hash::LogHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::{PrivateLog, PrivateLogData},\n public_call_request::PublicCallRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, MAX_CONTRACT_CLASS_LOGS_PER_CALL,\n MAX_ENQUEUED_CALLS_PER_CALL, MAX_INCLUDE_BY_TIMESTAMP_DURATION, MAX_L2_TO_L1_MSGS_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 NULL_MSG_SENDER_CONTRACT_ADDRESS, PRIVATE_LOG_SIZE_IN_FIELDS,\n },\n hash::poseidon2_hash,\n messaging::l2_to_l1_message::L2ToL1Message,\n side_effect::{Counted, scoped::Scoped},\n traits::Empty,\n utils::arrays::{ClaimedLengthArray, trimmed_array_length_hint},\n};\n\n/// Minimal PrivateContext for protocol contracts going to audit.\n/// Contains only the methods actually used by: fee_juice, auth_registry, contract_class_registry, contract_instance_registry\n#[derive(Eq)]\npub struct PrivateContext {\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 include_by_timestamp: u64,\n\n pub nullifier_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n\n pub nullifiers: BoundedVec<Counted<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<Counted<L2ToL1Message>, MAX_L2_TO_L1_MSGS_PER_CALL>,\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub anchor_block_header: BlockHeader,\n\n pub private_logs: BoundedVec<Counted<PrivateLogData>, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<Counted<LogHash>, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n pub expected_non_revertible_side_effect_counter: u32,\n pub expected_revertible_side_effect_counter: u32,\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n let max_allowed_include_by_timestamp = inputs.anchor_block_header.global_variables.timestamp\n + MAX_INCLUDE_BY_TIMESTAMP_DURATION;\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 include_by_timestamp: max_allowed_include_by_timestamp,\n nullifier_read_requests: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n anchor_block_header: inputs.anchor_block_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 expected_non_revertible_side_effect_counter: 0,\n expected_revertible_side_effect_counter: 0,\n }\n }\n\n /// Returns the contract address that initiated this function call (similar to msg.sender in Solidity).\n pub fn maybe_msg_sender(self) -> Option<AztecAddress> {\n let maybe_msg_sender = self.inputs.call_context.msg_sender;\n if maybe_msg_sender == NULL_MSG_SENDER_CONTRACT_ADDRESS {\n Option::none()\n } else {\n Option::some(maybe_msg_sender)\n }\n }\n\n /// Returns the contract address of the current function being executed.\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n /// Returns the chain ID of the current network.\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n /// Returns the protocol version.\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n /// Returns the gas settings for the current transaction.\n pub fn gas_settings(self) -> GasSettings {\n self.inputs.tx_context.gas_settings\n }\n\n /// Returns the function selector of the currently executing function.\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n /// Returns the hash of the arguments passed to the current function.\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n /// Returns the anchor block header.\n pub fn get_anchor_block_header(self) -> BlockHeader {\n self.anchor_block_header\n }\n\n /// Sets the hash of the return values for this private function.\n pub fn set_return_hash<let N: u32>(&mut self, serialized_return_values: [Field; N]) {\n let return_hash = hash_args(serialized_return_values);\n self.return_hash = return_hash;\n execution_cache::store(serialized_return_values, return_hash);\n }\n\n /// Builds the PrivateCircuitPublicInputs for this private function.\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 include_by_timestamp: self.include_by_timestamp,\n note_hash_read_requests: ClaimedLengthArray::empty(), // Not used by protocol contracts\n nullifier_read_requests: ClaimedLengthArray::from_bounded_vec(\n self.nullifier_read_requests,\n ),\n key_validation_requests_and_generators: ClaimedLengthArray::empty(), // Not used by protocol contracts\n note_hashes: ClaimedLengthArray::empty(), // Not used by protocol contracts\n nullifiers: ClaimedLengthArray::from_bounded_vec(self.nullifiers),\n private_call_requests: ClaimedLengthArray::from_bounded_vec(self.private_call_requests),\n public_call_requests: ClaimedLengthArray::from_bounded_vec(self.public_call_requests),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: ClaimedLengthArray::from_bounded_vec(self.l2_to_l1_msgs),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: ClaimedLengthArray::from_bounded_vec(self.private_logs),\n contract_class_logs_hashes: ClaimedLengthArray::from_bounded_vec(\n self.contract_class_logs_hashes,\n ),\n anchor_block_header: self.anchor_block_header,\n tx_context: self.inputs.tx_context,\n expected_non_revertible_side_effect_counter: self\n .expected_non_revertible_side_effect_counter,\n expected_revertible_side_effect_counter: self.expected_revertible_side_effect_counter,\n }\n }\n\n /// Declares the end of the \"setup phase\" of this tx. Used by fee_juice.\n pub fn end_setup(&mut self) {\n self.side_effect_counter += 1;\n self.min_revertible_side_effect_counter = self.next_counter();\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n pub fn in_revertible_phase(&mut self) -> bool {\n let current_counter = self.side_effect_counter;\n\n // Safety: Kernel will validate that the claim is correct by validating the expected counters.\n let is_revertible =\n unsafe { is_side_effect_counter_revertible_oracle_wrapper(current_counter) };\n\n if is_revertible {\n if (self.expected_revertible_side_effect_counter == 0)\n | (current_counter < self.expected_revertible_side_effect_counter) {\n self.expected_revertible_side_effect_counter = current_counter;\n }\n } else if current_counter > self.expected_non_revertible_side_effect_counter {\n self.expected_non_revertible_side_effect_counter = current_counter;\n }\n\n is_revertible\n }\n\n /// Sets a deadline for when this transaction must be included in a block.\n pub fn set_include_by_timestamp(&mut self, include_by_timestamp: u64) {\n self.include_by_timestamp = std::cmp::min(self.include_by_timestamp, include_by_timestamp);\n }\n\n /// Pushes a new nullifier. Used by class_registry and instance_registry.\n pub fn push_nullifier(&mut self, nullifier: Field) {\n notify_created_nullifier(nullifier);\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0 }.count(self.next_counter()));\n }\n\n /// Asserts that a nullifier has been emitted. Used by instance_registry.\n pub fn assert_nullifier_exists(\n &mut self,\n nullifier_existence_request: NullifierExistenceRequest,\n ) {\n let nullifier = nullifier_existence_request.nullifier();\n let contract_address =\n nullifier_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n let request = Scoped::new(\n Counted::new(nullifier, self.next_counter()),\n contract_address,\n );\n\n self.nullifier_read_requests.push(request);\n }\n\n /// Consumes a message sent from Ethereum (L1) to Aztec (L2). Used by fee_juice.\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 let nullifier = process_l1_to_l2_message(\n self.anchor_block_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\n /// Emits a private log. Used by instance_registry.\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS], length: u32) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: PrivateLog::new(log, length), note_hash_counter: 0 }\n .count(counter);\n self.private_logs.push(private_log);\n }\n\n /// Emits a contract class log. Used by class_registry.\n pub fn emit_contract_class_log<let N: u32>(&mut self, log: [Field; N]) {\n let contract_address = self.this_address();\n let counter = self.next_counter();\n\n let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] =\n log.concat([0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]);\n // Safety: The below length is constrained in the base rollup, which will make sure that all the fields beyond\n // length are zero. However, it won't be able to check that we didn't add extra padding (trailing zeroes) or\n // that we cut trailing zeroes from the end.\n let length = unsafe { trimmed_array_length_hint(log_to_emit) };\n // We hash the entire padded log to ensure a user cannot pass a shorter length and so emit incorrect shorter\n // bytecode.\n let log_hash = poseidon2_hash(log_to_emit);\n // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be\n // constrained.\n unsafe {\n notify_created_contract_class_log(contract_address, log_to_emit, length, counter);\n }\n\n self.contract_class_logs_hashes.push(LogHash { value: log_hash, length: length }.count(\n counter,\n ));\n }\n\n /// Makes a read-only call to a private function. Used by auth_registry for authwit.\n pub fn static_call_private_function<let ArgsCount: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ArgsCount],\n ) -> ReturnsHash {\n let args_hash = hash_args(args);\n execution_cache::store(args, args_hash);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n fn call_private_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> ReturnsHash {\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 // Safety: The oracle simulates the private call and returns the value of the side effects counter after\n // execution of the call.\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 self.side_effect_counter = end_side_effect_counter + 1;\n ReturnsHash::new(returns_hash)\n }\n\n /// Enqueues a call to a public function with a calldata hash. Used by fee_juice and auth_registry.\n pub fn call_public_function_with_calldata_hash(\n &mut self,\n contract_address: AztecAddress,\n calldata_hash: Field,\n is_static_call: bool,\n hide_msg_sender: 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\n notify_enqueued_public_function_call(\n contract_address,\n calldata_hash,\n counter,\n is_static_call,\n );\n\n let msg_sender = if hide_msg_sender {\n NULL_MSG_SENDER_CONTRACT_ADDRESS\n } else {\n self.this_address()\n };\n\n let call_request =\n PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\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 include_by_timestamp: 0,\n nullifier_read_requests: 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 anchor_block_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n expected_non_revertible_side_effect_counter: 0,\n expected_revertible_side_effect_counter: 0,\n }\n }\n}\n"
|
|
4279
|
+
"source": "use crate::{\n context::{inputs::PrivateContextInputs, NullifierExistenceRequest, ReturnsHash},\n hash::hash_args,\n messaging::process_l1_to_l2_message,\n oracle::{\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n is_side_effect_counter_revertible_oracle_wrapper, notify_enqueued_public_function_call,\n notify_set_min_revertible_side_effect_counter,\n },\n execution_cache,\n logs::notify_created_contract_class_log,\n nullifiers::notify_created_nullifier,\n },\n};\nuse crate::protocol::{\n abis::{\n block_header::BlockHeader,\n call_context::CallContext,\n function_selector::FunctionSelector,\n gas_settings::GasSettings,\n log_hash::LogHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::{PrivateLog, PrivateLogData},\n public_call_request::PublicCallRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, MAX_CONTRACT_CLASS_LOGS_PER_CALL,\n MAX_ENQUEUED_CALLS_PER_CALL, MAX_TX_LIFETIME, MAX_L2_TO_L1_MSGS_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 NULL_MSG_SENDER_CONTRACT_ADDRESS, PRIVATE_LOG_SIZE_IN_FIELDS,\n },\n hash::poseidon2_hash,\n messaging::l2_to_l1_message::L2ToL1Message,\n side_effect::{Counted, scoped::Scoped},\n traits::Empty,\n utils::arrays::{ClaimedLengthArray, trimmed_array_length_hint},\n};\n\n/// Minimal PrivateContext for protocol contracts going to audit.\n/// Contains only the methods actually used by: fee_juice, auth_registry, contract_class_registry, contract_instance_registry\n#[derive(Eq)]\npub struct PrivateContext {\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 expiration_timestamp: u64,\n\n pub nullifier_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n\n pub nullifiers: BoundedVec<Counted<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<Counted<L2ToL1Message>, MAX_L2_TO_L1_MSGS_PER_CALL>,\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub anchor_block_header: BlockHeader,\n\n pub private_logs: BoundedVec<Counted<PrivateLogData>, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<Counted<LogHash>, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n pub expected_non_revertible_side_effect_counter: u32,\n pub expected_revertible_side_effect_counter: u32,\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 expiration_timestamp: inputs.anchor_block_header.global_variables.timestamp\n + MAX_TX_LIFETIME,\n nullifier_read_requests: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n anchor_block_header: inputs.anchor_block_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 expected_non_revertible_side_effect_counter: 0,\n expected_revertible_side_effect_counter: 0,\n }\n }\n\n /// Returns the contract address that initiated this function call (similar to msg.sender in Solidity).\n pub fn maybe_msg_sender(self) -> Option<AztecAddress> {\n let maybe_msg_sender = self.inputs.call_context.msg_sender;\n if maybe_msg_sender == NULL_MSG_SENDER_CONTRACT_ADDRESS {\n Option::none()\n } else {\n Option::some(maybe_msg_sender)\n }\n }\n\n /// Returns the contract address of the current function being executed.\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n /// Returns the chain ID of the current network.\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n /// Returns the protocol version.\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n /// Returns the gas settings for the current transaction.\n pub fn gas_settings(self) -> GasSettings {\n self.inputs.tx_context.gas_settings\n }\n\n /// Returns the function selector of the currently executing function.\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n /// Returns the hash of the arguments passed to the current function.\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n /// Returns the anchor block header.\n pub fn get_anchor_block_header(self) -> BlockHeader {\n self.anchor_block_header\n }\n\n /// Sets the hash of the return values for this private function.\n pub fn set_return_hash<let N: u32>(&mut self, serialized_return_values: [Field; N]) {\n let return_hash = hash_args(serialized_return_values);\n self.return_hash = return_hash;\n execution_cache::store(serialized_return_values, return_hash);\n }\n\n /// Builds the PrivateCircuitPublicInputs for this private function.\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 expiration_timestamp: self.expiration_timestamp,\n note_hash_read_requests: ClaimedLengthArray::empty(), // Not used by protocol contracts\n nullifier_read_requests: ClaimedLengthArray::from_bounded_vec(\n self.nullifier_read_requests,\n ),\n key_validation_requests_and_generators: ClaimedLengthArray::empty(), // Not used by protocol contracts\n note_hashes: ClaimedLengthArray::empty(), // Not used by protocol contracts\n nullifiers: ClaimedLengthArray::from_bounded_vec(self.nullifiers),\n private_call_requests: ClaimedLengthArray::from_bounded_vec(self.private_call_requests),\n public_call_requests: ClaimedLengthArray::from_bounded_vec(self.public_call_requests),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: ClaimedLengthArray::from_bounded_vec(self.l2_to_l1_msgs),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: ClaimedLengthArray::from_bounded_vec(self.private_logs),\n contract_class_logs_hashes: ClaimedLengthArray::from_bounded_vec(\n self.contract_class_logs_hashes,\n ),\n anchor_block_header: self.anchor_block_header,\n tx_context: self.inputs.tx_context,\n expected_non_revertible_side_effect_counter: self\n .expected_non_revertible_side_effect_counter,\n expected_revertible_side_effect_counter: self.expected_revertible_side_effect_counter,\n }\n }\n\n /// Declares the end of the \"setup phase\" of this tx. Used by fee_juice.\n pub fn end_setup(&mut self) {\n self.side_effect_counter += 1;\n self.min_revertible_side_effect_counter = self.next_counter();\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n pub fn in_revertible_phase(&mut self) -> bool {\n let current_counter = self.side_effect_counter;\n\n // Safety: Kernel will validate that the claim is correct by validating the expected counters.\n let is_revertible =\n unsafe { is_side_effect_counter_revertible_oracle_wrapper(current_counter) };\n\n if is_revertible {\n if (self.expected_revertible_side_effect_counter == 0)\n | (current_counter < self.expected_revertible_side_effect_counter) {\n self.expected_revertible_side_effect_counter = current_counter;\n }\n } else if current_counter > self.expected_non_revertible_side_effect_counter {\n self.expected_non_revertible_side_effect_counter = current_counter;\n }\n\n is_revertible\n }\n\n /// Sets a deadline for when this transaction must be included in a block.\n pub fn set_expiration_timestamp(&mut self, expiration_timestamp: u64) {\n self.expiration_timestamp = std::cmp::min(self.expiration_timestamp, expiration_timestamp);\n }\n\n /// Pushes a new nullifier. Used by class_registry and instance_registry.\n pub fn push_nullifier(&mut self, nullifier: Field) {\n notify_created_nullifier(nullifier);\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0 }.count(self.next_counter()));\n }\n\n /// Asserts that a nullifier has been emitted. Used by instance_registry.\n pub fn assert_nullifier_exists(\n &mut self,\n nullifier_existence_request: NullifierExistenceRequest,\n ) {\n let nullifier = nullifier_existence_request.nullifier();\n let contract_address =\n nullifier_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n let request = Scoped::new(\n Counted::new(nullifier, self.next_counter()),\n contract_address,\n );\n\n self.nullifier_read_requests.push(request);\n }\n\n /// Consumes a message sent from Ethereum (L1) to Aztec (L2). Used by fee_juice.\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 let nullifier = process_l1_to_l2_message(\n self.anchor_block_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\n /// Emits a private log. Used by instance_registry.\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS], length: u32) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: PrivateLog::new(log, length), note_hash_counter: 0 }\n .count(counter);\n self.private_logs.push(private_log);\n }\n\n /// Emits a contract class log. Used by class_registry.\n pub fn emit_contract_class_log<let N: u32>(&mut self, log: [Field; N]) {\n let contract_address = self.this_address();\n let counter = self.next_counter();\n\n let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] =\n log.concat([0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]);\n // Safety: The below length is constrained in the base rollup, which will make sure that all the fields beyond\n // length are zero. However, it won't be able to check that we didn't add extra padding (trailing zeroes) or\n // that we cut trailing zeroes from the end.\n let length = unsafe { trimmed_array_length_hint(log_to_emit) };\n // We hash the entire padded log to ensure a user cannot pass a shorter length and so emit incorrect shorter\n // bytecode.\n let log_hash = poseidon2_hash(log_to_emit);\n // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be\n // constrained.\n unsafe {\n notify_created_contract_class_log(contract_address, log_to_emit, length, counter);\n }\n\n self.contract_class_logs_hashes.push(LogHash { value: log_hash, length: length }.count(\n counter,\n ));\n }\n\n /// Makes a read-only call to a private function. Used by auth_registry for authwit.\n pub fn static_call_private_function<let ArgsCount: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ArgsCount],\n ) -> ReturnsHash {\n let args_hash = hash_args(args);\n execution_cache::store(args, args_hash);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n fn call_private_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> ReturnsHash {\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 // Safety: The oracle simulates the private call and returns the value of the side effects counter after\n // execution of the call.\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 self.side_effect_counter = end_side_effect_counter + 1;\n ReturnsHash::new(returns_hash)\n }\n\n /// Enqueues a call to a public function with a calldata hash. Used by fee_juice and auth_registry.\n pub fn call_public_function_with_calldata_hash(\n &mut self,\n contract_address: AztecAddress,\n calldata_hash: Field,\n is_static_call: bool,\n hide_msg_sender: 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\n notify_enqueued_public_function_call(\n contract_address,\n calldata_hash,\n counter,\n is_static_call,\n );\n\n let msg_sender = if hide_msg_sender {\n NULL_MSG_SENDER_CONTRACT_ADDRESS\n } else {\n self.this_address()\n };\n\n let call_request =\n PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\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 expiration_timestamp: 0,\n nullifier_read_requests: 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 anchor_block_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n expected_non_revertible_side_effect_counter: 0,\n expected_revertible_side_effect_counter: 0,\n }\n }\n}\n"
|
|
4280
4280
|
},
|
|
4281
4281
|
"60": {
|
|
4282
4282
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/context/public_context.nr",
|
|
@@ -4284,7 +4284,7 @@
|
|
|
4284
4284
|
},
|
|
4285
4285
|
"63": {
|
|
4286
4286
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/hash.nr",
|
|
4287
|
-
"source": "//! Aztec hash functions.\n\nuse crate::protocol::{\n address::{AztecAddress, EthAddress},\n constants::{\n DOM_SEP__FUNCTION_ARGS, DOM_SEP__MESSAGE_NULLIFIER, DOM_SEP__PUBLIC_BYTECODE,\n DOM_SEP__PUBLIC_CALLDATA, DOM_SEP__SECRET_HASH, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS,\n },\n hash::{poseidon2_hash_subarray, poseidon2_hash_with_separator, sha256_to_field},\n traits::ToField,\n};\n\npub use crate::protocol::hash::compute_siloed_nullifier;\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], DOM_SEP__SECRET_HASH)\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], DOM_SEP__MESSAGE_NULLIFIER)\n}\n\n// Computes the hash of input arguments or return values for private functions, or for authwit creation.\npub fn hash_args<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, DOM_SEP__FUNCTION_ARGS)\n }\n}\n\n// Computes the hash of calldata for public functions.\npub fn hash_calldata_array<let N: u32>(calldata: [Field; N]) -> Field {\n poseidon2_hash_with_separator(calldata, DOM_SEP__PUBLIC_CALLDATA)\n}\n\n/// Computes the public bytecode commitment for a contract class. The commitment is `hash([separator
|
|
4287
|
+
"source": "//! Aztec hash functions.\n\nuse crate::protocol::{\n address::{AztecAddress, EthAddress},\n constants::{\n DOM_SEP__FUNCTION_ARGS, DOM_SEP__MESSAGE_NULLIFIER, DOM_SEP__PUBLIC_BYTECODE,\n DOM_SEP__PUBLIC_CALLDATA, DOM_SEP__SECRET_HASH, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS,\n },\n hash::{poseidon2_hash_subarray, poseidon2_hash_with_separator, sha256_to_field},\n traits::ToField,\n};\n\npub use crate::protocol::hash::compute_siloed_nullifier;\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], DOM_SEP__SECRET_HASH)\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], DOM_SEP__MESSAGE_NULLIFIER)\n}\n\n// Computes the hash of input arguments or return values for private functions, or for authwit creation.\npub fn hash_args<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, DOM_SEP__FUNCTION_ARGS)\n }\n}\n\n// Computes the hash of calldata for public functions.\npub fn hash_calldata_array<let N: u32>(calldata: [Field; N]) -> Field {\n poseidon2_hash_with_separator(calldata, DOM_SEP__PUBLIC_CALLDATA)\n}\n\n/// Computes the public bytecode commitment for a contract class. The commitment is `hash([(length | separator),\n/// ...bytecode])`.\n///\n/// @param packed_bytecode - The packed bytecode of the contract class. 0th word is the length in bytes.\n/// packed_bytecode is mutable so that we can avoid copying the array to construct one starting with first_field\n/// instead of length. @returns The public bytecode commitment.\npub fn compute_public_bytecode_commitment(\n mut packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS],\n) -> Field {\n // First field element contains the length of the bytecode\n let bytecode_length_in_bytes: u32 = packed_public_bytecode[0] as u32;\n let bytecode_length_in_fields: u32 = (bytecode_length_in_bytes / 31) + (bytecode_length_in_bytes % 31 != 0) as u32;\n // Don't allow empty public bytecode. AVM doesn't handle execution of contracts that exist with empty bytecode.\n assert(bytecode_length_in_fields != 0);\n assert(bytecode_length_in_fields < MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS);\n\n // Packed_bytecode's 0th entry is the length. Append it to the separator before hashing.\n let first_field = DOM_SEP__PUBLIC_BYTECODE.to_field() + (packed_public_bytecode[0] as u64 << 32) as Field;\n packed_public_bytecode[0] = first_field;\n\n // `fields_to_hash` is the number of fields from the start of `packed_public_bytecode` that should be included in\n // the hash. Fields after this length are ignored. +1 to account for the separator.\n let num_fields_to_hash = bytecode_length_in_fields + 1;\n\n poseidon2_hash_subarray(packed_public_bytecode, num_fields_to_hash)\n}\n"
|
|
4288
4288
|
},
|
|
4289
4289
|
"70": {
|
|
4290
4290
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/messaging.nr",
|
|
@@ -4292,7 +4292,7 @@
|
|
|
4292
4292
|
},
|
|
4293
4293
|
"73": {
|
|
4294
4294
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/oracle/avm.nr",
|
|
4295
|
-
"source": "//! AVM oracles.\n//!\n//! There are only available during public execution. Calling any of them from a private or utility function will\n//! result in runtime errors.\n\nuse crate::protocol::address::{AztecAddress, EthAddress};\n\npub unconstrained fn address() -> AztecAddress {\n address_opcode()\n}\npub unconstrained fn sender() -> AztecAddress {\n sender_opcode()\n}\npub unconstrained fn transaction_fee() -> Field {\n transaction_fee_opcode()\n}\npub unconstrained fn chain_id() -> Field {\n chain_id_opcode()\n}\npub unconstrained fn version() -> Field {\n version_opcode()\n}\npub unconstrained fn block_number() -> u32 {\n block_number_opcode()\n}\npub unconstrained fn timestamp() -> u64 {\n timestamp_opcode()\n}\npub unconstrained fn min_fee_per_l2_gas() -> u128 {\n min_fee_per_l2_gas_opcode()\n}\npub unconstrained fn min_fee_per_da_gas() -> u128 {\n min_fee_per_da_gas_opcode()\n}\npub unconstrained fn l2_gas_left() -> u32 {\n l2_gas_left_opcode()\n}\npub unconstrained fn da_gas_left() -> u32 {\n da_gas_left_opcode()\n}\npub unconstrained fn is_static_call() -> u1 {\n is_static_call_opcode()\n}\npub unconstrained fn note_hash_exists(note_hash: Field, leaf_index: u64) -> u1 {\n note_hash_exists_opcode(note_hash, leaf_index)\n}\npub unconstrained fn emit_note_hash(note_hash: Field) {\n emit_note_hash_opcode(note_hash)\n}\npub unconstrained fn nullifier_exists(siloed_nullifier: Field) -> u1 {\n nullifier_exists_opcode(siloed_nullifier)\n}\npub unconstrained fn emit_nullifier(nullifier: Field) {\n emit_nullifier_opcode(nullifier)\n}\npub unconstrained fn emit_public_log(message: [Field]) {\n emit_public_log_opcode(message)\n}\npub unconstrained fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: u64) -> u1 {\n l1_to_l2_msg_exists_opcode(msg_hash, msg_leaf_index)\n}\npub unconstrained fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg_opcode(recipient, content)\n}\n\npub unconstrained fn call<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n args: [Field; N],\n) {\n call_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn call_static<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n args: [Field; N],\n) {\n call_static_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn calldata_copy<let N: u32>(cdoffset: u32, copy_size: u32) -> [Field; N] {\n calldata_copy_opcode(cdoffset, copy_size)\n}\n\n/// `success_copy` is placed immediately after the CALL opcode to get the success value\npub unconstrained fn success_copy() -> bool {\n success_copy_opcode()\n}\n\npub unconstrained fn returndata_size() -> u32 {\n returndata_size_opcode()\n}\n\npub unconstrained fn returndata_copy(rdoffset: u32, copy_size: u32) -> [Field] {\n returndata_copy_opcode(rdoffset, copy_size)\n}\n\n/// The additional prefix is to avoid clashing with the `return` Noir keyword.\npub unconstrained fn avm_return(returndata: [Field]) {\n return_opcode(returndata)\n}\n\n/// This opcode reverts using the exact data given. In general it should only be used to do rethrows, where the revert\n/// data is the same as the original revert data. For normal reverts, use Noir's `assert` which, on top of reverting,\n/// will also add an error selector to the revert data.\npub unconstrained fn revert(revertdata: [Field]) {\n revert_opcode(revertdata)\n}\n\npub unconstrained fn storage_read(storage_slot: Field, contract_address: Field) -> Field {\n storage_read_opcode(storage_slot, contract_address)\n}\n\npub unconstrained fn storage_write(storage_slot: Field, value: Field) {\n storage_write_opcode(storage_slot, value);\n}\n\n#[oracle(avmOpcodeAddress)]\nunconstrained fn address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeSender)]\nunconstrained fn sender_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeTransactionFee)]\nunconstrained fn transaction_fee_opcode() -> Field {}\n\n#[oracle(avmOpcodeChainId)]\nunconstrained fn chain_id_opcode() -> Field {}\n\n#[oracle(avmOpcodeVersion)]\nunconstrained fn version_opcode() -> Field {}\n\n#[oracle(avmOpcodeBlockNumber)]\nunconstrained fn block_number_opcode() -> u32 {}\n\n#[oracle(avmOpcodeTimestamp)]\nunconstrained fn timestamp_opcode() -> u64 {}\n\n#[oracle(avmOpcodeMinFeePerL2Gas)]\nunconstrained fn min_fee_per_l2_gas_opcode() -> u128 {}\n\n#[oracle(avmOpcodeMinFeePerDaGas)]\nunconstrained fn min_fee_per_da_gas_opcode() -> u128 {}\n\n#[oracle(avmOpcodeL2GasLeft)]\nunconstrained fn l2_gas_left_opcode() -> u32 {}\n\n#[oracle(avmOpcodeDaGasLeft)]\nunconstrained fn da_gas_left_opcode() -> u32 {}\n\n#[oracle(avmOpcodeIsStaticCall)]\nunconstrained fn is_static_call_opcode() -> u1 {}\n\n#[oracle(avmOpcodeNoteHashExists)]\nunconstrained fn note_hash_exists_opcode(note_hash: Field, leaf_index: u64) -> u1 {}\n\n#[oracle(avmOpcodeEmitNoteHash)]\nunconstrained fn emit_note_hash_opcode(note_hash: Field) {}\n\n#[oracle(avmOpcodeNullifierExists)]\nunconstrained fn nullifier_exists_opcode(siloed_nullifier: Field) -> u1 {}\n\n#[oracle(avmOpcodeEmitNullifier)]\nunconstrained fn emit_nullifier_opcode(nullifier: Field) {}\n\n
|
|
4295
|
+
"source": "//! AVM oracles.\n//!\n//! There are only available during public execution. Calling any of them from a private or utility function will\n//! result in runtime errors.\n\nuse crate::protocol::address::{AztecAddress, EthAddress};\n\npub unconstrained fn address() -> AztecAddress {\n address_opcode()\n}\npub unconstrained fn sender() -> AztecAddress {\n sender_opcode()\n}\npub unconstrained fn transaction_fee() -> Field {\n transaction_fee_opcode()\n}\npub unconstrained fn chain_id() -> Field {\n chain_id_opcode()\n}\npub unconstrained fn version() -> Field {\n version_opcode()\n}\npub unconstrained fn block_number() -> u32 {\n block_number_opcode()\n}\npub unconstrained fn timestamp() -> u64 {\n timestamp_opcode()\n}\npub unconstrained fn min_fee_per_l2_gas() -> u128 {\n min_fee_per_l2_gas_opcode()\n}\npub unconstrained fn min_fee_per_da_gas() -> u128 {\n min_fee_per_da_gas_opcode()\n}\npub unconstrained fn l2_gas_left() -> u32 {\n l2_gas_left_opcode()\n}\npub unconstrained fn da_gas_left() -> u32 {\n da_gas_left_opcode()\n}\npub unconstrained fn is_static_call() -> u1 {\n is_static_call_opcode()\n}\npub unconstrained fn note_hash_exists(note_hash: Field, leaf_index: u64) -> u1 {\n note_hash_exists_opcode(note_hash, leaf_index)\n}\npub unconstrained fn emit_note_hash(note_hash: Field) {\n emit_note_hash_opcode(note_hash)\n}\npub unconstrained fn nullifier_exists(siloed_nullifier: Field) -> u1 {\n nullifier_exists_opcode(siloed_nullifier)\n}\npub unconstrained fn emit_nullifier(nullifier: Field) {\n emit_nullifier_opcode(nullifier)\n}\npub unconstrained fn emit_public_log(message: [Field]) {\n emit_public_log_opcode(message)\n}\npub unconstrained fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: u64) -> u1 {\n l1_to_l2_msg_exists_opcode(msg_hash, msg_leaf_index)\n}\npub unconstrained fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg_opcode(recipient, content)\n}\n\npub unconstrained fn call<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n args: [Field; N],\n) {\n call_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn call_static<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n args: [Field; N],\n) {\n call_static_opcode(l2_gas_allocation, da_gas_allocation, address, N, args)\n}\n\npub unconstrained fn calldata_copy<let N: u32>(cdoffset: u32, copy_size: u32) -> [Field; N] {\n calldata_copy_opcode(cdoffset, copy_size)\n}\n\n/// `success_copy` is placed immediately after the CALL opcode to get the success value\npub unconstrained fn success_copy() -> bool {\n success_copy_opcode()\n}\n\npub unconstrained fn returndata_size() -> u32 {\n returndata_size_opcode()\n}\n\npub unconstrained fn returndata_copy(rdoffset: u32, copy_size: u32) -> [Field] {\n returndata_copy_opcode(rdoffset, copy_size)\n}\n\n/// The additional prefix is to avoid clashing with the `return` Noir keyword.\npub unconstrained fn avm_return(returndata: [Field]) {\n return_opcode(returndata)\n}\n\n/// This opcode reverts using the exact data given. In general it should only be used to do rethrows, where the revert\n/// data is the same as the original revert data. For normal reverts, use Noir's `assert` which, on top of reverting,\n/// will also add an error selector to the revert data.\npub unconstrained fn revert(revertdata: [Field]) {\n revert_opcode(revertdata)\n}\n\npub unconstrained fn storage_read(storage_slot: Field, contract_address: Field) -> Field {\n storage_read_opcode(storage_slot, contract_address)\n}\n\npub unconstrained fn storage_write(storage_slot: Field, value: Field) {\n storage_write_opcode(storage_slot, value);\n}\n\n#[oracle(avmOpcodeAddress)]\nunconstrained fn address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeSender)]\nunconstrained fn sender_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeTransactionFee)]\nunconstrained fn transaction_fee_opcode() -> Field {}\n\n#[oracle(avmOpcodeChainId)]\nunconstrained fn chain_id_opcode() -> Field {}\n\n#[oracle(avmOpcodeVersion)]\nunconstrained fn version_opcode() -> Field {}\n\n#[oracle(avmOpcodeBlockNumber)]\nunconstrained fn block_number_opcode() -> u32 {}\n\n#[oracle(avmOpcodeTimestamp)]\nunconstrained fn timestamp_opcode() -> u64 {}\n\n#[oracle(avmOpcodeMinFeePerL2Gas)]\nunconstrained fn min_fee_per_l2_gas_opcode() -> u128 {}\n\n#[oracle(avmOpcodeMinFeePerDaGas)]\nunconstrained fn min_fee_per_da_gas_opcode() -> u128 {}\n\n#[oracle(avmOpcodeL2GasLeft)]\nunconstrained fn l2_gas_left_opcode() -> u32 {}\n\n#[oracle(avmOpcodeDaGasLeft)]\nunconstrained fn da_gas_left_opcode() -> u32 {}\n\n#[oracle(avmOpcodeIsStaticCall)]\nunconstrained fn is_static_call_opcode() -> u1 {}\n\n#[oracle(avmOpcodeNoteHashExists)]\nunconstrained fn note_hash_exists_opcode(note_hash: Field, leaf_index: u64) -> u1 {}\n\n#[oracle(avmOpcodeEmitNoteHash)]\nunconstrained fn emit_note_hash_opcode(note_hash: Field) {}\n\n#[oracle(avmOpcodeNullifierExists)]\nunconstrained fn nullifier_exists_opcode(siloed_nullifier: Field) -> u1 {}\n\n#[oracle(avmOpcodeEmitNullifier)]\nunconstrained fn emit_nullifier_opcode(nullifier: Field) {}\n\n#[oracle(avmOpcodeEmitPublicLog)]\nunconstrained fn emit_public_log_opcode(message: [Field]) {}\n\n#[oracle(avmOpcodeL1ToL2MsgExists)]\nunconstrained fn l1_to_l2_msg_exists_opcode(msg_hash: Field, msg_leaf_index: u64) -> u1 {}\n\n#[oracle(avmOpcodeSendL2ToL1Msg)]\nunconstrained fn send_l2_to_l1_msg_opcode(recipient: EthAddress, content: Field) {}\n\n#[oracle(avmOpcodeCalldataCopy)]\nunconstrained fn calldata_copy_opcode<let N: u32>(cdoffset: u32, copy_size: u32) -> [Field; N] {}\n\n#[oracle(avmOpcodeReturndataSize)]\nunconstrained fn returndata_size_opcode() -> u32 {}\n\n#[oracle(avmOpcodeReturndataCopy)]\nunconstrained fn returndata_copy_opcode(rdoffset: u32, copy_size: u32) -> [Field] {}\n\n#[oracle(avmOpcodeReturn)]\nunconstrained fn return_opcode(returndata: [Field]) {}\n\n#[oracle(avmOpcodeRevert)]\nunconstrained fn revert_opcode(revertdata: [Field]) {}\n\n// While the length parameter might seem unnecessary given that we have N we keep it around because at the AVM bytecode\n// level, we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally take\n// that route.\n#[oracle(avmOpcodeCall)]\nunconstrained fn call_opcode<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n length: u32,\n args: [Field; N],\n) {}\n\n// While the length parameter might seem unnecessary given that we have N we keep it around because at the AVM bytecode\n// level, we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally take\n// that route.\n#[oracle(avmOpcodeStaticCall)]\nunconstrained fn call_static_opcode<let N: u32>(\n l2_gas_allocation: u32,\n da_gas_allocation: u32,\n address: AztecAddress,\n length: u32,\n args: [Field; N],\n) {}\n\n#[oracle(avmOpcodeSuccessCopy)]\nunconstrained fn success_copy_opcode() -> bool {}\n\n#[oracle(avmOpcodeStorageRead)]\nunconstrained fn storage_read_opcode(storage_slot: Field, contract_address: Field) -> Field {}\n\n#[oracle(avmOpcodeStorageWrite)]\nunconstrained fn storage_write_opcode(storage_slot: Field, value: Field) {}\n"
|
|
4296
4296
|
},
|
|
4297
4297
|
"76": {
|
|
4298
4298
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/oracle/enqueue_public_function_call.nr",
|