Maddiaa0 / foundry-noir

Test noir inside solidity

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Foundry x Noir

A foundry library for working with noir contracts. Take a look at our project template to quickly get up to speed using this library.

Installing

First, install the nargo by running:

curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash

Then, install this library with forge:

forge install cheethas/foundry-noir

Usage

The NoirProver is a Solidity library that takes a path to a noir project and generates a hex proof given a series of inputs. To use it, simply import it into your file by doing:

import { NoirProver } from "foundry-noir/Noir.sol";

This library will not generate the verifier contract for you, however there is a sister project noirplate that has a script you can run after each of your circuit changes to generate a new verifier.

Here is an example deployment from the sister template repo:

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import "forge-std/Test.sol";
import "../src/NoirExample.sol";
import {NoirProver} from "foundry-noir/Noir.sol";

contract NoirExampleTest is Test {
    NoirProver public noirProver;
    NoirExample public noirExample;

    function setUp() public {
        noirExample = new NoirExample();
        noirProver = new NoirProver()
            .with_nargo_project_path("./circuits");
    }

    function testGenerateAndVerifyProof() public {
        noirProver
            .with_input(NoirProver.CircuitInput("x", 1))
            .with_public_input(NoirProver.CircuitInput("y", 2));

        bytes memory proof = noirProver.generate_proof();
        noirExample.verifyProof(proof);
    }
}

Above you can see that you can target multiple different nargo projects within the same test suite by creating a new NoirProver with a different .with_nargo_project_path(<your_path_here (relative to root)>)

NOTE: It is highly recommended that you read the foundry book, or at least familiarize yourself with foundry, before using this library to avoid easily susceptible footguns.

About

Test noir inside solidity


Languages

Language:Solidity 100.0%