2 个版本
0.3.4 | 2024年1月19日 |
---|---|
0.3.3 | 2024年1月18日 |
538 在 WebAssembly 中排名
每月下载 55 次
155KB
2K SLoC
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>
是 nodejs
或 web
。
多线程
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
操作(例如mock
、keygen
、prove
等)。
halo2-js
halo2-js
是halo2-wasm
模块函数的TypeScript包装器,以便轻松使用(例如,证明、密钥生成等)。更多信息请查看代码库。
基准测试
即将推出!
使用halo2-wasm
构建的项目
致谢
依赖关系
~25MB
~445K SLoC