贝博bet-贝博体育下载 / Blog / 科技 / 电路及证明示例(libsnark)|贝博bet体育

电路及证明示例(libsnark)|贝博bet体育

本文摘要:libsnark库代码层次十分明晰。

贝博bet体育

细心看一下generate_read_keypair函数,逻辑非常简单明晰:结构MerkleCircuit,在分解R1CS后,调用r1cs_gg_ppzksnark_generator分解pk/vk。protoboardFieldT pb; sample::MerkleCircuitFieldT, HashT mc(pb, tree_depth); mc.generate_r1cs_constraints(); r1cs_constraint_systemFieldT cs = pb.get_constraint_system(); return r1cs_gg_ppzksnark_generatorppzksnark_ppT(cs);pk存放在merkle_pk.raw文件中,vk存放在merkle_vk.raw中。

3.2 proveprove逻辑,首先从输出参数结构一个原始的merkle树,并根据输出指定了默克尔路径。通过generate_read_proof函数分解证明。

该函数逻辑也较为明晰: protoboardFieldT pb; sample::MerkleCircuitFieldT, HashT mc(pb, tree_depth); mc.generate_r1cs_constraints(); mc.generate_r1cs_witness(pb, leaf, root, path, address, address_bits); return r1cs_gg_ppzksnark_proverppzksnark_ppT(proving_key, pb.primary_input(), pb.auxiliary_input());结构MerkleCircuit,在分解R1CS后,设置各个变量的值。接着通过r1cs_gg_ppzksnark_prover分解证明。

3.3 verify在得知vk,证明以及公开发表信息(root)的基础上,调用r1cs_gg_ppzksnark_verifier_strong_IC的模块已完成检验。这也就是verify_read_proof函数的逻辑。

4 编译器和运营在编译器之前,实时该项目倚赖的libsnark库:git submodule update –init –recursive4.1 编译器mkdir build; cd build; cmake ..编译器已完成,merkle目录持续性分解merkle的可执行文件。4.2 可靠设置(trusted setup)./merkle setup4.3 分解证明./merkle prove [data1] [data2] [data3] [data4] [data5] [data6] [data7] [data8] [index]prove命令,必须获取完整的3层merkle树根的8个叶子节点,并登录必须证明的第几个叶子节点对应的路径(index说明)。4.4 检验./merkle verify [root]其中,root信息是在prove中分解过程中打印机出来的root信息(也是公开发表信息)。

如果检验通过,就解释不存在一条能分解root的merkle路径,虽然没公开发表路径的明确信息。总结:libsnark库代码层次十分明晰,并抽象化出有protoboard和gadget,便利开发者较慢搭起电路。

本文得出了一个基于libsnark库研发的原始电路示例。示例构建了3层默克尔树根的一条默克尔路径的检验。

其中默克尔树根使用sha256的散列函数。

本文关键词:贝博bet下载,贝博官网,贝博bet体育,贝博bet体育下载,贝博bet2020

本文来源:贝博bet下载-www.rongliyun.com

相关文章

网站地图xml地图