libsnark库代码层次非常清晰。libsnark也给出了SNARK相关算法的全貌,各种Relation,Language,Proof System。为了更好的生成R1CS电路,libsnark抽象出protoboard和gadget,方便开发者快速搭建电路。在阅读该示例代码前,请仔细阅读libsnark的源代码分析:零知识证明 - libsnark源代码分析
唯一有点遗憾的,libsnark没有给个完整的电路构造实例,入门者想搭建自己的电路,刚开始有点摸不着头脑。
为了方便入门者编写自己的电路,同事写了个基于libsnark构造电路,并生成并验证电路的实例:
https://github.com/StarLI-Trapdoor/libsnark_sample
SKALE即将发布去中心化零知识证明解决方案Levitation Protocol:6月2日消息,以太坊侧链 SKALE 开发人员宣布了一项 SKALE 改进提案,即,去中心化零知识证明解决方案 Levitation Protocol,旨在通过使全套 ZK 解决方案无缝连接到 SKALE 架构,并将 Rollup 连接到以太坊主网。该提案包括进一步的生态系统升级,增加了一个新的「Layer 1 Megachain」,称为 SKALE G(G 代表木卫三,太阳系中最大的卫星)。
SKALE 开发人员计划在未来几个月内开始发布 Levitation Protocol 源代码,之后将启动公共测试网。Levitation Protocol 主网计划于 2023 年第四季度推出。[2023/6/2 11:53:31]
入门者,可以基于这个示例开发自己的电路。选择默克尔树作为电路的示例,因为在零知识证明的应用中,大量的使用默克尔树数据结构。
零知识证明公司RISC Zero与L2协议Layer N联合推出零知识欺诈证明系统:5月24日消息,零知识证明初创公司RISC Zero宣布与模块化L2协议Layer N联合推出零知识欺诈证明系统。该系统通过将Layer N的执行环境移植到RISC Zero的zk虚拟机上,以实现提升区块链性能的同时,保证区块链的可靠性和安全性。未来,zkVM还将实现与其他执行层的兼容,如EVM、SVM和WASM等。
此前报道,去年8月,零知识证明初创公司RISC Zero宣布完成1200万美元种子轮融资,Bain Capital Crypto领投。[2023/5/24 22:15:02]
该示例构造了一条merkle路径的验证电路,生成并验证证明。merkle树的深度为3,并且merkle树的计算采用sha256散列函数。代码结构比较清晰,merkle目录中的main.cpp是主函数。circuit目录下的merklecircuit.h是电路的实现。整个项目用cmake进行编译。
GSR首席执行官:投资零知识证明、去中心化期权交易、借贷协议和去中心化保险感到兴奋:金色财经报道,GSR首席执行官Jakob Palmstierna表示,如果你真的相信这个领域,现在是部署资本的好机会。Palmstierna表示对投资零知识证明、去中心化期权交易、借贷协议和去中心化保险感到特别兴奋。
Palmstierna承认加密投资世界面临着充满挑战的时期。一方面,利率上升使美国国债等安全资产的回报更具吸引力,从而减少了投资者可用于加密货币和风险投资等另类投资的现金。另一方面,资本成本更高,LP资本已经更难获得了,筹集资金的环境要艰难得多[2022/12/2 21:18:10]
电路名为MerkleCircuit,主要依赖两个gadget:merkle_authentication_path_variable和merkle_tree_check_read_gadget。merkle_authentication_path_variable提供了merkle树的一条路径。merkle_tree_check_read_gadget检查给定一个叶子节点,是否能计算出正确的root。
BNB Chain将于年底上线零知识证明扩容方案zkBNB主网:9月8日消息,BNB Chain宣布已于9月2日上线基于零知识证明的扩展解决方案zkBNB测试网,允许开发人员开始构建应用程序,计划于年底上线主网。BNBChain称,zkBNB旨在提供更快的交易速度、更快的最终确定性、更低gas费,是BNBChain实现规模化的重大突破。
根据介绍,zkBNB的特点包括:支持快速集成支付和原子交换,利用创新的内置AMM交换和DeFi用例的流动性池,数字资产将在未经许可的情况下自动交易;TPS达到5000-10000;内置NFT市场和API服务;内置域名服务等。[2022/9/8 13:15:41]
实现一个电路,主要实现两个接口函数:
generate_r1cs_constraints - 生成R1CS,该电路比较简单,只要让依赖的两个gadget,生成R1CS即可。
公告 | 安永发布第三代零知识证明区块链技术 可通过批量处理降低交易成本:据安永官网今日公告,安永已在以太坊公共区块链上的公共领域发布第三代零知识证明(ZKP)区块链技术。第三代ZKP区块链技术可通过在一次交易中将多个私人转让批量处理来显着降低交易成本,有助于使公共区块链上的私人交易更具可扩展性。[2019/12/19]
generate_r1cs_witness - 给所有的变量进行赋值。该电路,需要赋值的变量有root,leaf(叶子节点),和叶子节点配套的默克尔路径,以及默克尔路径对应的地址信息(也就是每一层的节点的位置,左边还是右边)。
整个电路最复杂的就是电路的构造函数,申请变量,创建gadget。其中重点讲一讲,set_input_sizes函数。libsnark的框架中,使用简单的区分public和private变量的模型。通过set_input_sizes函数,设置前几个变量为public变量。
pb.set_input_sizes(root_digest->digest_size);也就是说,该电路的公开变量为root的bit个数。
确定了电路的实现,看看main函数,如何生成和验证证明。
在main函数中定义了merkle树计算需要的一些类型:
FieldT默认是bn256椭圆曲线的的Fr,默克尔树计算采用是sha256算法。
3.1 setup
实现了generate_read_keypair函数,生成pk/vk。仔细看一下generate_read_keypair函数,逻辑简单清晰:构造MerkleCircuit,在生成R1CS后,调用r1cs_gg_ppzksnark_generator生成pk/vk。
pk存放在merkle_pk.raw文件中,vk存放在merkle_vk.raw中。
3.2 prove
prove逻辑,首先从输入参数构造一个完整的merkle树,并根据输入选定了默克尔路径。通过generate_read_proof函数生成证明。该函数逻辑也比较清晰:
构造MerkleCircuit,在生成R1CS后,设置各个变量的值。接着通过r1cs_gg_ppzksnark_prover生成证明。
3.3 verify
在获知vk,证明以及公开信息(root)的基础上,调用r1cs_gg_ppzksnark_verifier_strong_IC的接口完成验证。这也就是verify_read_proof函数的逻辑。
在编译之前,同步该项目依赖的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的散列函数。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。