关于区块链:PrivacIN-Week4课程回顾-ZK应用实践

7月23日,隐衷学院【PrivacyIN】第一期ZK训练营第四课——《ZK Hands-on》如期开讲。本期课堂由资深隐衷开发工程师Kelvin Wong讲授,次要介绍Circom电路开发和ZK利用实际。

背景

随着零常识证实(ZKP)技术实践和工程利用的提高,ZK-Dapp曾经成为区块链技术的利用热点,但ZKP技术的过高的技术门槛,使得设计和开发一个基于区块链零碎的残缺ZK-Dapp仍然有较高的难度。因而PrivacyIN特地开设实际课程,从实践到实际,帮忙开发者疾速进入ZK利用开发。

次要课程内容

本期课堂Kelvin Wong次要围绕Circom电路设计和零常识证实利用开发进行开展。

ZK利用介绍

Kelvin老师首先介绍了以后ZK利用倒退详情,率领学员理解以后支流的ZK利用和倒退方向,将ZK利用次要分为:L2 ZK-Rollup利用、ZK-VM & ZK-EVM、ZK区块链零碎、风行的ZK开发框架及编译器、其余热门电路及利用等,并进行分类的介绍和特点剖析。

ZK-Rollup次要应用zkSNARKs技术将批量交易线下聚合,再将聚合交易及证实记录到智能合约,借助zkSANRKs其简洁、可验证、零知识性的特点,十分优雅地解决了以太坊等交易解决效率低和手续费低廉的问题。目前ZK-Rollup涌现了十分多热点利用,包含升高转账手续费的STARKNET、zkSync、LOOPRING等,利用类ZigZog、Curve、zkNFT等。

ZK-VM是基于ZKP来保障程序执行状态转换的安全性和可验证性的可信通用虚拟机,个别ZK-VM都提供相似电路描述语言来实现计算利用。

EVM是运行在以太坊上,用来执行智能合约的虚构机器,EVM是基于栈架构的,次要组件包含:Stack、Memory、PC、Storage等,EVM应用Gas进行指令计价和束缚执行。

ZK-EVM是以ZKP形式执行智能合约或EVM指令的虚拟机,个别能够依照兼容性分为合约兼容ZK-EVM、EVM指令级别ZK-EVM、EVM标准规范级别ZK-EVM。ZK-EVM赋予了EVM执行正确性证实和可验证的特点,次要是用来构建兼容以太坊智能合约的ZK-Rollup计划或区块链零碎。

基于ZK的区块链零碎,最驰名的是ZCash,它是第一个基于zkSNARK技术构建的提供匿名交易的电子货币实现。随着ZK实践和技术的倒退,越来越多区块链零碎基于ZK技术进行构建,以提供更好的匿名性和安全性。比方monero门罗币也将应用ZK技术构建,其将应用BulletProof协定来实现匿名交易;Mina应用递归零常识证实技术来构建简洁和轻量的区块链零碎;Filecoin借助递归零常识证实技术来实现数据存储证实;Aleo则基于ZK构建通用、私密、高效公链零碎。

在开放性区块链世界,ZK公链和利用的倒退离不开开源社区,开源社区为ZK技术的倒退提供了松软的根底,以Arkworks、Matters Labs、Polygon等为代表社区或公司提供丰盛的密码学开发根底库、ZK协定实现、编译器等。比拟风行有开发库有:libnark、ZK-Garage/plonk、snarkjs、halo2等;经典的编译器及开发库套件,包含:Circom+Snarkjs、Aleo、ZoKrates、Cairo等。

以电路利用开发的视角来看,有很多热门的利用方向,包含:ZK-ML机器学习、ZK-DID、ZK-NFT、ZK-DAO外包计算等。依照电路用处分类,能够分为:通用性电路库(Circomlib)、专用性电路库(Semphore成员关系证实)、zkEVM-Circuits(EVM构建根底电路)等。

ZK利用开发工作流

一个残缺的ZK利用开发是一个残缺的软件工程用例构建,本次课堂不依照残缺的软件工程工作流来展现利用开发过程,而是将电路逻辑来示意业务逻辑,围绕构建电路电路实现可验证计算的能力。zkSNARKs协定因为其简洁、非交互、高效性的特点,ZK支流利用基本上都应用zkSNARKs构建,课堂中将次要介绍基于zkSNARKs(次要为Plonk、Groth16协定)的利用开发。

zkSNARs利用开发的次要步骤,次要包含:

1.电路构建&编译

