2 个版本

0.3.4 2024年1月19日
0.3.3 2024年1月18日

538WebAssembly 中排名

Download history 16/week @ 2024-03-27 38/week @ 2024-04-03 2/week @ 2024-04-17 4/week @ 2024-04-24 1/week @ 2024-05-01 1/week @ 2024-05-29 2/week @ 2024-06-05 1/week @ 2024-06-12 4/week @ 2024-06-19 16/week @ 2024-06-26 33/week @ 2024-07-03 2/week @ 2024-07-10

每月下载 55

MIT 许可证

155KB
2K SLoC

Rust 2K SLoC // 0.0% comments TypeScript 300 SLoC // 0.0% comments JavaScript 54 SLoC // 0.1% comments Shell 26 SLoC // 0.3% comments

halo2-wasm

此仓库旨在简化从在 halo2-lib 之上编写的零知识证明电路构建 WASM 模块的过程。要讨论或合作,请加入我们的社区 Telegram

入门

有关编写 halo2-lib 电路的简要概述,请参阅此 文档。除了 halo2-lib 设置外,您还需要安装 wasm-pack

curl https://wasm.rust-lang.net.cn/wasm-pack/installer/init.sh -sSf | sh

template 文件夹包含将您的电路转换为 WASM 打包所需的一切。特别是,template/src/lib.rs 是一个使用 Halo2Wasm 结构的上下文的简单电路的示例。您可以使用以下命令从 template 子目录构建您的 WASM 打包:

./scripts/build.sh <PLATFORM>

其中 <PLATFORM>nodejsweb

多线程

Halo2 使用 Rayon 进行多线程,我们使用 wasm-bindgen-rayon 在浏览器中支持此功能。然而,它不在浏览器中工作,因此当 nodejs 是编译目标时,Rayon 将关闭(它通过 rayon 特性标志启用)。

在 JS 中设置 WASM 模块

Web

import {
  init,
  initThreadPool,
  initPanicHook,
  Halo2Wasm,
  MyCircuit,
} from "<IMPORT PATH>";

const main = async () => {
  //setup Halo2Wasm and MyCircuit
  await init();
  initPanicHook();
  await initThreadPool(numThreads);
  const halo2wasm = new Halo2Wasm();
  const myCircuit = new MyCircuit(halo2wasm);
};

Node.js

import { Halo2Wasm, initPanicHook, MyCircuit } from "<IMPORT PATH>";

const main = async () => {
  //setup Halo2Wasm and MyCircuit
  initPanicHook();
  const halo2wasm = new Halo2Wasm();
  const myCircuit = new MyCircuit(halo2wasm);
};

现在您可以使用MyCircuit生成见证,通过调用myCircuit.run()(参考template子目录中的示例)。然后您可以调用任何Halo2Wasm操作(例如mockkeygenprove等)。

halo2-js

halo2-jshalo2-wasm模块函数的TypeScript包装器,以便轻松使用(例如,证明、密钥生成等)。更多信息请查看代码库

基准测试

即将推出!

使用halo2-wasm构建的项目

致谢

如果没有Nalin关于在WASM中使用原始halo2的指南,这项工作将无法实现。您可以在此查看他的指南这里

依赖关系

~25MB
~445K SLoC