Home

Awesome

npm License: MIT

ZKit - Circom Zero Knowledge Kit

A zero knowledge kit that helps you interact with Circom circuits.

Installation

To install the package, run:

npm install --save-dev @solarity/zkit

Usage

[!IMPORTANT] The kit is not meant to be used directly as its fitness relies heavily on the environment, Circom compilation artifacts management, processing of remappings, etc. Consider using hardhat-zkit which is a complete, developer-friendly package.

CircuitZKit

CircuitZKit is a user-friendly interface for interacting with circom circuits.

To create a CircuitZKit object it is necessary to pass a circuit config and a ProtocolImplementer instance:

const config = {
  circuitName: string;
  circuitArtifactsPath: string;
  verifierDirPath: string;
};

const implementer = new Groth16Implementer() | new PlonkImplementer();

const circuit = new CircuitZKit<"groth16" | "plonk">(config, implementer);

The config contains all the information required to work with the circuit, namely:

The implementer is the instance of a certain proving system. Currently groth16 and plonk systems are supported.

API reference


Creates a Solidity | Vyper verifier contract with the optional verifierNameSuffix on verifierDirPath path, which was specified in the config.

await circuit.createVerifier("sol");
await circuit.createVerifier("sol", "_suffix_");

Calculates a witness in the tmp directory and returns its json representation.

/// witness = [1n, 200n, 20n, 10n]
const witness = await circuit.calculateWitness({ a: 10, b: 20 });

Generates a proof for the given inputs.

/// { proof: { pi_a, pi_b, pi_c, protocol, curve }, publicSignals: [6] }
const proof = await circuit.generateProof({ a: 2, b: 3 });

Verifies the proof.

/// true
const isValidProof = await circuit.verifyProof(proof);

Generates calldata by proof for the Solidity | Vyper verifier's verifyProof() method.

/// You can use this calldata to call the verifier contract
const calldata = await circuit.generateCalldata(proof);

Returns the name of the circuit from the config.

Returns the name of the verifier in the following form:

<Circuit name><Suffix><Proving system>Verifier

Returns the current proving system in use.

Returns the full ejs verifier template as a string.