干货 | 深入理解以太坊各个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会越低。侧链的延迟是相对低的,比状态通道的毫秒级高一些,比主链的十几秒几十秒延迟低很多。
状态通道的安全性就是双方互相签过名,就具备主链的安全性。只要一方做恶,另外一方都可以提交到主链,把它这个争议解决掉。而侧链的话就是你要信任多数的验证人是好人,所以它的安全性要比主链低很多。
Roll up/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
可以支持通用的智能合约
缺点:需一到两周时间去跑证明
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
Hybrid Roll Up是结合了侧链和Roll Up。我们发现了一个问题打包者可能很中心化,比如说路印。而ZK Roll因为对打包者要求很高,它的中心化问题更加严重。这会引发一个问题:假设路印的服务器到期以后,机器就会发生宕机,交易所会进入提现模式,相当于变相被解散。为了预防这种风险,我们牺牲了一些TPS,引入了侧链的验证人。
Hybrid Roll Up的好处:第一,不会出现打包人只有一个以及单点故障这个情况,因为这需要一个侧链共同去打包。第二,作恶的可能性更小了,因为需要所有节点共同加强才能去作恶。且安全性是双重的:侧链以及Roll Up的双重安全性会防止有人作恶。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum