现在的区块链成百上千,大家耳熟能详的就有很多。无论是以太坊还是以太坊的杀手们,很多都已经构建了自己庞大的生态系统。为什么这时候Mina要做一条新的区块链?它的优势究竟是什么?如果说只是在枝节上有一些改进,那么是不是值得去启动一条区块链呢?
实际上Mina在技术层面和应用层面都有比较独到的创新,它的技术愿景是打造世界上最”轻”的区块链,这个怎么理解?我们可以一会儿再展开。
在应用层面,Mina想要构建真实世界和密码学世界之间的一个桥梁,而且这个桥梁是能保护隐私的。Mina是如何进行隐私保护的呢?我们可以先从现在区块链面临的一些问题来说起。
我们看到目前一些公链中出现了以下问题:
第一,积重难返。现在的区块链都很”重”,很重的意思是说要去运行一个节点非常困难。我相信听众朋友们很少有人会自己去运行以太坊的节点,大家都是通过一些中间机构去和以太坊网络交互,也就说没有中间商直接去访问区块链非常的昂贵,也很困难。
第二,规模化分布协同。参与这个网络,它的规模化、分散程度也是受限的,因为参与这个网络对资源是有很高要求的,尤其是带宽资源。当吞吐量上升时,运行节点的门槛会提高,去中心化的程度会降低,或者反过来说网络集中化的程度会增加。
第三,隐私和可验证性。所有的事务、交易和数据都是被公开、上链的,用户的隐私并没有得到很好的保存,实际上我们想要的是验证这些数据的准确性,并不需要数据本身。
那这些问题怎么去解决呢?Mina在设计上就是要解决这些问题。
第一,Mina是很轻的区块链,它的大小在KB级别,所以用户去维护这样一个全节点相对来说是比较容易的。因此,每个用户都可以去运行一个节点,这样在访问Mina的时候不需要第三方服务提供商。
第二,Mina共识算法非常特别,共识参与不受限制,Mina共识验证者的数量是没有上限的。实际上现在大多数PoS算法,如果是基于这些委员会选举的共识算法,一般来说只能容纳大概数百名的验证者,因为网络通信的复杂度随着验证者数量的上升会急速上升,节点没有办法承受通信开销。而Mina选用了一个比较成熟的竞争性PoS算法Ouroboros,并且做了一些改进,产生了一个叫做”Ouroboros Samasika”的变体,这是有助于节点的分散。
同时,它还带来一些额外的好处,因为Mina对验证人是没有罚没机制的,所以在运行节点的时候不用担心自己掉线或者是大规模掉线所导致的罚没。
第三,在Mina上部署的应用,叫”Snapps”,Snapps就是零知识证明驱动的应用。这些应用可以在保护用户隐私的情况下使用离线数据,而用户分享的不是数据,不需要把自己的隐私数据提交到区块链上,而是提交关于这些数据的证明,这样区块链只需要去验证这些数据符合一定的要求就可以了。
听了这些会觉得Mina有些独特的地方、有些神奇的地方,它到底是怎么工作的呢?我们从整体上来讨论这个问题。
从设计上,Mina的整个区块链都只有22KB大小,并且永远维持这个大小。也就是说随着时间的增长、随着网络交易的变多,它的大小仍然不会变化。而22KB是很小的,可能就是几条语音消息的大小,所以任何的设备,包括运算能力相对较弱的手机,也可以轻松地去同步验证Mina网络,而且不需要花费很长的时间。
Mina是如何做到这么”轻”的呢?因为Mina使用了一个技术——递归零知识证明,所以,我们不需要从头开始验证整个区块链。以以太坊为例,如果一台新机器要加入以太坊网络,就需要下载以太坊从创世的那天开始产生的所有区块,并执行所有交易,从而才能得到最新状态。在Mina当中,这个全节点并不存储链本身,存储的是这个状态变化的证明,所以存储的数据也变少了。同时,由于递归零知识证明的引入,也不需要从头开始对数据进行验证。
我们可以做个简单的比较,其实比特币区块链的大小大概是在300GB,用一台普通个人电脑需要花大概6个小时进行同步。以太坊的大小在700-800GB,不同客户端间略有差异,同步的时间是以天计的,取决于网络速度。
为什么递归零知识证明可以实现这样的一个功效?这实际上是一个比较深的密码学算法,但我们尝试用一种比喻的方式来帮助大家去理解这个问题。
在大部分区块链当中,全节点需要存储所有的状态数据,那”状态”是什么呢?比如说我有10块钱,或者说我在某某一个应用上有块地,这些就是状态数据。而我要去操作这些数据的时候,所有的节点需要执行这些交易,它必须拥有当前的这些状态数据,也就是说它必须存储了所有的状态。
当一个新区块产生时,所有的节点都需要执行所有数据交换,更新到最新状态。这样一种架构导致了大量重复的计算,并且状态数据会越来越多,因为越来越多的人在使用这个区块链,所以执行会越来越耗费资源。
而使用零知识证明技术实际上是改变这样一种执行的架构,不再让链本身进行计算,而是把状态进行压缩、做一个快照,当新区块产生时,要从状态A变成状态A’,那需要提供的是什么呢?是一个关于这个状态变化的零知识证明,这样每个节点只需要去验证证明的正确性,不需要实际执行,这样计算量就大大降低了,状态也不会发生膨胀。
这样看起来每个区块都需要提供一个证明,区块链大小还是在线性增长,这时候递归零知识证明就起到了作用。那什么叫”递归零知识证明”?简单说,就是我们把证明的过程也封装起来,在下一次证明的时候把上一次证明也封装到这里面来,所以每个证明都可以包括对所有历史的验证,这个听起来会有些晦涩。
比如你想向一个朋友证明你每天都去了一个公园,这个公园有一个日期牌,你要做的是什么呢?可以每天在那个日期牌前面拍张自拍,并且把这个照片发给他,一个星期就要发7张照片给他。但我们有一种方法可以去减少这样的交互,怎么做呢?第一天去拍照,从第二天开始,每一天都把前一天的照片拿在手上,再做一个自拍,在第七天之后,实际上只要把第七天的照片发给朋友,他就能很轻松地验证你每天都去了那个地方,不需要再发7张照片给他,这就是递归证明。当然,这是一个比方,不是零知识的。
如果说要更详细地了解零知识证明,我建议大家可以去读一些更专业的文献。同时,今年3月,Mina基金会和以太坊基金会开展了一个联合资助,去征集能让以太坊的虚拟机高效验证Mina提供的递归零知识证明的方案,如果这个能实现, Mina零知识证明的网络也可以同时为以太坊区块链提供零知识的计算服务。
总结一下,zk-SNARKs其实就是零知识简洁、无交互知识认证,大家也可以认为就是一个零知识证明。在它的帮助下可以实现一些特性:
1、低门槛的可验证性;
2、分散的可扩展性;
3、一种新的应用形式 Snapps。
当然这些工作仍然是在高速的开发当中,为了实现这样的愿景,我们有很多的工作要去做,接下来主要谈一谈在Mina上的应用Snapps。
现在大多数的区块链实际上没有办法和互联网的应用直接交互,这直接限制了应用的适用范围和效用。Mina可以在保护隐私的情况下,和任何网站交互,并且可以把真实世界当中已经验证过的数据传到链上,让链上应用直接去使用。所以,Mina的愿景其实是要打造一个通往真实世界的隐秘的网关,这个”隐秘”的意思就说保护用户隐私。
这个网关实际上就是通过Snapps来实现的,Snapps就是零知识证明驱动的应用,它具有一些很好的特性:
第一,可以从互联网无缝输入区块链,只要网站支持HTTPS协议,就可以从这个网站中把数据导入到Mina的区块链上,同时这个数据是可验证的。
第二,数据本身并没有被暴露,用户仍然保留着对数据的控制,而仅仅去验证和分享关于这个数据的证明。你拿到的并不是这个数据本身,而是一个你不知道是什么的东西,但可以去验证背后的数据具有某些属性。
我们给一些用例:
第一,基于Snapps可以隐秘地去访问一些互联网服务,可以为用户数据生成相应证明,这些证明可以由互联网的应用来验证。同时,也可以把互联网的数据导入到Mina上,而在这个过程中,个人数据是没有被泄露的,不需要去信任任何人,信任的只是算法本身。
第二,借助这样一种技术可以去构建无需许可的互联网预言机,因为任何网站只要提供了真实世界的数据,不需要网站本身的许可,只是用现有的这些互联网协议,就可以把这些数据可信地传输到Mina区块链上。
第三,有点像一个DID协议。可以用Mina来完成对互联网网站的登录服务,不需要创建账户或者交出个人数据。
我们再给一个更加具体一点的用例,这个用例也是在今年3月份的时候,Mina和Teller(DeFi的应用)联合发布的一个示范性的应用。
Mina提供的一些良好特性,可以帮助用户在Teller上通过零知识证明的方式验证自己的信用分,获得所需服务。具体来说,就是用户去登录一个信用分查询服务的网站,并且去查询自己的信用分,同时在自己的本地去生成信用分的证明,并且把这个证明发送上链。
而这个证明本身并没有暴露用户的信用分分数,社保号等隐私信息,仅仅提供他的信用分大于700的证明。只要用户提供了这样一个分数的证明,Teller就可以为这个用户提供所需服务。大家可以去Teller网站上查看这个案例的Demo。
而这仅仅是一个开始,一个小的尝试,在过去的半年时间内,零知识证明得到了高速发展,如果没有密码学技术的迭代,我们不能想象可以在工程上去实现这样的应用。
伴随着这种对未来的期许,对密码学发展的期待,我们认为在不久的将来不需要可信设置的可组合的智能合约将会很快实现,而Mina也会提供很多开发者工具,帮助形成新的应用范式。比如隐私身份的核查、互联网触发的智能合约,我们知道现在智能合约的触发有的是要依赖一些预言机。
再比如说,可以用Mina零知识证明能力服务以太坊,让它们去具有新的功能,而不需要把以太坊上的应用逻辑牵移到新的区块链上(这是很多新的区块链在尝试的事情)。
前面都是一般性的介绍,接下来我想深入介绍关Snapps,谈一谈他的架构。
Snapps和去中心化应用有什么区别?主要有以下几点区别:
1、支持私密数据。即在使用用户数据的时候不需要去分享数据本身,只需要分享数据的证明。
2、有通用的可验证性,可以在计算上实现任意计算。
3、可扩展的执行。在状态变更层面,执行过程不仅可以调用自己的状态,也可以去更改其他应用的状态。
前面提及的Mina在Teller上的应用,只是一个示范性的应用,还没有投入大规模的使用。接下来,Mina会互联网世界进行更多的结合,HTTP Snapps,允许从网站把数据导入到Mina上来。而关于开发者的SDK,实际上还是在构建当中,我们期待在将来的几个月会给开发者提供更好的开发工具,这样可以帮助大家去更简单地在Mina上进行开发。
Mina主网在今年3月已经启动,900个活跃的节点参与了主网的启动,Mina也受到了创世成员和合作伙伴的支持,同时相关性能的指标都是非常好,我们也对未来有信心、也有期待。