英超投注-ethsnarks源代码导读

石材雕刻机 | 2020-11-25

最近一看就知道,找几个能知道的句子就知道了。(威廉莎士比亚,泰姆派斯特,望)印象浅的是文人、网络CEO VOGEL的一篇文章:最慢的凑合方式是慢慢做。创业最重要的能力是“不需要的能力”。

这才是“探索力”的明确创业“执行力”的核心。很多人都知道告诉别人具体的目标,然后明确地继续执行。但是创业是一种探索,没有人会告诉他你这样的具体目标。

英超下注

探索是一种反人性的活动。大部分人会探索恐惧、不安、违规、茫然。

要控制好“不堵”、“任务分解,递归慢”的方法论,要树立“传达”的态度(各期结束后可以交付),“善于交流”,“必须‘不固执’,‘更一定’”不堵”,还有一点要注意的是,不要让多少本钱打多少仗,不要老是打大仗,要从小开始逐渐学会打架。Ethsnarks以libsnark为基础,构建了Ethsnarks与zkSNARK相关的智能合同和电路。Ethsnarks本身也是libsnark很好地应用的自学例子。

Ethsnarks的源代码地址:https://github.com/HarryR/Ethsnarks . git本文档中使用的ethsnarks源代码的最后一个commit如下:commit 9 ADC 64355 ADB 9154 ba 5042 c 0f ADF 84c 438 b 8a 08a author 3360 wan seob lim[email prim Date : fri aug 16 01336049336019 2019 0900 add fr这些智能协议可以通过truffle执行部署测试。与部署相关的脚本位于迁移目录中。

Ethsnarks-python构建的相关功能包括散列函数(如pedersen/mimc/poseidon)、groth16检查和椭圆曲线计算。测试-用python语言编写的上述两个功能的测试代码。Depends-依赖库、libsnark、libfqfft等。

构建在基于Src-libsnark的gadget1库中的更好gadget。本文重点讨论了这些小工具的构建。2.gadget构建src目录的源代码结构如下:2.1 ethsnarks.hpplibsnark的gadget1库主要以sha256(基于bit的hash函数)为中心构建各种gadgets。

Ethsnarks在名为alt_bn128的椭圆曲线上构建了基于Field的哈希函数(mimc、Pedersen、Poseidon等)。Libsnark的电路有很广的定义。

官网

Libsnark定义了pb _ variable _ arrayFieldT变量数组类型。Ethsnarks.hpp简化了与alt_bn128椭圆曲线相关的类型声明。namespace ethsn arks { Typedef lib ff :3360 bigintlibff 33603360 alt _ bn 128 Typedef lib ff 33603360 alt _ bn 128 _ G1 g1ttypedef lib ff :3360 alt _ bn 128 _ g2g 2t;typedef lib ff :3360 alt _ bn 128 _ pppt;Typedef lib ff :3360 FQ PPT fqttypedef lib ff :3360 FRPPT Fieldt;typedeflib snark 33603360 R1 cs _ constraintfieldt constraint;typedeflibsnark :3360 protoboardfieldt protoboardt;typedeflib snark 33603360 Pb _ variable ethsnarks 33603360 Fieldt variable t;typedeflib snark 33603360 Pb _ variable _ array fieldt variable arrayt;type deflib snark 33603360 Pb _ linear _ combination fieldt linear combinationt;type deflib snark 33603360 Pb _ linear _ combination _ array fieldt linearcombinationarrayt;typedeflib snark 33603360 linear _ termfieldt linear termt;typedeflib snark 33603360 gadgetethsnarks :3360 fieldt gadgett;typedef libsnark 33603360 R1 cs _ gg _ ppzksnark _ zok _ proof PPT prooft;typedef libsnark 3360360 R1 cs _ gg _ ppzksnark _ zok _ proving _ key PPT proving keyt;type deflibsnark 3360360 R1 cs _ gg _ ppzksnark _ zok _ verification _ key PPT verification keyt;typedef libsnark 3360360 R1 cs _ gg _ ppzksnark _ zok _ primary _ input PPT primary inputt;type deflibsnark 3360360 R1 cs _ gg _ ppzksnark _ zok _ auxiliary _ input PPT auxiliaryinputt;}其中FieldT特别表示alt_bn128线上的点数。构建2.2 utils . HPP/utils . CPU tils电路构建中常用的功能函数。

inline const variablet make _ variable(protoboardt in _ Pb,const STD 3360360 string annotation){ variablet x;X.allocate(in_pb,annotation);return x;}make_variable创建变量。constvariablearrayt flatten(conststd 3360360 vectorvariablearrayt in _ scalars){ size _ t total _ SZ=0;FOR(CONST Auto Scalar 3360 In _ Scalars)TOTAL _ SZ=Scalar . Size();VariableArrayT resultresult . resize(total _ SZ);size _ t offset=0;FOR(CONST Auto Scalar 3360 In _ Scalars){ FOR(Size _ t I=0;is calar . size();I) {result [offset]。index=scalar [I]。索引;} } return result}flatten函数将多个VariableArrayT拆分为一个VariableArray。

英超投注

但是很简单。将VariableArray的指数除以VariableArray。

2.3 r1cs_gg_ppzksnark_zok基于libsnark的r1cs_gg_ppzksnark稍有变化,使以太网房间的预编译器智能协议能够验证groth16的算法。R1cs_gg_ppzksnark_zok目录中的README.md明确说明了更改的原因。在乙醚的拜占庭软端,乙醚引入了通过基于ALT_BN128的过滤函数计算的预编译器协议。合同由以下内容组成:等价的ALT_BN128的两个基准点(G1/G2)系列点(A1,B1,A2,B2) Groth16的原始检查系数为vk.alpha_beta,vk.gamma,vk.deltaGroth16的检查等式为vk.alpha_beta=e (a,b) * e (-x,vk.gamma) * e (-c,vk.delta)。

如果需要使用以前的检查等式,请使用在不影响Groth16安全性的情况下,将Groth16的检查系数更改为vk.alpha、网络托报网、vk.beta、vk.gamma和vk.delta。Groth16的检查方程式也包括:e (a,b) * e (-x,vk.gamma) * e (-c,VK . Delta)* E(-Alpha,)和Stubs . HPP/2.4 poseidonposeidon算法构建在gadgets/poseidon.hpp文件中。

Template unsigned ninputs,unsigned noutputs,bool constrain outputs=true using Poseidon 128=Poseidon _ gadget _ to前四个参数是Poseidon算法的参数,以前没有写详细说明Poseidon算法和这些参数含义的句子(6、1、8、57是配置文件中的设备)。NInputs登录算法的输出数、nOutputs登录输入数、contrainOutputs登录否输入扩展限制。Poseidon_gadget_T的建构函式为pose Idon _ gadget _ T(protoboardt Pb,const variablearrayt in _ inputs,constants)round [0]')、prefix _ full _ rounds(Make _ rounds fullround Annotation _ prefix)、partial _。

output '): variable arrayt(){ } pose Idon算法的计算由多个回合组成。Partial_rounds(中、非原生轮子)、suffix_full_rounds(后处理、原生轮子)和last_round(最后一轮子)。

英超下注

_output_vars是输入的变量。这些轮子都是通过make_rounds函数构建的。 template typename t static const STD 33603360 vector tmake _ rounds(unsigned n _ begin,unsigned n _ end,protoboard)for(unsigned I=n _ begin;In _ endI ){const auto state=(i==n_begin)?Inputs : result.back()。outputsResult.emplace _ back (Pb,constants.c [I],constants.m,state,fmt(annotation _ preen } reture)}make_rounds是适用于每一轮的参数。

每一轮的明确构建是通过Poseidon_Round构建的。比较Poseidon_Round中PCB下Poseidon_gadget_T的generate_r1cs_constraints和generate _ r1cs _ witness 3。示例代码非常简单,以ethsnarks为基础构建Poseidon函数的电路。

我会做一个非常简单的电路给大家参考。电路的市场需求:构建波塞东龙(Poseidon),输出到2个FieldT,输入1个FieldT。输入public input作为电路。#include ' ethsn arks . HPP ' # include ' gadgets/pose Idon . HPP ' using namespace ethsn arks;namespace test project { using test hash=pose Idon 1282,1;class test _ gadget 3360 public gadgett { public 3360 variable toutput;VariableT input0VariableT input1TestHash tHashTest _ gadget (protoboardt Pb,const STD :3360字串预设): gadgett (Pb,prefix),output (make)input0 ')、input 1(make _ variable(Pb)FMT(Prefix,')。

test hash '){ } void generate _ r1cs _ witness(ethsn Arks 3360360 Fieldt w _ input Pb . val(input 1)=Pb.val(输出)=w _输出;thash . generate _ r1cs _ witness();} void generate _ r1cs _ constraints(){ Pb . set _ input _ sizes(1);thash . generate _ r1cs _ constraints();Pb . add _ r1cs _ constraint(constraint t(output,1,thash.result()),fmt (annotation _) }。}摘要:ethsnarks以libsnark为基础,构建了与zkSNARK相关的以太网智能协议和电路。

Ethsnarks本身也是libsnark很好地应用的自学例子。Libsnark的gadget1库主要以sha256(基于bit的hash函数)为中心构建各种gadgets。

Ethsnarks在名为alt_bn128的椭圆曲线上构建了基于Field的哈希函数(mimc、Pedersen、Poseidon等)。。

本文来源:官网-www.tf2srbija.com