自从Defi热潮席卷以太坊,导致以太坊拥堵,Gas费用创历史新高。我们一直以来关心的以太坊扩容的现实问题:在以太坊2.0尚未推出,更为贴合实际的Layer2 方案有望解决以太坊的扩容问题。
这次,分布式课堂邀请了Celer团队的Michael着重讲述「链下」技术,它们包括状态通道、Plasma、Roll Up等。
(Michael毕业于麻省理工学院(MIT),获得计算机硕士学位。Michael目前在Celer负责对于区块链技术,特别是各种二层扩容技术的研究,他参与了通用状态通道、状态守卫者侧链 (SGN)以及Hybrid Rollup等的核心设计和开发工作。)
优点:延迟低,实时性高
缺点:用户人数有限,资金利用率低
用途:小额支付/预测市场/赌球赛马
一般情况下是双方会在链下建立一个状态通道,通过交换私钥进行签名以后的信息,并在链下进行交易。当时比特币实现了名为闪电网络的支付通道网络,把这个状态通道互相连接起来:即使用户没有直接状态通道,也可以通过几个中间节点把它一一层一层地转发过去,相当于channel network。
基本上,状态通道的延迟能做到互联网的延迟。比如说服务器之间的延迟是多少,这个状态通道的延迟就是多少。市面上通过其他链发送交易的速度是秒级的。但是状态通道的话,一般都是毫秒级的。另外,它还有一个优点就是实时性非常高。
状态通道是一种scale up(扩容)的手段。scale up的意思是用技术手段线性地将区块链扩容,比如说像分片。比如说以太坊2.0要启动64个分片,然后它的容量就增加了64倍。而对于状态通道来说,他现在能支持1000个用户同时在线,未来可能最多支持到64000个用户,这个数字还是很低的。
尽管状态通道的scale up是说你节点数量越多,你的网络越大,你的容量越大。这只是一个很美好的设想,实际上它受到了一个很大的限制——low liquidity utilization(低资金利用率)。状态通道是要这个双方都把这个钱存到链上的通道,之后再互相进行发送支付。第一步,就是要把钱存到链上去,这个钱是有限的。就是你比如说手上你有1000个以太,状态通道只能发送1000个以太。如果你突然发送一笔2000以上的以太,它就无能为力了。
因为容量可以扩容,然而资金流动性却没有办法扩容。如果一个用户给另一个用户发送一大笔钱,那中间每一个转发的节点都要有这么大的容量,在现实生活中是不太可能的。等大家把这么多钱都锁到一个状态通道里边,如果只能用状态通道转发的话,这个效率是非常低下。
状态通道只能支持小额支付。像闪电网络其实并不大,可能和资金利用率低是有关系的。另外,把一般的dAPP搬到状态通道是相当难的。我们曾经尝试把五子棋搬到状态通道上。尽管我们写了sdk,让别的项目的开发去用,他们还是觉得这个开发是相当难的。
另外,状态机只适用于这个固定的人数。就是你要把uniswap放在状态机上是不现实的。因为在这个dAPP 的用户是无限量的,没有一个固定的用户集。即使你把棋类游戏或是稍大的PC游戏搬到状态通道上,这些游戏也必须写成状态机的形式。他们每一个状态的转移,要非常清楚地写出来。
理论上,你可以把任意单机游戏都搬到状态通道上。但现实中没有人会去这样做,除非你是非常不信任游戏服务器。一般来说,预测市场以及赌球赛马(大家对及时变化很快的场景做预测),是可以搬到状态通道上的。
优点:代码和数据独立
不增加主链的负担
缺点:安全性弱
侧链的本质就是在这个基础层上再搭一个链,然后用完全另外一套验证人。它的整个安全性是分开的:主链有主链的安全性,侧链有侧链的安全性。
主链从POW转到POS会有更强的安全性,但侧链的验证人偏少,安全性也较弱:比如说Cosmos才只有100个验证人。
侧链的TPS取决于它的验证人。验证的人数越多,它的TPS会越低。侧链的延迟是相对低的,比状态通道的毫秒级高一些,比主链的十几秒几十秒延迟低很多。
状态通道的安全性就是双方互相签过名,就具备主链的安全性。只要一方做恶,另外一方都可以提交到主链,把它这个争议解决掉。而侧链的话就是你要信任多数的验证人是好人,所以它的安全性要比主链低很多。
Plasma:缺点是无法应用到智能合约上
用户跑节点的负担重
Roll Up:优点是数据在链上,
可以随时验证(也是和Plasma唯一的区别)
链下支付可以用任何代币支付
而链上支付只能用ETH
Roll up是19年慢慢火起来的一个概念。和Roll up类似的Plasma,是以太坊上也是V神认为大有希望的一个解决方案。Plasma的问题是它只能够把支付做好,对于稍微复杂的智能合约却无能为力。作恶的一方是不会把数据给你提交上链,以至于这种争议至少要等两个星期才能解决。这个过程是对于用户来说难以接受的。另外,由于Plasma的数据都在链下,用户跑plasma的节点负担是很重的:你跑的时间长了,就会消耗几十个G或者几百个G,是手机无法承受的。
19年有人提出了Roll Up,在我看来是一个中间道路。Roll Up就是链下的计算+链上的数据+Fraud proof。然后它最关键的一个点就是不是所有数据都在链上,它的链上数据仅仅限于它每一笔交易的输入,但不包括它的最终状态。比如说,你从a 走到b ,我只是把路径告诉你了;但是你具体在a 做了什么事,在b 做了什么事,这种状态是记录在链下的。
任何人任何用户都可以去看Roll Up 的区块,也就是打包后的交易,然后把它这个状态的转移重新更换。如果状态转移是错的,用户就可以在链上提交Fraud proof,并将验证人淘汰掉。因为验证人在链上是有质押的,如果他作恶的话,他的质押会被没收掉。且虽然不是每一笔Roll up都会进行验证,但是验证人会一直跑,一旦发现有Fraud(比如说A给B发了1块钱,但记录的是A给B发了3块钱),就可以拿到相应奖励。这个过程可以理解为任何人都可以进行抽查以及督察。
他的好处是数据都在链上,可以任凭用户随时去验证,不会出现像plasma那样的数据可用性问题。且验证的结果具有唯一性,验证人链下把这个智能合约跑一遍,就会发现验证链下的计算是否按照链上的智能合约。从经济学角度来说,一般的验证人不太会去做恶,因为他的质押额太大了。
Roll Up和Plasma其实非常类似。只是Roll up把数据放到链上去,Fraud Proof的过程会非常简单。Roll up的TPS会在主链的几百倍左右,一般是在几百上千的级别;根据不同业务,如果应用简单一些的话,应该可以做到几千级别。而plasma的TPS最高能到上万。
Optimistic Roll UP:
可以支持通用的智能合约
缺点:需一到两周时间去跑证明
ZK Roll UP:可以支持支付以及DEX
缺点:耗内存和CPU/无法支持智能合约
离落地还有时间
Optimistic Roll UP从技术来说要比ZK Roll Up简单很多。它的好处是可以支持通用的智能合约。ZK和Optimistic的区别是,Fraud Proof变成了Validity Proof。这两种验证方式相当于两种不同的思维方式:Optimistic Roll UP是乐观思维,就是说相信验证人是不会做恶的;ZK是悲观思维,相信验证人还是会作恶的,所以要生成一个零知识证明,然后和Roll Up一起打包到链上去。大家去验证不需要跑状态转移,因为这个转移已经通过零知识证明跑过一遍了。
这就类似法律上的举证证明,是自证清白还是别人证明你是好人。ZK Roll Up相当于自证清白。其实,Optimistic和ZK 都牵涉到一个最终性的问题。Optimistic Roll UP 的最终性是比较长的,用户没有跑过这个证明,提现期需要一到两周。这期间系统会给足够多的窗口,让足够多的人去验证这个事情。ZK不会碰到这个问题,因为一旦它的零知识证明上链,它的最终性也就确认了。
那么ZK Roll Up的问题是什么呢?它对于这个节点要求是非常非常高的。ZK Roll Up就是耗CPU和内存,并需要很强的服务器去做这个打包。而Optimistic Roll UP对于打包者的要求并不那么高。唯一要求的就是验证人在链上质押来保证不会作恶。
由于这个ZK的复杂性,导致它目前只能用于一些特定的应用:比如说像那个支付和DEX。另外ZK 还包含了零知识电路,它是密码学中非常新的概念,目前存在安全隐患的可能。
避免了中心化的问题,引入了侧链做打包人
Hybrid Roll Up是结合了侧链和Roll Up。我们发现了一个问题打包者可能很中心化,比如说路印。而ZK Roll因为对打包者要求很高,它的中心化问题更加严重。这会引发一个问题:假设路印的服务器到期以后,机器就会发生宕机,交易所会进入提现模式,相当于变相被解散。为了预防这种风险,我们牺牲了一些TPS,引入了侧链的验证人。
Hybrid Roll Up的好处:第一,不会出现打包人只有一个以及单点故障这个情况,因为这需要一个侧链共同去打包。第二,作恶的可能性更小了,因为需要所有节点共同加强才能去作恶。且安全性是双重的:侧链以及Roll Up的双重安全性会防止有人作恶。