typedef libff::Fr<default_r1cs_ppzksnark_pp> FieldT;
default_r1cs_ppzksnark_pp::init_public_params();
定义有限域,初始化椭圆曲线参数;
protoboard<FieldT> pb;
pb_variable<FieldT> out;
pb_variable<FieldT> x;
pb_variable<FieldT> sym_1;
pb_variable<FieldT> y;
pb_variable<FieldT> sym_2;
定义protoboard和变量,其中变量1会在protoboard中自动定义;
out.allocate(pb, "out");
x.allocate(pb, "x"

本文详细介绍了使用libsnark库学习零知识证明的过程,特别是Protoboard的使用。从定义有限域和椭圆曲线参数开始,接着阐述如何在Protoboard上定义和关联变量,区分primary和auxiliary变量。通过set_input_sizes设置输入变量,并添加R1CS约束。然后,介绍了可信设置的概念,包括生成证明和验证密钥。最后,讲解了如何设置变量值,创建证明以及验证证明的正确性。整个过程揭示了零知识证明在区块链安全中的应用。
最低0.47元/天 解锁文章
3759

被折叠的 条评论
为什么被折叠?