次要将计算业务应用电路语言形容,而后编译器翻译为R1CS或Plonkish等格调束缚

2.Setup

公共参数、电路参数生成,包含创立prover/verifier各自的keys

3.创立证实proof

证实者(prover)应用本人公有输出witness和Setup失去keys,构建对于电路的证实。

4.验证电路proof

验证者(verifier)应用prover生成的proof,验证“prover应用witness作为输出并正确执行了电路”。

目前比拟风行的集成开发套件有Aleo、ZoKrates、Circom+Snarkjs等,基本上采取相似的工作流程,本次课堂则选取“Circom & Snarkjs”进行具体的电路利用开发介绍。

Circom & Snarkjs工作流程

Circom & Snarkjs次要的长处在于有比拟丰盛的电路开发模板库,Snarkjs性能十分弱小,反对Web和验证合约生成,对支流协定Groth16和Plonk反对比拟齐备。

Circom & Snarkjs的工作流程如下:

1.算数电路设计(Circom语言)

将计算业务转化为对立的算术表达式,而后将算术表达式用Circom语言形容实现。

2.编译电路

将Circom语言示意的电路翻译成低级别的R1CS模式电路(能够生产wasm以及调试信息),其实用circom编译器。

参考命令:circom circuit.circom –r1cs –wasm –sym

3.Snarkjs生成witness文件

参考命令:snarkjs calculatewitness –wasm circuit.wasm –input input.json –witness witness.json

4.可信设置 & 证实生成

可信设置应用MPC接力典礼生成,包含:universal-trusted-setup和电路相干的trusted-setup。

universal-trusted-setup次要为生成通用参数,实用于所有电路,次要命令参考:snarkjs powersoftau new/contribute (典礼参数初始化/接力)

电路相干的trusted-setup,生成实用于指定电路的ZKP计算参数,次要命令参考

snarkjs groth16/plonk setup (创立proving key和verification key)

snarkjs zkey powersoftau new/contribute (指定电路参数初始化/生成接力)

证实(proof)生成基于可信设置生成的通用参数、指定电路参数以及witness,生成指定电路的计算的证实proof,其次要命令参考:snarkjs plonk/groth16 prove

5.验证证实 & 验证智能合约生成

应用电路和witness生成的proof能够用来进行正确性验证(validate),也能够生成实用于以太坊的验证智能合约(generate verifier)。

参考命令:snarkjs validate/generateverifier (验证/生成验证合约)

Circom电路设计

Circom是一个示意R1CS电路束缚的DSL语言,同时也是一个针对该语言的编译器,它是一个强类型检测和动态剖析语言,目前次要反对算术电路。Circom通过定义显式电路束缚实现电路逻辑,用户设计电路则相似于编写电路信号(线)的赋值和定义束缚,而后Circom编译器将这些编写的电路翻译成R1CS束缚(也包含WASM、C++等相干语言),提供给snarkjs应用,并借助snarkjs实现残缺的ZKP计算流程。

Circom的语法比较简单,次要为反对无限域(finite-field)的电路运算,提供了template(有点相似C++)来定义子电路模块component,提供了function用来定义非电路函数代码块等。

一个残缺的Circom电路包含:预编译指令、电路模板实现、main定义,如下定义了一个简略的乘法电路(注:参考官网文档):

预编译,次要指定编译器兼容版本;电路模板实现,次要实现电路逻辑,包含定义输入输出信号(signal),两头信号,构建束缚等;main定义,定义入口main组件,其应用电路模板构建的实例。

Circom示意的算术电路定义包含:公有输出、共有输出、共有输入、电路门和线束缚,这些元素工作在无限域Fp上,通过构建R1CS的格局的束缚实现电路。

Circom的Signal

signal相似电路的wire(或变量),次要分为input(输出)signal、output(输入)signal、默认signal(两头变量),这些signal工作在无限域Fp上 (mod p)。

signal默认为private,能够在main{}中设置input signal为public,output signal总是为public,不能设置为private,默认定义的signal为private。

Circom的表达式

Circom反对常量表达式(只有常量操作或赋值)、线性表达式(只有常量和信号的乘法和加法)、二元表达式,其中常量表达式、线性表达式是二元表达式的非凡模式。二元表达式模式相似于”AB-C”其中A、B、C为线性表达式,比方非法的二元表达式:2x + 3y + 2) (x+y) + 6*x + y – 2。

Circom的Template

