JSPM

@zkpersona/noir-helpers

0.2.1
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 4
    • Score
      100M100P100Q29444F
    • License MIT

    Helpers utilities for Noir proofs and input generation.

    Package Exports

    • @zkpersona/noir-helpers

    Readme

    Noir Helpers

    Noir Helpers is a collection of utilities and helper function to generate proofs and inputs for noir circuits.

    Installation

    To install the @zkpersona/noir-helpers package, you can use any of the following package managers:

    npm install @zkpersona/noir-helpers
    # or
    yarn add @zkpersona/noir-helpers
    # or
    pnpm add @zkpersona/noir-helpers
    # or
    bun add @zkpersona/noir-helpers

    Usage

    Generating Proofs

    The @zkpersona/noir-helpers package provides a Prover class that can be used to generate proofs for Noir circuits. Here's an example of how to use the Prover class:

    import { Prover , U8, toCircuitInputs } from '@zkpersona/noir-helpers';
    import type { CompiledCircuit } from '@noir-lang/noir_js';
    
    import circuit from '../target/circuits.json' assert { type: 'json' };
    
    const inputs = { x: new U8(1), y: new U8(2) };
    const parsedInputs = toCircuitInputs(inputs);
    
    // Supported types are: "plonk", "honk", "all"
    const prover = new Prover(circuit as CompiledCircuit, { type: 'plonk' });
    
    // Simulate Witness
    const { witness, returnValue } = await prover.simulateWitness(parsedInputs);
    
    // Generate Proof
    const proof = await prover.prove(witness);
    
    // Verify Proof
    const isValid = await prover.verify(proof);
    
    console.log('Proof verification:', isValid);

    Generating Prover.toml file

    The @zkpersona/noir-helpers package also provides a function to generate a Prover.toml file from a JSON object. Here's an example of how to use the generateToml function:

    import { generateToml , toCircuitInputs, U8 } from '@zkpersona/noir-helpers';
    
    const data = toCircuitInputs({ x: new U8(1), y: new U8(2) });
    const filePath = 'absolute/path/to/Prover.toml';
    
    generateToml(data, filePath);

    Using Data Types

    The package exports Noir primitive data types such as Field, Signed/Unsigned Integers, BoundedVec for generating Prover.toml Inputs.

    Here's an example of how to these data types can be used:

    import {
      Bool,
      BoundedVec,
      Field,
      FixedSizeArray,
      I8,
      Str,
      U8,
      toJSON,
    } from '@zkpersona/noir-helpers';
    
    const a = new Field(1); // Field element
    const b = new Field('0x10'); // Hex Representation
    
    // Initialize BoundedVec with MaxLength, default value, and initial items.
    const c = new BoundedVec(2, new Field(0), []); // BoundedVec<Field,2>;
    
    // struct A {
    //     x: Field,
    //     y: Field,
    // }
    
    // BoundedVec<A, 2>;
    const d = new BoundedVec(2, {
      x: new Field(0),
      y: new Field(0),
    });
    
    // bool
    const e = new Bool(true);
    // str
    const f = new Str('hello');
    // u8
    const g = new U8(12);
    // i8
    const h = new I8(12);
    
    // BoundedVec<[u8;2],2>
    const ele = () =>
      new BoundedVec(2, new FixedSizeArray(2, [new U8(0), new U8(0)]));
    
    const updatedEle = ele();
    updatedEle.push(new FixedSizeArray(2, [new U8(1), new U8(2)]));
    
    const i = new BoundedVec(2, {
      x: ele(),
    });
    
    i.push({ x: updatedEle });
    console.log(
      toCircuitInputs({
        a,
        b,
        c,
        d,
        e,
        f,
        g,
        h,
        i,
      })
    );

    This outputs the following JSON object:

    Output
    {
      "a": "0x1",
      "b": "0x10",
      "c": {
        "storage": [
          "0x0",
          "0x0"
        ],
        "len": 0
      },
      "d": {
        "storage": [
          {
            "x": "0x0",
            "y": "0x0"
          },
          {
            "x": "0x0",
            "y": "0x0"
          }
        ],
        "len": 0
      },
      "e": true,
      "f": "hello",
      "g": "12",
      "h": "12",
      "i": {
        "storage": [
          {
            "x": {
              "storage": [
                ["1","2"],
                ["0","0"]
              ],
              "len": 1
            }
          },
          {
            "x": {
              "storage": [
                ["0","0"],
                ["0","0"]
              ],
              "len": 0
            }
          }
        ],
        "len": 1
      }
    }

    Supported types: Field, U1, U8, U16, U32, U64, I1, I8, I16, I32, I64, Bool, Str, FixedSizeArray and BoundedVec.


    Getting Started

    To get started with the project, clone the repository and install the dependencies:

    git clone https://github.com/zkpersona/noir-helpers.git
    cd noir-helpers
    pnpm install

    To run the tests, use the following command:

    pnpm test

    Contributing

    Contributions are welcome! Please open an issue or submit a pull request.