libsnark库代码层次非常清晰。libsnark也给出了SNARK相关算法的全貌,各种Relation,Language,Proof System。为了更好的生成R1CS电路,libsnark抽象出protoboard和gadget,方便开发者快速搭建电路。在阅读该示例代码前,请仔细阅读libsnark的源代码分析:零知识证明 - libsnark源代码分析
唯一有点遗憾的,libsnark没有给个完整的电路构造实例,入门者想搭建自己的电路,刚开始有点摸不着头脑。
为了方便入门者编写自己的电路,同事写了个基于libsnark构造电路,并生成并验证电路的实例:
https://github.com/StarLI-Trapdoor/libsnark_sample
零知识证明技术公司Proven完成1580万美元融资:金色财经报道,Proven是一家提供零知识证明技术以使加密货币公司能够证明偿付能力的公司,完成1580万美元种子轮融资,Framework Ventures领投,Balaji Srinivasan、Roger Chen和Ada Yeo等参投。[2023/3/9 12:52:34]
入门者,可以基于这个示例开发自己的电路。选择默克尔树作为电路的示例,因为在零知识证明的应用中,大量的使用默克尔树数据结构。
该示例构造了一条merkle路径的验证电路,生成并验证证明。merkle树的深度为3,并且merkle树的计算采用sha256散列函数。代码结构比较清晰,merkle目录中的main.cpp是主函数。circuit目录下的merklecircuit.h是电路的实现。整个项目用cmake进行编译。
MolochDAO推出基于零知识证明的“隐私池”加密混合服务:3月7日消息,为以太坊基础设施项目提供资金支持的去中心化自治组织MolochDAO推出基于零知识证明的“隐私池”加密混合服务,旨在保护链上交易时的隐私,同时还允许用户证明他们遵守当地法规。
据悉,MolochDAO的隐私池(Privacy Pools)将利用零知识证明这一隐私保护技术,使用户能够证明他们正在将受制裁的钱包列入黑名单,同时无需透露他们是谁,也无需披露全部交易历史。(The Defiant)[2023/3/7 12:46:33]
电路名为MerkleCircuit,主要依赖两个gadget:merkle_authentication_path_variable和merkle_tree_check_read_gadget。merkle_authentication_path_variable提供了merkle树的一条路径。merkle_tree_check_read_gadget检查给定一个叶子节点,是否能计算出正确的root。
零知识证明技术开发公司StarkWare推出第一个公开版本Cairo 1.0:1月6日消息,零知识证明技术开发公司 StarkWare 宣布推出第一个公开版本的 Cairo 1.0,Cairo 于 2020 年作为图灵完备的编程语言首次推出,用于高效编写 STARK 可证明的程序。Cairo 1.0 中最重要的变化之一是语法,新版本的 Cairo 允许编写更安全的代码。Cairo 1.0 还引入了 Sierra,这是一种新的中间表示,可确保每次 Cairo 运行都可以得到证明。StarkWare 表示,预计在接下来的几周内,提供与旧版本相同的 Cairo 1.0 功能,对 StarkNet 合约的支持将在即将到来的 StarkNet Alpha 版本中加入。[2023/1/6 10:24:18]
实现一个电路,主要实现两个接口函数:
波卡联合创始人:财政部很快将为零知识扩展和网络基础设施发展提供巨额资金:1月23日消息,波卡联合创始人Robert Habermeier发推表示,Polkadot财政部可能很快就会为进一步发展零知识扩展和网络基础设施提供巨额资金。Exit-to-DAO作为一种商业模式将是2022年及以后的决定性变化。[2022/1/23 9:08:17]
generate_r1cs_constraints - 生成R1CS,该电路比较简单,只要让依赖的两个gadget,生成R1CS即可。
generate_r1cs_witness - 给所有的变量进行赋值。该电路,需要赋值的变量有root,leaf(叶子节点),和叶子节点配套的默克尔路径,以及默克尔路径对应的地址信息(也就是每一层的节点的位置,左边还是右边)。
门罗币完成零知识证明系统Bulletproofs+代码审计:2月15日,门罗币官方发推称,完成零知识证明系统Bulletproofs+代码审计。此前消息,零知识证明系统Bulletproofs+代码获准可在门罗币协议中使用。随后官方计划筹集90.3 XMR以进行零知识证明系统Bulletproofs+审计。[2021/2/15 19:49:05]
整个电路最复杂的就是电路的构造函数,申请变量,创建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的散列函数。
2月25日,EOS 节点 EOS Nation 发起多签提案setinflation,提议将EOS总通胀率设置为1%,且不再注入eosio.saving账户.
1900/1/1 0:00:00金色公开课,由金色财经主办,定位联合行业头部企业一起打造行业最全最专业的知识共享平台。课程将以社群分享、线上直播、全网直播的方式打造行业最具影响力的线上栏目,累积100期课程,10万以上社群覆盖.
1900/1/1 0:00:00美国证券交易委员会(SEC)与演员Steven Seagal达成和解。 CryptoFed DAO已撤回向美SEC提交的Ducat和Locke证券注册请求:7月6日消息,American Cry.
1900/1/1 0:00:00如果政府腐败影响到国家货币的稳定,那么公民自然会转向黄金或BTC等其他资产来进行储蓄投资。这种方式能在一个原本不稳定的市场中给他们提供一种财务控制感。感受到加密货币影响的不仅仅是投资.
1900/1/1 0:00:00Overview 概述疫情之下,大量的企业都在艰难地维持运转,根据《中欧商业评论》中的报道显示,账上现金余额能维持企业生存的时间,67.1%的企业可以维持两个月.
1900/1/1 0:00:00金色财经 区块链2月14日讯 对于IOTA基金会来说,情人节的日子可能并不好过。作为IOTAIOTA分布式网络背后的非营利性组织,该基金会在收到多次关于资金被盗的消息之后建议用户关闭.
1900/1/1 0:00:00