Giter Site home page Giter Site logo

circom_tester's Introduction

circom tester

Setup

  1. Create new node js project.
  2. Install circom_tester and chai packges.
  3. Install mocha packge to run the tests.

Creating & Running a test file

Create a js file contain the following code or use the src provided in the following section.
Execue mocha -p -r ts-node/register 'multiplier2.js' to run the test file.

multiplier2.js (src)

const chai = require("chai");
const path = require("path");
const wasm_tester = require("./../index").wasm;
const c_tester = require("./../index").c;

const F1Field = require("ffjavascript").F1Field;
const Scalar = require("ffjavascript").Scalar;
exports.p = Scalar.fromString("21888242871839275222246405745257275088548364400416034343698204186575808495617");
const Fr = new F1Field(exports.p);

const assert = chai.assert;

describe("Simple test", function () {
    this.timeout(100000);

    it("Checking the compilation of a simple circuit generating wasm", async function () {
        const circuit = await wasm_tester(path.join(__dirname, "Multiplier2circom"));
        const w = await circuit.calculateWitness({a: 2, b: 4});
        await circuit.checkConstraints(w);
    });
});

circom_tester's People

Contributors

alrubio avatar arnaucube avatar blakemscurr avatar jbaylina avatar krlosmata avatar nvnx7 avatar obrezhniev avatar tronch0 avatar xtonyjiang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

circom_tester's Issues

tester.js doesn't check circom2

Before creating a PR wanted to make sure I'm getting this correctly.

When using circom-hardhat both circom and circom2 are installed.

In tester.js it checks the compiler version above 2.0 against circom and it returns false. For this use case we could implement:

let output = (await exec('circom2 --version')).stdout;

instead of:

let output = (await exec('circom --version')).stdout;

Should we check circom2 version, and then if it fails we check circom to cover both cases?

Inputs are assigned wrong values when there is a mistake in array-typed input size

Working with quite a complex circuits I figured out one weird behavior of WitnessCalculator which make my team spend a lot of time trying to figure out the root cause and fix it.

Preconditions:

  1. Some circuit has an input of array type
  2. There is at least one more input following the array type input in the circuit source code
  3. The value which is assigned to array input has (by mistake) more elements than is expected

Expected behaviour by usual development practice:

The test framework should throw some exception that the input has wrong number of elements

Actual behaviour:

Nothing is thrown but the extra values in the array just ASSIGNED TO THE NEXT INPUT(S) !!!

Example:

template Example () {
    signal input a[2];
    signal input b;
    signal output c;
    log (a[0]);
    log (a[1]);
    log (b);

    a[1] === 0;
    c <== a[0] * b;
    c === 10;
}

component main = Example();

These inputs will work:

/* INPUT = {
    "a": ["5", "0"],
    "b": "2"
} */

These inputs will break c === 10; constraint as "b" will be "overlapped" with the third element of "a", which is 3

/* INPUT = {
    "a": ["5", "0", "3"],
    "b": "2"
} */

You can easily check the above in https://zkrepl.dev/

circom: command not found

circom was not found by the test-running instance; however, it is installed.

It happens on a fresh clone after following the setup procedures.

image

getDecoratedOutput and assertOut errors

I am trying to test my circom circuit but am getting errors.

Generating the witness using let witness = await circuit.calculateWitness({ a: inputA, b: inputB }); works as expected.

Then I am trying these two functions but I get errors:
await circuit.getDecoratedOutput(witness) gives ReferenceError: utils is not defined

and
await circuit.assertOut(witness, expectedOutput) gives AssertionError: Output variable not defined: main[0]

I have no idea what this means and how to fix it. Does someone have any idea?

r1csfile is extremely old

In daf3b0e the version of r1csfile was downgraded from the newer version to v0.0.16 which is now over a year and a half old. We've landed many improvements, bug fixes, and dependency updates in that time.

It's not clear why circom_tester needs to use such an old version of this dependency.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.