发布时间:2021-03-05 来源:博发娱乐app73446
libsnark库有一个清晰的代码层次结构。LibSNARK还获得了SNARK中涉及的算法的完整图片,包括各种关系、语言和证明系统。为了更好的分解R1CS电路,libsnark抽象了原板和小工具,方便开发者慢慢设置电路。
在阅读样例代码之前,请仔细阅读libsnark的源代码分析:零科学知识证明——libsnark源代码分析唯一令人失望的地方是libsnark没有给出一个原创的电路结构示例,初学者想建立自己的电路,但一开始有点困惑。为了方便初学者编写自己的电路,同事们编写了一个基于libsnark结构的电路,并对电路进行了分解和测试:https://github.com/StarLI-Trapdoor/libsnark_sample初学者可以基于这个例子开发自己的电路。自由选择默克尔树根作为电路的例子,因为在零科学知识证明的应用中,使用了大量的默克尔树根的数据结构。1代码结构本例构建了merkle路径的测试电路,并对其进行了分解和验证。
Merkle根的深度为3,merkle的根使用sha256哈希函数计算。代码结构清晰,merkle目录中的main.cpp是主要功能。电路目录下的Merklecircuit.h是电路的构造。
整个项目用cmake扩展编译器。电路构造电路的名字叫MerkleCircuit,主要取决于两个小工具:merkle _ authentication _ path _ variable和merkle_tree_check_read_gadget。Merkle _ authentication _ path _ variable获取Merkle根的路径。
Merkle_tree_check_read_gadget检查等价叶节点net卓新闻网是否能计算出是否有准确的根。构造一个电路,主要构造两个接口函数:generate _ R1CS _ constraints-declare R1CS。这个电路比较简单,只有两个依赖它的小玩意可以分解r1c。
generate _ r1cs _ witness-为所有变量赋值。在该电路中,必须分配的变量是根、叶、叶节点设施的默克尔路径,以及对应于默克尔路径的地址信息(即每层节点的方向,左或右)。
整个电路最简单的部分就是电路的构造器,申请人变量,小玩意。重点是set _ input _ sizes函数。
在libsnark的框架下,区分公共变量和私有变量是一个非常简单的模型。通过set _ input _ sizes函数将前几个变量设置为公共变量。
Pb . set _ input _ size(root _ digest-digest _ size);也就是说,这个电路公布的变量是根的位数。3.分解和验证确认了电路的构造。想到主要功能,如何分解验证。
在主函数中定义了merkle树的一些必要类型:typedefrifff : default _ EC _ ppppppzksnark _ PPT;typedef libff :3360 frppzksnark _ PPt field t;typedef sha 256 _ two _ to _ one _ hash _ gadgetFieldT Hasht;FieldT配置文件是bn256椭圆曲线的Fr,计算默克尔树的根使用sha256算法。3.1安装程序构建generate_read_keypair函数并分解pk/vk。
仔细看generate _ read _ key phare函数,逻辑很简单明了:构造MerkleCircuit,分解R1CS后,调用r1cs_gg_ppzksnark_generator分解pk/vk。protoboardFieldT pbsample : erklecircuitfield t,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树,根据输出指定merkle路径。
可以通过生成_ read _ proof函数分解来证明。这个函数的逻辑也很清楚:protoboardFieldT pbsample : erklecircuitfield t,HashT mc(pb,tree _ depth);MC . generate _ r1cs _ constraints();mc.generate_r1cs_witness(pb,leaf,root,path,address,address _ bitsreturn r1cs _ gg _ ppzksnark _ proverppzksnark _ PPt(provide _ key,pb.primary_input(),Pb . assistant _ input());MerkleCircuit,分解R1CS后,设置每个变量的值。然后用r1cs_gg_ppzksnark_prover分解证明。
3.3在知道vk、证书、发布信息(根)的基础上,验证调用r1cs _ gg _ ppzksnark _ verifier _ strong _ IC的模块已经过验证。这就是verify_read_proof函数的逻辑。4编译器和操作编译器之前,项目实时依赖的libsnark库:git子模块update-init-recursive 4.1编译器mkdir buildcd构建;Cmake.编译器完成后,merkle目录继续分解merkle的可执行文件。
4.2可信设置。/MerkleSetup 4.3分解证明。/Merkleprove[data 1][data 2][data 3][data 4][data 5][data 6][data 7][data 8][index]Prove命令,必须获得一个完整的3层Merkleroot的8个叶节点,4.4验证。
/merkle验证[root],其中root信息是在prove分解过程中来自打印机的root信息(也是发布的信息)。如果测试通过,它将解释没有可以分解根的merkle路径,尽管没有发布关于该路径的显式信息。总结:libsnark库代码层次清晰,抽象了原板和小工具,方便开发者慢慢设置电路。
本文给出了一个基于libsnark库的电路实例。该示例构建了一个具有三层默克尔根的默克尔路径测试。
默克尔树的根使用sha256的哈希函数。。
本文来源:博发-www.naturecardsforyou.com
博发娱乐app|最近威世智母公司宝宝在纽约玩具展的投资者活动中泄露,《博德之门3》计划在年内以先行体验形式指定Steam。 《博德之门3》迅速在PAX East上发布游戏实机的展示,因此开发者很可能不
博发|幸运蜂蜜宝藏,杨家的爱情,人气网络游戏《剑灵》特别制作的幸运蜂蜜福利活动正在疯狂地展开。活动期间,只有完成登录任务,才能收集到找到心的钥匙。该道具需要打开蜂蜜宝箱,还可以获得永久时尚、幻影武器箱
博发:长时间的休息因人而异,但为了乳房,我相信早睡早起是最不好的。 预防乳房疾病,在一定程度上是乳房,身体各器官需要长时间的休息时间,恐慌的休息时间不影响身体的新陈代谢。 我可以从你黑暗的黄色皮肤和浓
女性或许天生就具备更容易引发咳嗽的因素,而生活中的种种原因如下班长时间地坐着工作而缺少运动,工作挤迫使饮食马马虎虎,并未合理安排不含膳食纤维的食物,也不留意多饮水等都能引发咳嗽减轻。此外,女性咳嗽还有