A zero knowledge kit that helps you interact with Circom circuits.
- Generate and verify ZK proofs with a single line of code.
- Render optimized Solidity verifiers.
- Build and work with ZK witnesses.
To install the package, run:
npm install --save-dev @solarity/zkit
[!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
is a user-friendly interface for interacting with circom circuits.
To create a CircuitZKit object it is necessary to pass a config:
CircuitZKitConfig = {
circuitName: string;
circuitArtifactsPath: string;
verifierDirPath: string;
templateType?: VerifierTemplateType;
};
This config contains all the information required to work with the circuit, namely:
-
circuitName
- Name of the circuit file without extension -
circuitArtifactsPath
- Full path to compilation artifacts for the desired circuit -
verifierDirPath
- Full path to the directory where Solidity verifier file will be generated -
templateType
- The type of template that will be used to generate the Solidity verifier contract. Right now onlygroth16
is supported
Static CircuitZKit
function that returns the contents of a template file by the passed type.
const templateContent = CircuitZKit.getTemplate("groth16");
Creates a Solidity verifier contract on verifierDirPath
path, which was specified in the config.
await multiplier.createVerifier();
Generates a proof for the given inputs.
/// { proof: { pi_a, pi_b, pi_c, protocol, curve }, publicSignals: [6] }
const proof = await multiplier.generateProof({ a: 2, b: 3 });
Verifies the proof.
/// true
const isValidProof = await multiplier.verifyProof(proof);
Generates calldata by proof for the Solidity verifier's verifyProof()
method.
/// You can use this calldata to call the verifier contract
const calldata = await multiplier.generateCalldata(proof);
- Currently, ZKit supports only the Groth16 proving system.