Aztec.nr contracts
This package contains the source code and the Aztec ABIs for the example contracts used in tests.
Disclaimer
Please note that any example contract set out herein is provided solely for informational purposes only and does not constitute any inducement to use or deploy. Any implementation of any such contract with an interface or any other infrastructure should be used in accordance with applicable laws and regulations.
Setup
Installing Noir
An essential tool for managing noir versions is noirup.
Happy Path
Currently we all work from a single aztec
tagged noir release. This release updates independently from noir's regular cadence to allow us to rapidly prototype new features.
It has prebuilt binaries and is super easy to install using noirup
Pinning Aztec flavoured noir releases
Aztec noir is released with semver alongside noir. If you would like to pin to a specific version you can run:
noirup -v <noir-version>-aztec.<patch version>
e.g noirup -v 0.11.1-aztec.0
Building from source (If working with custom features)
-
Install noirup
curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash
-
Nix is already globally installed but path to this installation needs to be added in $HOME/.zshenv so correct configuration can be found by VSCode, do so with:
echo -e '\n# Nix path set globally\nexport PATH="$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:$PATH"' >> $HOME/.zshenv
-
Enable nix flake command in ~/.config/nix/nix.conf with commands:
mkdir -p $HOME/.config/nix && echo -e '\nexperimental-features = nix-command\nextra-experimental-features = flakes' >> $HOME/.config/nix/nix.conf
-
Install direnv into your Nix profile by running:
nix profile install nixpkgs#direnv
-
Add direnv to your shell following their guide
echo -e '\n# Adds direnv initialization\neval "$(direnv hook zsh)"' >> $HOME/.zshenv
-
VSCode needs to be restarted so direnv plugin can notice env changes with:
kill -9 ps aux | grep $(whoami)/.vscode-server | awk '{print $2}'
-
Restart shell
-
Clone noir repo:
git clone https://github.com/noir-lang/noir.git
-
Checkout your target noir branch
cd noir
git checkout <branch>
-
Enable direnv
direnv allow
-
Restart shell
-
Go to the noir dir and install Noir:
cd noir
noirup -p ./
Building the contracts
-
In the aztec-packages repository, go to the directory yarn-project/noir-contracts
-
Use the noir:build:all
script to compile the contracts you want and prepare the ABI for consumption
yarn noir:build:all
Alternatively you can run yarn noir:build CONTRACT1 CONTRACT2...
to build a subset of contracts:
yarn noir:build private_token public_token
To view compilation output, including errors, run with the VERBOSE=1
flag:
VERBOSE=1 yarn noir:build private_token public_token
Creating a new contract package
-
Go to src/contracts
folder.
-
Create a new package whose name has to end with _contract. E.g.:
nargo new --contract example_contract
-
Add the aztec dependency to nargo.toml
:
[package]
authors = [""]
compiler_version = "0>=.18.0"
[dependencies]
aztec = { path = "../../../../aztec-nr/aztec" }
-
Replace the content of the generated example_contract/src/main.nr
file with your contract code.
-
Go to noir-contracts
root folder and run yarn noir:build example
to compile the contract.
-
Export the abi in src/artifacts/index.ts
to be able to use the contract in the rest of the project:
import ExampleContractJson from './example_contract.json' assert { type: 'json' };
export const ExampleContractArtifact = ExampleContractJson as ContractArtifact;