1个不稳定版本
0.1.0 | 2023年7月26日 |
---|
#4 在 #证人
199 每月下载量
在 2 crates 中使用
5.5MB
2.5K SLoC
ark-circom
Arkworks对Circom的R1CS的绑定,用于Rust语言中的Groth16证明和证人生成。
文档
克隆仓库并运行 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(¶ms, circom, &mut rng)?;
// Check that the proof is valid
let pvk = process_vk(¶ms.vk)?;
let verified = verify_with_processed_vk(&pvk, &inputs, &proof)?;
assert!(verified);
运行测试
测试需要安装以下内容
solc
。我们还推荐使用 solc-select 以获得更多灵活性。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