#generation #witness #proof #circom #arkworks #r1cs #groth16

ark-circom

Arkworks对Circom的R1CS的绑定,用于Rust语言中的Groth16证明和证人生成

1个不稳定版本

0.1.0 2023年7月26日

#4#证人

Download history 60/week @ 2024-03-11 64/week @ 2024-03-18 49/week @ 2024-03-25 25/week @ 2024-04-01 83/week @ 2024-04-08 43/week @ 2024-04-15 127/week @ 2024-04-22 157/week @ 2024-04-29 36/week @ 2024-05-06 39/week @ 2024-05-13 101/week @ 2024-05-20 22/week @ 2024-05-27 57/week @ 2024-06-03 83/week @ 2024-06-10 34/week @ 2024-06-17 25/week @ 2024-06-24

199 每月下载量
2 crates 中使用

MIT/Apache

5.5MB
2.5K SLoC

Rust 2.5K SLoC // 0.0% comments JavaScript 239 SLoC // 0.1% comments Shell 51 SLoC

ark-circom

Arkworks对Circom的R1CS的绑定,用于Rust语言中的Groth16证明和证人生成。

Github Actions

文档

克隆仓库并运行 cd ark-circom/ && cargo doc --open

将ark-circom添加到您的仓库中

[dependencies]

ark-circom = { git = "https://github.com/gakonst/ark-circom.git" }

示例

// Load the WASM and R1CS for witness and proof generation
let cfg = CircomConfig::<Bn254>::new(
    "./test-vectors/mycircuit.wasm",
    "./test-vectors/mycircuit.r1cs",
)?;

// Insert our public inputs as key value pairs
let mut builder = CircomBuilder::new(cfg);
builder.push_input("a", 3);
builder.push_input("b", 11);

// Create an empty instance for setting it up
let circom = builder.setup();

// Run a trusted setup
let mut rng = thread_rng();
let params = generate_random_parameters_with_reduction(circom, &mut rng)?;

// Get the populated instance of the circuit with the witness
let circom = builder.build()?;

let inputs = circom.get_public_inputs().unwrap();

// Generate the proof
let proof = prove(&params, circom, &mut rng)?;

// Check that the proof is valid
let pvk = process_vk(&params.vk)?;
let verified = verify_with_processed_vk(&pvk, &inputs, &proof)?;
assert!(verified);

运行测试

测试需要安装以下内容

  1. solc。我们还推荐使用 solc-select 以获得更多灵活性。
  2. ganache-cli

功能

  • 使用Circom的WASM证人代码生成证人
  • 将ZKey解析为Arkworks在BN254上的证明密钥
  • 适用于以太坊类型的兼容层,以便证明可以在Solidity验证器中使用
  • 使用Arkworks生成和验证证明
  • 用于常见操作的CLI

已知限制

目前,由于上游问题(https://github.com/wasmerio/wasmer/issues/4072),此crate仅在Rust版本 1.67.0 及以下版本中按预期工作;在新版本的Rust中,wasmer 目前是不安全的。

致谢

如果没有以下工作,这个库将无法实现:

特别感谢 Kobi Gurkan 在解析SnarkJS的ZKey文件格式方面提供的所有帮助。

依赖关系

~19–34MB
~536K SLoC