2019年11月26日,同济创业谷与 PPIO CodeTalks 联合举办了《创新X - 区块链与创新创业》区块链技术分享会。在本次分享会中,咱们有幸邀请到了四位重量级嘉宾来作主题分享。算法
在本期文章中,咱们先向你们介绍由路印协议CTO,UVA基金合伙人 ,郭雄辉老师的主题分享——《零知识证实在区块链上的应用》(原文稿有修改)框架
嘉宾简介: 函数
郭雄辉老师15岁时考入中国科学技术大学少年班,2005年,他取得中科大计算机软件与技术博士学位,并在Intel开始了他的职业生涯,担任高级软件研发工程师。性能
在接下来的几年里,他一直致力于安卓 ROM 的开发和定制工做,而且成为真正的安卓专家。2015年,在他第一家创业公司——帛茂信息科技有限公司被收购以后,郭雄辉加入了在纽交所上市的猎豹移动,并担任高级研发总监。在猎豹移动内部,他还推进了 contento 项目的立项工做。目前是路印协议CTO,UVA基金合伙人。学习
如下是郭老师的分享实录:区块链
“ 其实区块链的一个最重要的应用方向就是数据上链,保证数据公开透明,不可篡改。可是还有一个问题也要解决,就是数据上完链以后,其实有些隐私数据是不能公开的,至少是不能对全部人公开。好比你上市公司的不少的机密的合同,这种必须是私密的,可是同时也要上链,这怎么办?spa
如何作到链上数据的隐私保护,就须要用到我接下来介绍的这门技术—零知识证实。设计
我想大概问一下在座的同窗,有多少人听过这个零知识证实,能够稍微举一下手。当我在朋友圈里面说我要作一次零知识证实的分享后,居然有人跑过来问我说零知识是否是就是零基础也能听?我就说这是偏技术的,零知识不是零基础,零知识证实其实仍是要会涉及不少大量的咱们在大学时代学过的数学的基础,实话实说,你们要有必定的经验才能作这件事情。
今天晚上我大概会介绍2块,第1块是零知识证实技术的一个简单的概要,我尽可能让你们能听懂明白,不涉及这种公式的推导。而后第2个是我总结了目前在区块链里,零知识证实技术在区块链中行业的应用方向。3d
1 零知识证实技术概要blog
咱们先来看第1块,零知识证实技术的概要。这张图你们一看应该能明白,为何说零知识证实是零知识?
好比说我想证实,我知道一个函数的 input 的是X,那么这个函数的 output 就等于 Y,可是我不能告诉你X是多少,这叫零知识。可是,我同时又要让你相信,我知道这样的一个 X 能算出 Y,这就叫零知识证实。
因此说这就是一个简单的函数变换,这个函数你们可能没什么感受,咱们来举两个具体的例子。
零知识证实系统他会有几个特性:第一个我给出一个证实,那么“真的证实是假不了”,我这个证实必定是任何人均可以验证它必定为真;另一个是“假的真不了”,就是我给出一个假的证实,必定是过不了那套证实系统,你们必定能够知道他是假的;第三个特征就是证实过程不泄露任何知识,就是前面举过的不泄露X值。
1.1 阿里巴巴与四十大盗
咱们来看两个具体的例子,第1个就是举一个阿里巴巴和40大盗的问题。
阿里巴巴知道如何经过某个门的密码,可是他又不能告诉大盗,同时又让大盗们相信他有这个密码,他能过这个门,这怎么办呢?
阿里巴巴知道一个密码能过这个门,可是阿里巴巴不能告诉大盗密码。很简单,咱们转换一个思路,这个山洞是一个环形,大盗只要让阿里巴巴随机地从左边或右边进入山洞,若是阿里巴巴能从另一边再出现,大盗就能够肯定阿里巴巴知道密码,而且阿里巴巴向大盗证实的过程当中并无泄露密码。这个就是一个很典型的零知识证实对吧?阿里巴巴没给出任何的密码,可是大盗知道阿里巴巴有这个密码。
1.2 寻找沃尔多
第2个,是小朋友很爱读的一本书,叫寻找沃尔多。
这个例子其实就是从一张很大的图中将沃尔多这我的物找出来,在这张图上,我不能告诉你这我的物的具体位置在哪,可是我要让你相信我能找出这个位置,那么如何应用零知识证实来解决这个问题?
你们想想,我不能告诉你这我的的位置在哪,可是我要让你相信,我知道这我的的位置在哪?这不就又是一种另外的零知识证实。OK这个问题怎么来作?其实很简单的办法,用一块黑布,而后黑布上,抠出这我的的形状,而后我用黑布把原始的画面再给盖起来,只让你看到那我的,那不就好了。我能找出人在哪,而后你又不知道在哪,你又不知道真实的地方在哪,这就是零知识证实。我知道一个秘密,可是我不会告诉你,可是你能知道我知道它的魅力所在。
1.3 零知识证实框架结构
经过前面两个具体的例子,其实你会发现,咱们都要先把问题作一个简单的变换,我必定要从原始的问题抽象出另一个问题,而后在另外的问题上给出证实,你就能相信我在原问题上也能知道答案,这就是它的核心思想。抽象成这张图,你们看这张图,
整体来讲,一个零知识证实的框架会分为四大块,就4个步骤:
第1个,你们要把问题抽象出来,一般抽象问题咱们会表达成一个算数电路,或者理解成一段程序,一段运算,咱们叫生成电路。有了这个电路表达以后,咱们再构造一个约束系统,这套约束系统其实如今有好几个,最经常使用的是R1CS约束系统,有了这套约束系统以后,咱们就把这个问题转化成多项式可知足的一个问题,叫QAP问题。
后面我都会跳过这些细节的介绍,我对其中的流程作一个大概的介绍。我先把一个具体的计算问题转化成多项式是能知足的一个问题。最后再在这个多项式知足的问题上再去构造这种零知识证实的算法,而后生成一个证实,在多项式知足问题上构造零知识证实算法能够有多种技术实现,如今只介绍其中一个实现叫zk-snark。
1.4 计算到证实
假设我是要去算这个函数X^3+X+5,把其表达成加和乘的电路很简单,就是先X平方再乘X就表达了一个X三次方,而后再加一个X再加5。这样一个电路就表达了这个方程式。
有了这个电路以后,我要用一种约束系统来表达电路,
由电路表达以后生成一个约束系统,约束系统以后再到一个QAP的问题的归结,而后QAP 问题获得以后,再用零知识证实的各类算法、各类体系去给出生成最终的证实。
这就是整个零知识证实的一套框架系统。
2.路印协议3.0
目前咱们正在开发的路印协议的3.0版本是尝试将零知识证实落地的应用场景之一。
其实路印协议是17年发起的一个项目,先后作了两版分别是1.0与2.0,当时发现交易速度实在太慢了,在以太坊上每秒最多2~3笔的交易,这样的性能是很难被实际使用的。
如何去解决这个问题,去年开始咱们就在考虑是否是能把零知识证实技术用到咱们协议当中。
我只要利用零知识证实来证实咱们如实撮合交易了,路印3.0核心的设计思想就在这张图上体现了。
咱们把这个技术叫ZKrollup。
你们看图中的每一个节点,表示一个account就是我一个帐号有多少钱,我有一批帐号,而后全部的帐号构成一个默克尔树,用root就能表明当前全部的帐号世界状态,我只要有一个根的root哈希,我就能表明着全部的帐号状态,我只须要证实每一步状态的更改都是在更改这个默克尔树,好比说我交易A跟B:
我只要能证实 A 减 B 加一样的余额,你就能相信,个人确是如实的作了一笔撮合交易。
因此说你看其实咱们这里面就会涉及一个智能合约,智能合约会存储每个世界状态的root哈希,而后同时咱们有个中继模块,会去收集每一个人发出的每笔交易,咱们叫tx。收集到以后,咱们就能对这一批交易构造零知识证实。其实咱们要证实的事情就是这个世界状态的转换,就是由前面链上已确认过的一个状态,通过这么多笔交易以后,会到达另一个世界状态。我只要如实的证实这件事情,你就知道全部的的动做都是可验证的。
为何以前的TPS很慢,是由于你全部的动做都要在链上发生。
基于ZKRollup这样的一个设计之上,咱们作了一些改进:第1个改进是咱们把默克尔树给分层了,在咱们的体系上分为三层。好比说若是是一个充值交易,我只须要改balance层就好了。若是我是一笔交易类型的,我就得先改 trade 层,而后再改balance,再改 account,再改默克尔 root。这样的分层操做,能极大的减小电路的生成 size。
第2个咱们的改动点是在哪?一般的默克尔树都是二叉树,只有两个左右节点,而后算一个哈希值,咱们的作法是改为四叉树,而后同时采用 Poseidon 哈希,这样你会发现生成证实的时间极大的下降了。
而后整个这样的一套 solution 完成以后,咱们就能从原来的两笔交易每秒提升到目前的1400笔。这就是零知识证实能应用的一个方向,咱们把它叫扩容。
我大概就讲这么多,若是你们对路印协议感兴趣,咱们都是 open source 的,你们均可以去学习,由于区块链必然是拥抱开源精神。而后也欢迎你们跟我联系。
3. 问答环节
同窗问:
“若是说有4个 account,其中 account1 与 account2 发生交易,同时 account2 也与 account3 发生交易,那么就做出了两次状态改变,咱们怎么去证实这两笔交易是被正确执行的?”
郭老师答:
“谢谢。你问的这个问题挺好的一个问题。其实这就涉及一个点,你提到的交易咱们叫Tx。每一笔交易实际上是有顺序的,好比说咱们已经假定这样的一个顺序,你的整个的世界状态的转变就已经决定了,你递交到链上数据的前后顺序,就决定了你的交易的顺序。明白这件事情吗?由于全部的这种Tx的数据都到要链上,你把数据放到链上面的过程就已经作了个排序。”
想了解更多有关 PPIO 的信息,能够移步官网:pp.io