• Stars
    star
    878
  • Rank 51,998 (Top 2 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated 28 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Noir is a domain specific language for zero knowledge proofs

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 here.

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

Current Features

Backends:

  • Barretenberg via FFI
  • Marlin via arkworks (Note -- latest interfaces may not be updated to support Marlin backend. Please open an issue if this is relevant to your project and requires attention.)

Compiler:

  • Module System
  • For expressions
  • Arrays
  • Bit Operations
  • Binary operations (<, <=, >, >=, +, -, *, /, %) [See documentation for an extensive list]
  • Unsigned integers
  • If statements
  • Structures and Tuples
  • Generics

ACIR Supported OPCODES:

  • Sha256
  • Blake2s
  • Schnorr signature verification
  • MerkleMembership
  • Pedersen
  • HashToField

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!

Concretely the following items are on the road map:

  • General code sanitization and documentation (ongoing effort)
  • Prover and Verifier Key logic. (Prover and Verifier pre-process per compile)
  • Fallback mechanism for backend unsupported opcodes
  • Visibility modifiers
  • Signed integers
  • Backend integration: (Bulletproofs)
  • Recursion
  • Big integers

Minimum Rust version

This crate's minimum supported rustc version is 1.66.0.

Working on this project

This project uses Nix and direnv to streamline the development experience. Please follow our guidelines to setup your environment for working on the project.

Building against a different local/remote version of Barretenberg

If you are working on this project and want a different version of Barretenberg (instead of the version this project is pinned against), you'll want to replace the lockfile version with your version. This can be done by running:

nix flake lock --override-input barretenberg /absolute/path/to/your/barretenberg

You can also point at a fork and/or branch on GitHub using:

nix flake lock --override-input barretenberg github:username/barretenberg/branch_name

Note: You don't want to commit the updated lockfile, as it will fail in CI!

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 crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

More Repositories

1

awesome-noir

A curated list of awesome things related to learning and programming in Noir.
321
star
2

acvm

Rust
46
star
3

acvm-backend-barretenberg

Solidity
39
star
4

noir-examples

A repo of example Noir projects.
Solidity
37
star
5

noirup

Installation tooling for Noir
Shell
22
star
6

docs

MDX
19
star
7

noir-in-an-afternoon

Solidity
15
star
8

book

15
star
9

noir-web-starter-next

Next.js frontend boilerplate for interacting with Noir programs in-browser.
TypeScript
14
star
10

noir-bignum

bignum
Roff
13
star
11

noir_rsa

Roff
12
star
12

noir_string_search

Roff
8
star
13

noir_wasm

JavaScript
8
star
14

marlin_arkworks_backend

Rust
8
star
15

arkworks_backend

Rust
7
star
16

vscode-noir

TypeScript
6
star
17

noir-aztec3

Roff
5
star
18

noir-lsp

Rust
5
star
19

tiny-noirjs-app

JavaScript
5
star
20

barretenberg

JavaScript
4
star
21

noir-nvim

A NeoVim plugin providing syntax highlighting and LSP support for Noir
Vim Script
4
star
22

acvm-docs

Documentation site for ACVM / ACIR
JavaScript
4
star
23

nextjs-bbjs-demo

TypeScript
4
star
24

acvm-simulator

Rust
3
star
25

noir-edwards

Roff
3
star
26

grumpkin

Rust
3
star
27

parser-fuzzer

Rust
3
star
28

zk_bench

Benchmark circom and noir on some standard primitives from circomlib/noir stdlib
Circom
2
star
29

noir-cra

Example Create-React-App featuring use of Noir JS packages
Roff
2
star
30

.github

Organization configuration for the Noir language
2
star
31

noir-aztec3-contract-example

Roff
2
star
32

noir_bigcurve

Roff
2
star
33

acvm-js-wasm

JavaScript
1
star
34

noir_base64

base64 decoder
Roff
1
star
35

noir-wasm-testing

TypeScript
1
star
36

noir_json_parser

Roff
1
star
37

build-nargo

Collection of build scripts to build Nargo CLI targeting different platforms
JavaScript
1
star
38

dummy_proof_system

A proof system used with the noir compiler language to check acir satisfiability
1
star
39

examples

1
star
40

barretenberg-sys

FFI bindings to Barretenberg
Rust
1
star
41

Planning

Hosting issues for the Prioritisation project board.
1
star
42

noir-source-resolver

Noir source resolver module to bring as dependency for compiling in Browser
JavaScript
1
star
43

noir_js-dev

`noir_js` development version packages container
JavaScript
1
star