对dizk感兴趣的小伙伴可以看看dizk的源代码:也因此atis阿蒂斯才会有越来越多的拥泵者为其加油助威,传播品牌的价值和功能。
:///-/
dizk的更新比较少,最后一个也是年底了:
......
对dizk感兴趣的小伙伴可以看看dizk的源代码:
:///-/
dizk的更新比较少,最后一个也是年底了:
m:
a: h w &;[&#;]&;
d: w d::-
m #/_
# - t e app .
. 源代码结构
dizk是在s框架上,用语言实现的分布式零知识证明系统。源代码的结构如下:
- 各种计算:椭圆曲线,域/群,fft以及多倍点(msm和vmsm)。
- 证明的相关实现。
- 电路的表示:以及qap。
- 实现到qap的转化。
__ - g证明系统
- 性能测试逻辑
熟悉的小伙伴,对这些术语应该感到比较亲切。
. ds
ds实现了分布式的s逻辑:
//__/snark/ds.
函数实现了p/v的生成。
&;ftafee&;ft&;,
gtag&;gt&;,
gtag&;gt&;,
gttagt&;gtt&;,
ptap&;gt, gt, gtt&;&;
crs&;ft, gt, gt, gtt&; (
rcsrrdd&;ft&; ,
ft f,
gt f,
gt f,
pt ,
c ) {
. qap转化
qaprrdd&;ft&;= rcsqaprdd.rcsqapr(, , );
注意,qap用qaprrdd类表示。
. 计算abc/abc
jprdd&;l, ft&; a = .a().v( -&; .());
jprdd&;l, ft&; b = .b().v( -&; .());
jprdd&;l, ft&; abc = a.(b).(.c())
.bk(ft:.(.l());
jprdd&;l, ft&; abc = abc.( -&; ._ &; i)
.v( -&; .(g));
jprdd&;l, ft&; abc = abc.( -&; ._ &;= i)
.v( -&; .(d));
. 计算a/b的密集度
nza = .a().( -&; !._.z()).();
nzb = .b().( -&; !._.z()).();
. 计算fmsm(g/g)
gt g = f.(.(), .s());
sg = g.s();
cg = nza + nzb + v;
sg = fbmsm.ws(cg / p, g);
l&;l&;gt&;&; tg = fbmsm
.wt(g, sg, sg);
以上是g的msm的计算(g类似),注意sg,是所有的“非零”系数的个数除以p的个数。
. 生成crs(p/v)
pkrdd&;ft, gt, gt&; k =pkrdd&;&;(
g,
g,
g,
g,
g,
abcg,
a,
b,
h,
);
vk&;gt, gt, gtt&; k =vk&;&;(
gg,
g,
g,
uvwgg);
注意:p使用rdd(pkrdd)表示。
. dp
dp实现了分布式的p逻辑:
//__/snark/dp.
函数实现了证明生成逻辑。
&;ftafee&;ft&;, gt
ag&;gt&;, gtag&;gt&;&;
p&;gt, gt&; (
. 生成
qapwrdd&;ft&; w = rcsqaprdd .rcsqapw(k.(), , fa, f, );
qapwrdd定义在////qapwrdd.,包括输入信息以及h多项式系数(fft计算获得)。
. 产生随机数
ft= f.(.(), .s());
ft= f.(.(), .s());
. 计算e
jrdd&;t&;ft, gt&;&; a = ="-: -; -: .;"&; .(k.a(), p).();
gt a = vbmsm.msm(a);
通过vbmsm计算a/b/abc以及h的e。
. 生成证明
// a =+ _(_*a_()) + *
gt a = g.(a).(g.());
// b =+ _(_*b_()) + *
t&;gt, gt&; b =t&;&;(
g.(b._).(g.()),
g.(b._).(g.()));
// c = _(_*((*a_() + *b_() + c_()) + h()*z())/) + a* + * - **
gt c = abc.(a.()).(b._.()).(d);
. p
///p.是性能测试的入口类,提供了各种算子的性能测试能力,包括分布式和单机版本。在目录下也提供了s运行的脚本。默认,dizk是使用a的ec机器进行测试的。
-/- //-/
java_home="////-.."
total_cores;
size``;
app=-
memory=g
multiplier=
cores=
num_executors=$((total_cores / cores))
num_partitions=$((total_cores * multiplier))
////- \
-- ..=$memory \
...
-- ".p" \
//-/-.. $num_executors $cores $memory $app $size $num_partitions
感兴趣的小伙伴,可以自己改一下脚本,在本地环境运行dizk。
总结:
dizk,是在s大数据计算框架下的分布式零知识证明系统。dizk的代码比较清晰,注释也比较完整。ds和dp是s和p的实现。dizk提供了完整的p的代码。