Skip to content

Latest commit

 

History

History
68 lines (34 loc) · 10 KB

《读懂区块链PoS共识》第四章 PoS中的性能与扩容.md

File metadata and controls

68 lines (34 loc) · 10 KB

第四章 PoS中的性能与扩容

性能一直以来都是困扰区块链项目的问题,从BTC到ETH,性能问题在2017年的牛市当中暴露出来,并以极其悲观的速度散播开来,什么一涨网络就卡,什么一个游戏拖垮整个公链,几乎瞬时间,面对BTC和ETH的扩容方案如雨后春笋般不断冒出,那些通过白皮书宣传每秒可以处理百万级交易的项目受到了热捧。

大区块,闪电网络,DPoS,侧链,zk-SNARKs等方案开始走入人们的视野,其速度更迭之快,颇有科技大爆炸的感觉。这些方案大都带着诚意而来,但面对这Vitalik曾提出来的区块链铁三角定律,多多少少有点缺胳膊短腿的感觉。性能,安全和去中心化,这3个指标没有项目能达到三全,两全的项目大都突出自己的强势,而忽略了自己的劣势,市场上的投资者缺少对技术的认知,大都被宣传蒙蔽了双眼,他们的追涨也助推了区块链项目改变性能的浪潮。

从大区块纷争到进入新的共识时代,对待性能扩容,人们起码已经经历了两次性能升级了。1是BTC的大区块扩容,2是共识时代带来的扩容。在我们所接触到,已经实现的扩容方案中,大区块扩容,共识升级和侧链方案也是离我们最近的,也是最容易理解的。

大区块的扩容发生在BTC上,这个扩容引发了,起码是至今区块链史上最大且多次的社区分裂,BTC成功被同一个社区多个人分裂成了不同的项目,BCH,BSV,SBTC,LBTC......高达10多种的社区分裂币,把整个加密货币圈子搞的"乌烟瘴气",削弱了很多人对BTC的共识,也给其他Token带去了希望。

共识的扩容已经脱离BTC的本质,从PoW的共识改变到了PoS的共识,PoS共识带来了合作社形式的共识,让PoW矿工的竞争关系变成了合作,这让整个共识效率得到了非常大的提高。而另外一方面,由于PoW矿机出现了长时间的军备竞赛,大量的算力被导向了单一矿池,去中心化程度堪忧,PoS共识的提出有助于解决中心化的问题,这个提出在2014年,Vitalik提出将以太坊的PoW共识改成PoS共识时达到高潮。

我们简单说,PoS改变性能是基于PoW了。PoW的矿工通过同时计算一个哈希值,谁先计算出来谁就胜利的方式,获得共识,但也使得矿工之间浪费了不必要的能量,特别是时间。PoS的矿工通过选举算法的方式,随机轮流在指定时间确定出块,并达成共识,这种由系统决定的次序会比争夺位置获得机会的性能要优化很多。

所以我们在2014年后,看到越来越多基于PoS共识的公有链项目,提出了高于ETH的性能口号,并且是高出指数级别以上的。当然,共识上的优势并不能让PoS项目满足,况且PoS共识的性能也无法和现实中的Master和Visa相比较。据了解,Visa的交易处理速度能达到4000笔/s,而20182019年开始运行的公链项目,EOS的TPS最高峰有达到3900,平常也只有6070左右,而大量PoS公链也只有100以内的TPS,这样的TPS针对分布式网络来说,已经算是比较高的,但是还是不能满足当今显示的商业需要。

当人们看到了PoS共识能带来的性能有限的情况下,基于PoS扩容的方案也逐渐开始出现,其中侧链和zk-SNARKs是目前比较常见的两种方案。

1.1.侧链

侧链解决扩容是目前业界一起探索的方向,从闪电网络开始,到Plasma,再到Cosmos,Polkadot这种由侧链组成的项目,侧链方案已经开始慢慢从研究走到应用当中。

侧链的解决办法是将非必要的计算放在侧链上计算,只把重要的状态同步到主链。按照Cardano的设计方案,主链由于承担着较为主要的价值传输,要设计的尽可能的简单,只有简单才能达到足够的安全,而不会因为代码太过于复杂审计不出bug,其他对安全不是更高优先级的计算,可以统一放到侧链上来计算,最后将侧链计算的结果同步到主链即可,这样很好的解决性能和安全的冲突问题,把三角问题放在了一个不同空间维度来解读。

另外一个更深化的解决侧链方案是类似Cosmos或者Polkadot的解决方案,Polkadot创建了一个万链互联中心,让各个公链都变成了Polkadot的侧链,这样的Polkadot可以挂超过100条的侧链,这种扩容方案是指数级的,可以更好的承受计算压力。当然,这些所有的Polkadot"侧链"同样可以有自己的侧链系统,比如Loom项目的侧链项目就形成了Cosmos的一个Zone,叫Plasmchain,并挂在了以太坊项目项目。

