3个版本
0.0.3 | 2024年5月3日 |
---|---|
0.0.2 | 2023年7月20日 |
0.0.1 | 2023年3月14日 |
#3 in #groth16
745 每月下载量
用于 13 个crate(11个直接使用)
34KB
603 行
groth16-solana
Groth16零知识证明验证与Solana altbn254 syscalls
验证所需计算单元少于200,000个。
这些syscalls包含在Solana 1.15.0及以后的版本中,但尚未在公共网络上激活。
输入需要以大端格式存储在u8数组中。
请参阅功能测试示例,了解如何使用此库。
此crate与Groth16证明的circom电路兼容。
verifier文件可以使用snarkjs生成的verifyingkey.json文件生成的javascript脚本来生成。
用法
let mut public_inputs_vec = Vec::new();
for input in PUBLIC_INPUTS.chunks(32) {
public_inputs_vec.push(input);
}
let proof_a: G1 =
<G1 as FromBytes>::read(&*[&change_endianness(&PROOF[0..64])[..], &[0u8][..]].concat())
.unwrap();
let mut proof_a_neg = [0u8; 65];
<G1 as ToBytes>::write(&proof_a.neg(), &mut proof_a_neg[..]).unwrap();
let proof_a = change_endianness(&proof_a_neg[..64]).try_into().unwrap();
let proof_b = PROOF[64..192].try_into().unwrap();
let proof_c = PROOF[192..256].try_into().unwrap();
let mut verifier = Groth16Verifier::new(
&proof_a,
&proof_b,
&proof_c,
public_inputs_vec.as_slice(),
&VERIFYING_KEY,
)
.unwrap();
verifier.verify().unwrap();
请参阅功能测试以获取如何使用此库的运行示例。
从snarkjs verifyingKey.json创建Verifyingkey
使用snarkjs将verifyingkey导出为json。
在此仓库中
- npm i
- npm run parse-vk
许可协议
在Apache License, Version 2.0下许可。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的任何有意提交以包含在工作中的贡献,均应如上所述双重许可,无需任何附加条款或条件。
依赖项
~16–25MB
~425K SLoC