Package Exports
- @axiom-crypto/halo2-js
- @axiom-crypto/halo2-js/index.js
- @axiom-crypto/halo2-js/shared/utils
- @axiom-crypto/halo2-js/shared/utils.js
- @axiom-crypto/halo2-js/wasm/js
- @axiom-crypto/halo2-js/wasm/js.js
- @axiom-crypto/halo2-js/wasm/web
- @axiom-crypto/halo2-js/wasm/web.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@axiom-crypto/halo2-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
halo2-lib-js
This repository aims to streamline the process of writing circuits in Typescript using halo2-lib-wasm. To discuss or collaborate, join our community on Telegram.
Getting Started
To build your own halo2-wasm module, see this README.
Install halo2-js in your own JS/TS project with
pnpm install @axiom-crypto/halo2-jsor use your favorite package manager (npm, yarn, etc.).
Setting up the CircuitScaffold
The halo2-wasm package already has an abstract CircuitScaffold that must implemented. Here is an example using Halo2LibWasm and Halo2CircuitRunner:
Web
import { Halo2LibWasm, CircuitConfig, CircuitScaffold } from "@axiom-crypto/halo2-wasm/web";
import { Halo2CircuitRunner, Halo2Lib } from "@axiom-crypto/halo2-js";
export class WebCircuitScaffold extends CircuitScaffold {
halo2Lib!: Halo2LibWasm;
constructor(options) {
super(options);
}
newCircuitFromConfig(config: CircuitConfig): void {
super.newCircuitFromConfig(config);
if (this.halo2Lib) this.halo2Lib.free();
this.halo2Lib = getHalo2LibWasm(this.halo2wasm);
}
async populateCircuit(circuit: (halo2Lib: Halo2Lib, inputs: any) => Promise<void>, inputs: any) {
this.newCircuitFromConfig(this.config);
this.timeStart("Witness generation");
await Halo2CircuitRunner(this.halo2wasm, this.halo2Lib, this.config).run(circuit, inputs);
this.timeEnd("Witness generation");
}
}Node.js
import { Halo2LibWasm, CircuitConfig, CircuitScaffold } from "@axiom-crypto/halo2-wasm/js";
import { Halo2CircuitRunner, Halo2Lib } from "@axiom-crypto/halo2-js";
export class JsCircuitScaffold extends CircuitScaffold {
halo2Lib!: Halo2LibWasm;
constructor(options) {
super(options);
}
newCircuitFromConfig(config: CircuitConfig): void {
super.newCircuitFromConfig(config);
if (this.halo2Lib) this.halo2Lib.free();
this.halo2Lib = getHalo2LibWasm(this.halo2wasm);
}
async populateCircuit(circuit: (halo2Lib: Halo2Lib, inputs: any) => Promise<void>, inputs: any) {
this.newCircuitFromConfig(this.config);
this.timeStart("Witness generation");
await Halo2CircuitRunner(this.halo2wasm, this.halo2Lib, this.config).run(circuit, inputs);
this.timeEnd("Witness generation");
}
}