目前,侧链的方案都在陆续开发当中,碰到的主要困难在于安全问题,像Plasms这样的侧链如果挂在以太坊下面,需要考虑侧链对于主链的安全问题,还有考虑主链的ETH跑到侧链后是否可以追回的问题等等,这些问题都是目前在困扰着侧链项目的,所以还没有看到一条真正跑得很顺的侧链,实际的应用上更是少之又少,比特币的闪电网络算是一个,Omisego的Plasmachain也是一个,但是他们的应用实在太少了。

侧链虽然是一个种很好的解决方案,但是离我们还有点1~2年,甚至更远的时间。

1.1.zk-SNARKs

zk-SNARKs,一种新型的零知识验证(零知识验证就是验证:我能证明我知道问题答案,但却不用告诉你答案),简洁,不需要大量交互验证,不需要双方在线,相对于传统的验证方法,验证快,体积小。

最早运用在Zcash上,于18年10月份升级成2.0版本——Zcash sapling,官方博客放出了两个版本的对比图,验证时间从37s缩减到7s,体积从大于3GB缩减到了40M以内,质变。从此Zcash可以告别只有10%资源用于匿名交易的限制了。

业界对于zk-SNARKs的研究也从来没停止过,但究其从大量的数学验证到工程实现太过于复杂的原因,实际发展的并不太尽如人意。

Tezos在2014年的白皮书里面表示,未来利用zk-SNARKs将匿名交易带入Tezos的意向,Vatilik也早在16年12月Medium上发表了关于zk-SNARKs的系列文章,从数学方式到代码层面做了详细的解释;Eli Ben Sasson,这个为再备受Vatilik推荐的大神,其基于zk-SNARKs的STARK匿名算法,STARKWARE也正在这一方向上前行。

对于zk-SNARKs,匿名和扩容似乎可以并存,因为2.0版本当中,Zcash的博客这么描述,此次的提升:

This rough estimate indicates an 80% reduction of proving time, and a 98% reduction in memory usage which is a key requirement for opening up mobile support for Zcash shielded addresses.

减少80%的验证实践,98%的存储。这个验证过程不确定是否可以用在Tezos的验证阶段,在Tezos的1分钟出块过程中,出块节点是提前选好的,从打包交易到广播全网也很快,花费最多的时间在32个验证签名,如果zk能解决这个验证速度,将对性能有大的改善。

那zk-SNARKs的扩容方案怎么实现不舍弃去中心化的前提下扩容?

zk通过缩减验证体积,加快验证速度来提高性能,这是个数学解决方案。也就是说,通常区块链广播交易,需要所有验证人验证并签名后,才能确定为真(有些链的签名还不是最终确定性,Finality),这其中验证签名的过程耗时过长,导致性能受到影响。

分片通过缩减签名人数,Cosmos通过指定人数的投票通过提前得到确定性,EOS通过减少验证人人数达到全部验证的快速度,这其中都是通过减少人数来达到的,而zk缩减的是验证过程,而不是人数,那么确实是可以保证之前的去中心化的情况下,提高性能的。

zk本身是一个零知识验证,这个验证过程本用于隐私交易,但目前看来本地算法生成验证材料的速度要比网络传播验证要高了去了,这就是zk扩容的本质了。就像现在的edxxxx算法生成公私钥对一样,不联网就生成了,毫秒级别的,如果把大量验证的过程变成zk的本地算法,提交广播验证的数据压缩到非常小的范围,那性能的提高可见会是指数级的。

当然,zk的算法同样中所周知的缺点:在零知识证明协议部署前,需要设置一些初始参数,这些参数将在每一次证明与验证中被用到。参数生成后,参数生成算法运行中使用的所有数据必须销毁,否则整个协议将不安全。

那么这次参数的生成必然会有一个来源,这个来源如果是伪随机数还不能被找到规律,如果是真随机数还得头大,且找到可靠人来执行,两种来源的弊端是明显的,那么这个问题就出现了:我们怎么相信一个这么依赖的公共参数的系统协议呢?

随着协议的发展,我们看到了解决该办法的两种方案

允许人,无人数限制,无门槛的进入到提交参数的过程中,并公然销毁数据(如Zcash 2.0上线前做的The Power of Tau活动,有兴趣的小伙伴可以google一下这个有意思的活动)

Eli Ben-Sasson 也提出了另一个具有竞争力的零知识证明协议 STARKs,该协议可不需要考虑可信设置的问题,并依赖于较少的数学猜想。

目前的发展也在进行当中,这也是为什么我在上面说zk有机会成为既可以保证去中心化的同事,又可以进行扩容的点了。可喜的是,第一个方案已经在Zcash上践行,并且运行快几个月还比较完好,所以,我们还是有理由期待zk在PoS其他项目上的扩容的。

侧链解决的是数据的分层计算,zk这种方案是尽可能减少数据之间的交互,尽可能的较少数据大小,所以两种方法是不同维度的解决方案,自然,zk也可以用到侧链上去,减少侧链交互,提高性能。现在区块链的性能优化在减少底层架构,和上层数据交换上是一个大方向,有很大的优化空间。