区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > ETH > 正文

零知识证明——基于libsnark的电路构造及证明示例

作者:

时间:

libsnark库代码层次非常清晰。libsnark也给出了SNARK相关算法的全貌,各种Relation,Language,Proof System。为了更好的生成R1CS电路,libsnark抽象出protoboard和gadget,方便开发者快速搭建电路。在阅读该示例代码前,请仔细阅读libsnark的源代码分析:零知识证明 - libsnark源代码分析

唯一有点遗憾的,libsnark没有给个完整的电路构造实例,入门者想搭建自己的电路,刚开始有点摸不着头脑。

为了方便入门者编写自己的电路,同事写了个基于libsnark构造电路,并生成并验证电路的实例:

https://github.com/StarLI-Trapdoor/libsnark_sample

入门者,可以基于这个示例开发自己的电路。选择默克尔树作为电路的示例,因为在零知识证明的应用中,大量的使用默克尔树数据结构。

该示例构造了一条merkle路径的验证电路,生成并验证证明。merkle树的深度为3,并且merkle树的计算采用sha256散列函数。代码结构比较清晰,merkle目录中的main.cpp是主函数。circuit目录下的merklecircuit.h是电路的实现。整个项目用cmake进行编译。

彭博分析师:比特币在2022年将继续跑赢黄金和股市:金色财经报道,彭博商品策略师Mike McGlone对比特币的表现进行了预测,由于通胀飙升、利率上升以及乌克兰危机,2022年可能为风险资产回归做好准备,标志着比特币成熟的另一个里程碑。这位分析师补充说,他相信 BTC 将继续跑赢黄金和股市。

根据他分享的一张图表,比特币的表现大大优于黄金、标准普尔 500 总回报指数以及美国货币供应量的增长。

McGlone在2020年11月特别准确地预测,BTC的价格将超过20,000美元大关,并在2021年进入抛物线反弹。(cryptoglobe)[2022/3/18 14:05:00]

电路名为MerkleCircuit,主要依赖两个gadget:merkle_authentication_path_variable和merkle_tree_check_read_gadget。merkle_authentication_path_variable提供了merkle树的一条路径。merkle_tree_check_read_gadget检查给定一个叶子节点,是否能计算出正确的root。

实现一个电路,主要实现两个接口函数:

generate_r1cs_constraints - 生成R1CS,该电路比较简单,只要让依赖的两个gadget,生成R1CS即可。

数据:NFT数字艺术品10月销售额超过168万美元:1confirmation合伙人Richard Chen发推称,10月是NFT数字艺术市场又一个创纪录的月份,销售额超过168万美元。其中数字艺术品市场SuperRare相比前一个月增长72%。

Chen还提到,Dune Analytics查询页统计的数据不包含数字艺术品平台Nifty?Gateway,因为其付款是在链下以法币完成的。[2020/11/1 11:21:27]

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的散列函数。

标签:ERKOOTADGCIRTerkehhLOOTbadger币创始人Circuits of Value

ETH热门资讯
金色趋势丨BTC再度站回至前期上行趋势线

前期价格触及10500美元开始回落,并一路下探至接近120日线附近,成交量逐步衰减,下跌动能放缓,今日迎来反弹,价格再次站回至5日线上方,同时站上6433美元启动的上涨第一阶段趋势线上方,后续站稳不破,继续震荡上行的概率大,前期提示,减半行情并未走完,近期持续下杀,价格偏离均线较远,需要维持一段时间的震荡修复,形成短线多头趋势。

金色荐读 | 2019年Deribit BTC 期权市场分析

数字货币行业最令人期待的发展之一便是期权市场的增长。那些普通期权(又被称为“香草期权”),已经在Deribit(2016),和LedgerX(2017)这样的数字资产交易平台上存在了数年之久。 近期,期货市场流动性的发展(例如:永续期货和具有固定滚动期限的期货)使得建立更复杂的衍生产品变得更加容易,从而使得期权交易可以更大规模地进行。

区块链数据分析 让你看清交易对手

编译:Captain Hiro 通过分析区块链数据集,我们会对加密货币有更好、更清楚的理解。 (图片来源:pxfuel) 理解交易对手是资本市场交易的艺术之一。特定资产的投资者组成,比如人口统计、交易活动甚至人气方面的数据可能是预测资产行为的重要指标。在传统的资本市场中,投资者只能根据价格、交易量和订单的相关数据集进行分析。

金色观察 | 全球央行或联动降息 比特币会伺机而动吗?

最新消息:北京时间3月3日晚10点,美联储经济宣布非常规降息,将基准利率下调50个基点,将IOER降低50基点至1.1%。 历史不会重复自己,但会押着同样的韵脚。 冥冥之中,比特币和经济危机、全球央行货币大宽松纠缠在一起,它们也成就了比特币。

金色观察 | 回报率达21.15% 加密货币是好的对冲工具吗?

在过去的一周里,世界各地的市场不约而同的上演着“下跌”的旋律。一向被认为有弹性,是投资者完美避风港的黄金也出现崩盘。甚至美联储主席也发表声明,安抚投资者对经济实力的信心。随着传统市场的暴跌,加密市场也跟随着同样的趋势。尽管如此,很多人仍认为加密货币是最好的对冲工具。