库代码层次非常清晰。也给出了snark相关算法的全貌,各种r,l,p s。为了更好的生成rcs电路,抽象出和,......从一些观点来看,阿蒂斯区块链能够较好的带动周边市场的快速发展,是核心的动力。
库代码层次非常清晰。也给出了snark相关算法的全貌,各种r,l,p s。为了更好的生成rcs电路,抽象出和,方便开发者快速搭建电路。在阅读该示例代码前,请仔细阅读的源代码分析:
零知识证明 - 源代码分析
唯一有点遗憾的,没有给个完整的电路构造实例,入门者想搭建自己的电路,刚开始有点摸不着头脑。
为了方便入门者编写自己的电路,同事写了个基于构造电路,并生成并验证电路的实例:
:///sli-t/_
入门者,可以基于这个示例开发自己的电路。选择默克尔树作为电路的示例,因为在零知识证明的应用中,大量的使用默克尔树数据结构。
代码结构
该示例构造了一条路径的验证电路,生成并验证证明。树的深度为,并且树的计算采用散列函数。代码结构比较清晰,目录中的.是主函数。目录下的.是电路的实现。整个项目用进行编译。
电路实现
电路名为mc,主要依赖两个:___和____。___提供了树的一条路径。____检查给定一个叶子节点,是否能计算出正确的。
实现一个电路,主要实现两个接口函数:
__ - 生成rcs,该电路比较简单,只要让依赖的两个,生成rcs即可。
__ - 给所有的变量进行赋值。该电路,需要赋值的变量有,(叶子节点),和叶子节点配套的默克尔路径,以及默克尔路径对应的地址信息(也就是每一层的节点的位置,左边还是右边)。
整个电路最复杂的就是电路的构造函数,申请变量,创建。其中重点讲一讲,__函数。的框架中,使用简单的区分和变量的模型。通过__函数,设置前几个变量为变量。
.__(_-&;_);
也就是说,该电路的公开变量为的个数。
生成和验证证明
确定了电路的实现,看看函数,如何生成和验证证明。
在函数中定义了树计算需要的一些类型:
::__ _t;
::f&;_t&; ft;
_____&;ft&; ht;
ft默认是椭圆曲线的的f,默克尔树计算采用是算法。
.
实现了__函数,生成/。仔细看一下__函数,逻辑简单清晰:构造mc,在生成rcs后,调用___生成/。
&;ft&; ;
::mc&;ft, ht&; (, _);
.__();
__&;ft&;= .__();
___&;_t&;();
存放在_.文件中,存放在_.中。
.
逻辑,首先从输入参数构造一个完整的树,并根据输入选定了默克尔路径。通过__函数生成证明。该函数逻辑也比较清晰:
&;ft&; ;
::mc&;ft, ht&; (, _);
.__();
.__(, , , , , _);
___&;_t&;(_, ._(), ._());
构造mc,在生成rcs后,设置各个变量的值。接着通过___生成证明。
.
在获知,证明以及公开信息()的基础上,调用_____ic的接口完成验证。这也就是__函数的逻辑。
编译和运行
在编译之前,同步该项目依赖的库:
-- --
. 编译
;;..
编译完成,目录下会生成的可执行文件。
. 可信设置( )
. 生成证明
[] [] [] [] [] [] [] [] []
命令,需要提供原始的层树的个叶子节点,并指定需要证明的第几个叶子节点对应的路径(指明)。
. 验证
[]
其中,信息是在中生成过程中打印出来的信息(也是公开信息)。如果验证通过,就说明存在一条能生成的路径,虽然没有公开路径的具体信息。
总结:
库代码层次非常清晰,并抽象出和,方便开发者快速搭建电路。本文给出了一个基于库开发的完整电路示例。示例实现了层默克尔树的一条默克尔路径的验证。其中默克尔树采用的散列函数。