#zero-knowledge-proofs #non-deterministic #bytecode #proving #machine #snark #noir

brillig_vm

The virtual machine that processes Brillig bytecode, used to introduce non-determinism to the ACVM

33 releases (20 breaking)

0.46.0 May 21, 2024
0.44.0 Apr 24, 2024
0.41.0 Mar 11, 2024
0.27.0 Sep 20, 2023
0.21.0 Jul 26, 2023

#222 in Cryptography

Download history 79/week @ 2024-02-26 5/week @ 2024-03-04 201/week @ 2024-03-11 7/week @ 2024-03-18 45/week @ 2024-04-01 161/week @ 2024-04-08 8/week @ 2024-04-15 101/week @ 2024-04-22 2/week @ 2024-04-29 149/week @ 2024-05-06 164/week @ 2024-05-20 5/week @ 2024-06-03 3/week @ 2024-06-10

172 downloads per month
Used in 2 crates (via acvm)

MIT/Apache

550KB
11K SLoC

C++ 6K SLoC Rust 4.5K SLoC // 0.1% comments

The Noir Programming Language

Noir is a Domain Specific Language for SNARK proving systems. It has been designed to use any ACIR compatible proving system.

This implementation is in early development. It has not been reviewed or audited. It is not suitable to be used in production. Expect bugs!

Quick Start

Read the installation section from the Noir docs.

Once you have read through the documentation, you can visit Awesome Noir to run some of the examples that others have created.

Getting Help

Join the Noir forum or Discord

Contributing

See CONTRIBUTING.md.

Future Work

The current focus is to gather as much feedback as possible while in the alpha phase. The main focuses of Noir are safety and developer experience. If you find a feature that does not seem to be in line with these goals, please open an issue!

Minimum Rust version

This workspace's minimum supported rustc version is 1.74.1.

License

Noir is free and open source. It is distributed under a dual license. (MIT/APACHE)

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this repository by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


lib.rs:

The Brillig VM is a specialized VM which allows the ACVM to perform custom non-determinism.

Brillig bytecode is distinct from regular ACIR in that it does not generate constraints. This is a generalization over the fixed directives that exists within in the ACVM.

Dependencies

~8MB
~158K SLoC