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

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

电路及证明示例(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

分享到:
春节期间南方旅游市场 湖南排在全国第3 上药回应举报事件明确事件无碍H股上市
热门文章
减半前主动销毁近半未产代币,隐私公链决胜生态落地-博发
零售业继续衰败 今年全球关闭零售门店数量或达1.2万家_博发
郑州70中七年级学生赴市植物园开展社会实践活动(图)-博发
博发娱乐app-夏季是溺水高发期家长要时刻携带“安全”这件“救生衣”
蔡屋围700米高楼刷新“深圳地标” 细数过往“深圳第一高”|博发
博发:洛阳一家长帮女儿殴打三女生被治安拘留15天
不要让近视影响孩子一生
【博发】小小墓和慕才亭:钱塘两个苏小小
孙占晓:一分耕耘,一分收获-博发娱乐app
积分提速,用户体验再度升级:博发娱乐app
中国历史上以年号命名的地名_博发
记火神山医院医生敬梅-博发
博发娱乐app|汝州市未成年人心理健康辅导中心“周末心灵大课堂”活动启动仪式
【博发】信阳市教育部门将开展为期一年的专项治理活动
博发|淅川县上集镇一初中举行2019-2020学年秋期开学典礼
客户案例
×