企业培训资讯_企业培训干货

当前位置:首页 > 名师团队 > 导师语录

电路及证明示例(libsnark)【博发】

发布时间:2021-03-05    来源:博发娱乐app73446

博发娱乐app

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函数将前几个变量设置为公共变量。

博发娱乐app

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验证。

博发娱乐app

/merkle验证[root],其中root信息是在prove分解过程中来自打印机的root信息(也是发布的信息)。如果测试通过,它将解释没有可以分解根的merkle路径,尽管没有发布关于该路径的显式信息。总结:libsnark库代码层次清晰,抽象了原板和小工具,方便开发者慢慢设置电路。

本文给出了一个基于libsnark库的电路实例。该示例构建了一个具有三层默克尔根的默克尔路径测试。

默克尔树的根使用sha256的哈希函数。。

本文来源:博发-www.naturecardsforyou.com

分享到:
黄牛的屡禁不止只是上海迪士尼管理漏洞的一个缩影_博发 医药物流大鳄潜进基层医药市场【博发】
热门文章
洛阳市社会青年中招报名9日至10日进行【博发娱乐app】
扎克伯格会见欧盟竞争事务负责人玛格丽特_博发娱乐app
博发:淅川县思源学校德育冬令营公益系列活动汇报
新野五星镇魏楼学校:推门听课,推出精彩课堂-博发
郑州四禾美术学校学生们的“火车宿舍”萌萌哒
博发娱乐app-鹤壁市教育局召开党的群众路线教育实践活动督导工作暨活动骨干培训会议
【博发娱乐app】新乡医学院三全学院举行2012毕业典礼暨学位授予仪式(组图)
消息称全球首款折叠手机柔派将发第二代 或为无缝折叠【博发娱乐app】
漯河市源汇区许慎小学召开教师节表彰会表彰优秀教师(图)
洪承畴投降过程三个版本_博发
康有为死于“壮阳”手术-博发
安阳八中组织教师进行业务能力测试|博发
古代少女神秘的传情之物_博发
保监会探索建立人身险分类监管制度|博发娱乐app
博发娱乐app:湖北潜江市泰丰办事处:暖心作业本送上家门
客户案例
×