Skip to main content
Version: v0.29.0

Creating a Project

Now that we have installed Nargo, it is time to make our first hello world program!

Create a Project Directory

Noir code can live anywhere on your computer. Let us create a projects folder in the home directory to house our Noir programs.

For Linux, macOS, and Windows PowerShell, create the directory and change directory into it by running:

mkdir ~/projects
cd ~/projects

Create Our First Nargo Project

Now that we are in the projects directory, create a new Nargo project by running:

nargo new hello_world

Note: hello_world can be any arbitrary project name, we are simply using hello_world for demonstration.

In production, the common practice is to name the project folder as circuits for better identifiability when sitting alongside other folders in the codebase (e.g. contracts, scripts, test).

A hello_world folder would be created. Similar to Rust, the folder houses src/main.nr and Nargo.toml which contain the source code and environmental options of your Noir program respectively.

Intro to Noir Syntax

Let us take a closer look at main.nr. The default main.nr generated should look like this:

fn main(x : Field, y : pub Field) {
assert(x != y);
}

The first line of the program specifies the program's inputs:

x : Field, y : pub Field

Program inputs in Noir are private by default (e.g. x), but can be labeled public using the keyword pub (e.g. y). To learn more about private and public values, check the Data Types section.

The next line of the program specifies its body:

assert(x != y);

The Noir syntax assert can be interpreted as something similar to constraints in other zk-contract languages.

For more Noir syntax, check the Language Concepts chapter.

Build In/Output Files

Change directory into hello_world and build in/output files for your Noir program by running:

cd hello_world
nargo check

Two additional files would be generated in your project directory:

Prover.toml houses input values, and Verifier.toml houses public values.

Prove Our Noir Program

Now that the project is set up, we can create a proof of correct execution of our Noir program.

Fill in input values for execution in the Prover.toml file. For example:

x = "1"
y = "2"

Prove the valid execution of your Noir program:

nargo prove

A new folder proofs would then be generated in your project directory, containing the proof file <project-name>.proof, where the project name is defined in Nargo.toml.

The Verifier.toml file would also be updated with the public values computed from program execution (in this case the value of y):

y = "0x0000000000000000000000000000000000000000000000000000000000000002"

Note: Values in Verifier.toml are computed as 32-byte hex values.

Verify Our Noir Program

Once a proof is generated, we can verify correct execution of our Noir program by verifying the proof file.

Verify your proof by running:

nargo verify

The verification will complete in silence if it is successful. If it fails, it will log the corresponding error instead.

Congratulations, you have now created and verified a proof for your very first Noir program!

In the next section, we will go into more detail on each step performed.