JSPM

  • Created
  • Published
  • Downloads 43
  • Score
    100M100P100Q74168F
  • License ISC

Halo2 Javascript library

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-js

or 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");
    }

}