Template用来创立通用电路的模板,其余电路Template或main能够通过创立模板实例来应用电路,提供相似模块化的能力,即一个大电路能够由很多个小的电路实例集成构建失去。目前Circom社区提供了很多优质的电路模板,比方circomlib、Semphore等,能够基于这些电路模板构建简单的电路。

Circom的Constraint

Circom应用constraint定义R1CS电路束缚,constraint操作符个别配合二元表达式应用,次要的constraint操作符有:等于束缚(===),赋值等于(==>或<==),signal赋值(–>或<–)。Cricom个别举荐应用赋值等于(==>或<==)进行赋值和束缚同时定义,灵便的场景下则将两者离开,比方:除法操作转化为赋值和乘法束缚, A/B=C则应用“C<– A/B; C*B===A”示意。

Circom范例学习

课程中以实现简略多项式零常识证实为例,给定一个单变量多项式poly3(x)=1 + 2x + 3x^2 + 4x^3,演示如何进行设计Circom电路实现poly3多项式。

poly3多项式不是二元表达式(最高次数为3),将问题进行拆解,定义平方x^2电路模板、x^3电路模板剖析多项式,而后进行线性组合即实现了poly3多项式。

实现步骤:

1.创立电路文件,增加预处理定义,指定编译器版本;

2.定义平方电路、立方电路模板;平方电路实现,其为一个乘法电路,输出信号相乘,只需增加复制等于束缚。

立方电路实现,应用平方电路实例,再乘以输出信号即可,即x^3=x*(x^2)。

3.定义poly3电路实现模板,其通过创立平方电路和立方电路实例,线性组合实现;

4.定义main,即创立poly3电路实例。

将poly3多项式实现的电路保留为polynominal.circom文件,执行编译命令: circom polynominal.circom –inspect –wasm –c,将输入变量和束缚信息;应用snarkjs命令行工具也可能查看编译输入的R1CS信息,如执行命令:snarkjs r1cs info polynominal.r1cs,将能够查看电路线数目、束缚个数、公有输出变量、公共输出变量、公共输入变量等信息。

残缺ZK- Dapp范例流程演示

给定一个多变量函数,蕴含3个变量x、y、z,其中x为0或1,定义如下:

如何实现一个残缺的零常识证实可验证智能合约?

筹备:

● 装置Circom和Snarkjs

● 下载或生成通用的ZK参数

能够从Polygen-Hermez下载曾经实现的MPC典礼生成参数。

能够应用Snarkjs进行MPC接力典礼生产ZK参数,如命令:snarkjs contribute等。

开发实现:

1.实现电路

1.1. 将函数转化对立的算术表达式,if分支语句合并

为了简化计算,限度x为0或1,不便分支语句的合并。

1.2.电路拍平flatten,引入新的变量(信号signal),并应用R1CS示意

1.3. R1CS示意的电路转化为circom语言(间接翻译),保留为f.circom文件

2.编译电路编译输入r1cs二进制,snarkjs命令查看电路信息

3.Setup和创立证实&验证keys

4.创立witness和proof

5.生成验证合约verifier和调用数据

6.部署到remix并调用例如,能够将上一步骤生成的verifier合约部署到remix以太坊模仿环境,应用上一步骤的calldata作为输出,调用call接口:

如果输入true则示意计算proof验证胜利。

能够看到基于Circom和Snarkjs可能实现一个残缺的ZK利用,该开发套件灵便、可编程,提供多协定反对、丰盛的根底电路、多语言的反对如C++、JavaScript、Solidity等,尤其Solidity验证合约的生成能力,则进一步减少了Web3-ZK利用开发的友好度。

自在探讨环节,Kelvin老师急躁地为学员解答了一系列电路设计技巧和开发相干的问题。

对于PrivacyIN

PrivacyIN 隐衷学院 (Privacy Institution) 由LatticeX基金会发动,致力于建设凋谢的明码和隐衷技术布道和钻研社区。联结寰球顶尖的学者、隐衷技术开发者推动ZK(零常识证实)、MPC(平安多方计算)、FHE(全同态明码)的翻新和落地。

对于LatticeX基金会

LatticeX基金会(LatticeX Foundation)是一家寰球范畴的开源技术社区,以通过构建简单计算偿还用户数据主权,爱护数据隐衷,实现数据价值替换为愿景,旨在构建一个齐全去中心化的计算互操作网络,在爱护数据主权和隐衷的前提下促成数据使用权的交易,并为实现LatticeX愿景赞助各类学术研究及科研项目。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据