NOTE: This is a work-in-progress and will be continuously updated as we release newer versions of Noir and re-prioritize features. This is intended to be an explanatory document for external developers interested in using Noir.
This should help describe where Noir is today, where Noir will be tomorrow, and a general idea of the expected progression of the language.
Quick intro to Noir
Noir is a domain specific language for creating and verifying proofs. Its design choices are influenced heavily by Rust.
Noir is designed for accessible and flexible development of provable programs. It abstracts away the need for developers to handcraft low-level circuits and aims at supporting different proving backends for different development needs.
Noir compiles to an intermediate language, which itself can be compiled to an arithmetic circuit or a rank-1 constraint system. This allows one to decouple the programming language completely from the backend, so Noir can support arbitrary backends.
Noir ‘off-the-shelf’ runs using Aztec’s TurboPlonk backend (although an UltraPlonk integration is imminent).
Nice! Amazing news. Are the constraints counts listed in the initial post (“Comes with optimized implementations of Keccak256 in 18,000 constraints and ECDSA verification in 36,000 constraints”) the final constraint counts of the optimized implementations?
Request for feedback – let us know which frameworks you want! Leave comments here
Unsure of whether this will be a priority since the company/codebase is not open-source, but Tenderly.co is becoming a more widely adopted piece of the EVM developer toolkit – maybe some integrations with them would lead to more attention on Noir from individual developers to companies alike, and could become a de-facto piece of infrastructure for Noir developers looking to deploy on EVM chains.
As for 3rd party integration, it would be great to see an official guide to using Noir with Foundry. Through my experience, using Noir on Foundry is actually not so difficult but requires a bit of understanding of where the files should be placed or where Solidity files will be generated. So even having a tutorial would be super helpful for newcomers who would want to try out Noir.
I would really appreciate it if the if-else clauses worked. This bug has been unattended for a while now, and without it being addressed, we can’t really do much on our end: