今天主要是从一个自上而下结合时间发展的视角整理了以太坊扩容方案,内容涵盖了一些市场如今已经不再提及的旧方案,有些可能大家听都没听说过。但我认为把大框架和相互逻辑理清楚是非常重要的,这有助于我们理解扩容的发展经历了哪些创新和组合,遇到了哪些问题,不同时期市场的关注点是什么,以及为何目前Rollup方案胜出。这些也都有助于我们看清大方向。
个人在做research的时候,发现网上基本没太多文章从这个角度来全面的汇总和对比。我最初纯粹是因为完全不了解扩容,感觉方案很多,各有利弊,有些还很相似,也想不明白为什么,所以花了大量的时间挖不同时期的文章。但这两周下来,我意识到结合了时间角度的整理对我的帮助特别大。不过今天信息量应该会很大,因为不可避免地会涉及很多的技术和概念,如果能耐心读完,相信对构建整个扩容赛道的大框架和逻辑梳理很有帮助。
一、起因
在第一层以太坊区块链上,不断增长的网络使用需求,导致了网络拥堵,推高了交易成本。提高存储、网络速度和吞吐量是有意义地大规模采用以太坊的基础。
因此,需要进行扩容。
二、目的
扩容的核心目的便是在保持去中心化和安全性的前提下,提升交易速度和交易吞吐量。
三、扩容方案
扩容方案:可以分为两大类——On-Chain和Off-Chain
On-chain,链上扩容
对区块链本身的性能提升,这需要对第一层主网/以太坊协议进行变更:这就涉及到了“Layer1”。Layer1网络是底层区块链的别称。那除了以太坊(ETH),比特币(BTC)、Solana、Polkadot、Near、Cosmos、Aptos、Sui等都属于layer1协议,因为它们是所在生态系统中的主要网络。Layer1协议能够在自身的区块链上处理并完成交易,同时自带用于支付交易费用的原生通证。
On-ChainLayer1扩容的可选方案包括:
a.更改共识机制。以太坊升级就采用了这一方案。几周其前的beacon信标链和主网成功合并就是完成了共识机制从pow到pos的转换。
b.实施分片sharding。分片是一种常见的Layer1扩展解决方案,主要是用于增加交易的吞吐量。这是计算机学中的一种数据库分割技术,网络连同上面的节点一起被分割成不同的分片,来平摊工作量并提升交易速度。每个分片处理整个网络的一部分活动,即每个分片都有自己负责的交易、自己的节点和独立的区块。
分片还可以减轻每位验证者的负担。每个节点会将完成的工作写入主链,实时共享本地数据。这是之前eth2.0原升级计划涉及到的的扩容方案,现已被danksharding所取代。
c.扩大区块规模。使每个区块能够处理更多交易。
Layer1扩容需要大费周折。很多情况下,不是所有网络用户都会同意这样的变更。从而可能会导致社区分裂,甚至发生硬分叉。
Off-chain,链下扩容
所有的链下扩容都是与第一层主网分开实施,无需更改现有以太坊协议。Rollup大致上可以分为两大类:Ⅰ.侧链;Ⅱ.layer2二层解决方案。
Ⅰ.侧链
侧链是独立运行的区块链,其安全性全靠自身协议机制。这也是侧链和目前主流链下扩容方案layer2二层扩容最大的区别。
而侧链作为一条独立的链和一些layer1公链相比,区别在于侧链专门用于处理以太坊的过剩容量,而不是与整个以太坊竞争。这些生态系统与以太坊社区紧密结合,以互补的方式托管以太坊应用。
关于这部分分类,我发现网上很多文章都比较混乱,会把侧链归类在layer2中。这部分我主要是参考了以太坊基金会和侧链白皮书对侧链的定义。
https://ethereum.org/en/developers/docs/scaling/sidechains/
第二类链下扩容是刚才提到的也是大家常听说的layer2二层解决方案:基本想法是链下计算/执行,结果上链;离线批量处理。直接从第一层以太坊共识中获得安全性。那不同的layer2方案会在安全性、扩容效率、去中心化程度、通用性之间寻找平衡。
先来说说侧链:
侧链SideChains是一个独立的区块链,与以太坊主网并行且独立地运行。
它们通常是为高效处理交易而设计的。与第二层扩容方案最大的不同在于侧链不会将状态更改和交易数据发布回以太坊主网,这也是为什么它们并不继承以太坊的安全属性。
侧链通常是选择牺牲了一些去中心化或安全性来实现高吞吐量。
侧链主要是通过双向锚定的跨链桥来实现与主网的链接、以及互相操作。而这里所谓的双向锚定式主要是指支持资产的双向锚定,即资产在主链与侧链之间的互转。不过这里需要注意一下,实际上资产并非实现真正意义上的转移,只是通过”一条链锁定,另一条链铸造相同面额资产“的方式来进行”跨链“。但凡是架设双向锚定跨链桥的项目都可以被视为侧链。
我们先来了解一下什么是双向锚定的跨链桥:
这个概念是BlockStream在2014年发表的侧链白皮书中提出的。双向锚定是指把主链上某笔资产比如10eth锁定到一个特定地址;同时,在侧链上提供这笔“锁定交易”发生的证据,等量的数字资产以wrappedtoken的形式就会在侧链上被铸造比如侧链上mint出了10weth,现在这10weth便可以在侧链上进行交易了。反之亦然,用户想在主链取出eth时,在侧链上销毁同面额的剩余的wrappedeth就可以。
在主链锁定token,在侧链铸造token。在侧链销毁/燃烧token,在主链提取token。
https://medium.com/techskill-brew/layer-2-blockchain-scaling-solutions-channels-sidechains-rollups-and-plasma-part-16-79819e058ef6
侧链的工作环境和主链相同,同样基于EVM。但侧链有自己的账本系统、共识算法脚本合约等。但为了实现各种不同的目标,它们获得安全性的方式也有所不同。
这里举几个例子:
单一托管模式Centralized(basicthirdpartyauthority):这是现阶段最简单的在区块链之间转移数字资产的方式——将主链上的资产发送到一个单一托管方(比如交易平台),托管方收到这笔资产后,在侧链上激活等额资产,这笔资产就能在侧链上流通了。这种方式最大的缺点是过于中心化。
联盟模式Federation-multisigfederation:联盟模式是使用公证人联盟来取代单一的保管方,利用公证人联盟的多重签名对侧链的数字资产流动进行确认。在这种模式中,如果要想盗窃主链上冻结的数字资产就需要突破更多的机构,但是侧链安全仍然取决于公证人联盟的诚实度。这种方式还是中心化的。
SPV(simplepaymentverification)模式:以上两种方案都是通过中间人来保证安全的,都属于中心化的。
SPV(SimplifiedPaymentVerification),即简单支付验证则是安全性更高的去中心化方式。
SPV是Nakamoto在《比特币白皮书》中提到的概念。这也是比特币底层技术中很重要的一个概念。
SPV是一种用于证明交易存在的方法,它的特点是只需通过少量数据就可以验证某个特定区块中交易是否存在。在SPV模式中:
1.用户在主链上将资产发送到主链的一个特殊的地址,来锁定主链的该资产。
2.在主链上等待一个确认期,是指币在转移至侧链之前,在父链上必须被锁定的期间。此确认期目的是生成足够多的工作量,让下一个等待期内的拒绝服务攻击变得更困难。典型的确认期的量级可以是一或两天。
当父链上生成了特殊输出后,用户等待确认期结束,然后在侧链上生成一个引用该输出的交易,提供出一个它已被创建并在父链上被足够工作量覆盖的SPV证明,确认期是一个依侧链而定的安全参数,要在跨链交易速度和安全性间做权衡。
3.主链确认期结束资产确定被锁定后,会创建一个SPV证明并发送到侧链上。然后一个对应的带有此SPV证明的交易会出现在侧链上,这笔交易就在侧链上生成了相同价值的侧链代币资产。
4.生成的侧链资产先处于锁定状态,接下来,用户必须等待一个竞赛期。这个期间,新转移过来的币不能在侧链上花费。竞赛期的目的是防止重组时出现双花,在重组期间转走先前锁定的币。在这个延迟期内的任何时刻,如果有一个新的工作证明发布出来,对应的有着更多累计工作量的链中没有包含那个生成锁定输出的区块,那么该转换将被追溯为失效。我们称此为重组证明,需要等待一个竞争期来防止双花。如果在竞争期内,用户把主链上锁定的币转走,其他用户可以用最新的SPV证明此事,则侧链铸币交易失效,称此证明为重组证明。
只要有可能,所有侧链上的用户都会有动力来制发重组证明,因为对不良证明的承认会稀释所有币的价值。
5.典型的竞赛期也是一或两天。竞争期结束后,侧链代币生成,可以在侧链内自由转移,不需要与父链进一步交互。不过,它仍保留着父链币的身份,仅能转回到它所来的那一条链上。
6.当用户想把币从侧链上转回父链时,流程重复上述步骤:在侧链上将币发送至一个SPV锁定的输出,产生一个充分的SPV证明来表明该输出已完成,使用这个证明来解锁父链上先前被锁定的那个等面值的输出。
驱动链模式Drivechain:驱动链概念是由BitcoinHivemind创始人PaulSztorc提出的。在驱动链中,矿工作为‘算法代理监护人’,对侧链当前的状态进行检测。矿工相当于资金的托管方,驱动链将被锁定资产的监管权发放到矿工手上,并且允许矿工们投票何时解和将解锁的资产发送到何处。矿工观察侧链的状态,当他们收到来自侧链的要求时,他们会执行协调协议以确保他们对要求的真实性达成一致。诚实矿工在驱动链中的参与程度越高,整体系统安全性也就越大。
混合模式:驱动链+公证人/侧链而混合模式则是将上述获得双向锚定的方法进行有效的结合的模式。由于主链与侧链在实现机制存在本质的不同,所以对称的双向锚定模型可能是不够完善的。混合模式是在主链和侧链使用不同的解锁方法,例如在侧链上使用SPV模式,而在主链网络上则使用驱动链模式。
数据可用性:
在数据有效性方面,因为侧链说把数据存储在侧链上,并不锚定回,所以只能由侧链自己的的validator来保证,安全性就弱了很多。
侧链项目:
Polygon-项目范围从单一的Layer2plasma解决方案,最终扩展为目前的一种扩容框架,可用于创建与以太坊兼容的区块链网络和扩展解决方案。其目标是为围绕以太坊打造一个像多边形一样的多链网络现在正在开发7种扩容方案。其中PolygonPOS侧链算是赛道龙头。Polygon团队认为,在未来,以太坊仍然是高价值交易和价值存储的主导区块链,而日常交易将转移到Polygon的低成本区块链。所以polygonpos侧链是通过协助以太坊扩容提供价值,而非直接和以太坊主网竞争抢夺市场。
GnosisChain-前身是xDai侧链,后与Gnosis合并开发的GnosisChain。低成本和以太坊兼容是gnosischain两个主要的卖点。
Skale-定位赛作为以太坊的“弹性侧链网络”,能够支持成千上万个独立区块链、侧链、存储链和其他类型子链。这些区块链都与以太坊主网相连接,并且完全兼容以太坊生态。
Palm-以太坊联创JosephLubin、ConsenSys创始人、电影制片人兼HeydayFilms所有者DavidHeyman,艺术科技集团HENIGroup创始人JoeHage。这是一个允许用户建立NFT的以太坊侧链。
Ronin-由链游AxieInfinity开发商SkyMavis推出的以链游为主的侧链。由于游戏需要快速交互和低手续费,以扩展和促进每天发生的成千上万甚至数百万的交易活动。用户体验必须是友好丝滑的。所以团队干脆自己动手上。
分片链-在原eth升级方案中的分片链,也属于eth自己的侧链变体。
优缺点:
+ve:
1)侧链的兼容性是非常好的,支持通用计算,EVM兼容,可以支持智能合约。
2)涉及到大规模复杂的交易,侧链的tps可以达到非常高。比较侧链的设计本就是牺牲了一些去中心化或安全措施来实现高吞吐量。
3)侧链的设局主要是为了减少了主链上的拥堵,降低了每个人的成本,增加了以太坊生态系统的可用性和可扩展性。
4)开发人员还可以使用侧链来探索和测试主链上不可用的新特性和用例。比如最早侧链的概念是怎么出现的?就是2012年,当时比特币的核心开发团队正在考虑如何可以安全的升级比特币协议,以增加新的功能,但是担心直接在比特币区块链上进行功能添加比较危险,因为如果新功能在实践中发生软件故障,会对现有的比特币网络造成严重影响。另外,由于比特币的网络结构特性,如果进行较大规模的改动,还需要获得多数比特币矿工的支持。这时,比特币核心开发者便提出了侧链方案。
所以最早侧链本就是允许开发人员探索性质地将新功能附加在其他的区块链,再将这些侧链附着在现有比特币区块链上。以保护比特币父链网络。
-ve:
1)侧链和以rollup和channel之间的主要区别在于,rollup和channel都继承了以太坊主网络的安全性,但侧链因为采用自己的的共识机制,通常是为特定类型的交易设计的,这也意味着它们通常不会继承以太坊的安全属性。从技术上而言,侧链方案不属于layer2。
2)去中心化程度低。
3)和通道方案比起来,侧链的隐私性弱一些,因为在侧链上,每笔交易都会发布到侧链上,无论是否跟侧链上的所有参与者交互,交易都会被侧链上每个参与者接收。
Ⅱ.Layer2二层解决方案
基本想法是链下计算/执行,结果上链;数据离线批量处理。这种方式是直接从第一层以太坊共识中获得安全性,方案包括:
A.Channel通道
这是一个非常早期、存在已久的区块链扩展方案,他最出名的应用是比特币的闪电网络。更注重安全性,而非可用性。
参与者必须将以太坊的一部分状态,如ETH存款,锁定在一个多签合约中。锁定初始状态是第一个交易,并打开了通道。然后参与者可以在链下快速自由地进行交易。当互动结束后,把最终状态提交上链,关闭通道。
这边可以再细分为两种支付通道PaymentChannel和状态通道StateChannel:
PaymentChannel:现在主链上建一个多签合约地址,比如,A和B创建了这样的多签合约,资金只有经过他俩共同同意才能转移。把各自的钱存进去,假设A和B各存10eth,这个初始状态就相当于是打开了一个支付通道。然后在链下他们之间进行了几十甚至上千笔交易,每笔交易双方都需要签名和盖时间戳。最后A有5ethB有15eth。但他们不需在区块链上记录这么多笔交易,只用记录两笔——初始资金交易和所有交易结束后的最终余额分配。当他们把最终余额上传到主链,相当于关闭了这个支付通道。
对于A和B来说链下的那些交易没有手续费并且几乎即时成交。双方无需支付矿工费用,也不必等待区块确认。
StateChannel:这其实是对PaymentChannel的一种衍生,从名字就可以判断,这种方案是围绕“状态”,也就是说不仅仅是交易状态,也可以是游戏状态、获活动状态等。举个例子,开始一场五子棋游戏,他们需要先创建一个新的“评判”程序,并为其提供初始投注,这样就算开启状态通道了。他们走棋的过程不会作为交易提交给区块链。但每走一步双方都需要签名且附上时间戳,然后再走下一步。只有当程序根据规则判定一方胜出时,结束游戏,a和b签署一个状态更新,根据游戏的结局简单地分配投注。这就相当于状态通道关闭了。
数据可用性DataAvailability:
所有的数据存在Layer2,由Channel双方保证DA
状态有效性StateValidity:
Channel结束后任何一方都可以提交最终状态到Layer1,但是Layer1不验证,而是会先要求提交者质押。然后会有一周的时间进行FraudProof,任何一个人可以对着笔结算疑然后提交证明。这个质疑是可验证的。刚才提到了,每一笔线下转账和行为都需要双方签名,并且附加上时间戳。所以但凡质疑者提供的欺诈证明显示是签过名且**时间比之前的更新,**这就是一个可验证的欺诈证明。这个证明就会成为最新状态,同时先前提交状态的那个人质押的币会被扣除。
Channel项目:
BTC的闪电网络lighteningnetwork
优缺点:
+ve:
1)通道主要面向高频、小额支付。
2)节省了大量交易时间和费用。尤其是交易费用方面,创建通道有初始成本。但是一旦部署了,通道内部每个状态的更新都非常便宜。链上实际只记录两笔交易。
3)状态有效性SV可以通过欺诈证明得到很好的保证。
4)状态通道有很强的隐私性能-因为任何事情都是发生在通道中的,而不是公开广播并且记录在链上。只有打开和关闭转账必须是公开的。但是在侧链系统中,每笔转账都是发布在侧链上的,然后侧链上的每个参与者都会收到,
5)状态通道有即时的最终确定性-也就是说只要两方签署了状态更新,就能认为状态结束了。
-ve:
1)提币慢,还需要1周时间进行欺诈证明才能提币
2)对于偶尔转账给对方的用户来说,创建和结算通道的时间和经济成本都比较高,不太友好。因为你还需要创建多签合约,签名,设计评判程序…
3)不支持开放式参与。通道不能用于向尚未参与的人发送链下资金
4)TPS一般,更适合少数参与者,如果是大规模的复杂的交易性能就跟不太上。
5)不支持智能合约,毕竟不是一个链。
6)状态通道需要所有参与者100%的在线,如果参与者中途离开也会被扣除质押代币。
7)通道不能用于表示没有明确逻辑所有者的对象。所以说通道只通道不能用于表示没有明确逻辑所有者的对象适合用于有已定义好参与者集的应用,虽然说可以添加和移除参与者,但是需要每次都对合约进行改变。
B.Plasma
由于Channel“无法支撑大规模、大资金和复杂交易”的局限性,Plasma方案应运而生。其结合了侧链的一些设计,解决了将资产发送给任意目标人的问题,同时也能够确保TPS的提升。事实上在开发者们研究Layer2解决方案的开始很长一段时间里,Plasma一度被认为就是“therightone”。
但随着后来因为一些硬伤被Layer2取代了,这边来简单给大家说说:
Plasma是一条独立的区块链,最初的设计也是想保留侧链的主要用途,可以通过链下交易来扩容,同时能一定程度解决侧链自身的安全性问题因此在取舍后放弃了侧链的一些性能,却通过区块锚定回主网来增加安全性。他和侧链最大的2点不同在于:
1)侧链使用桥的方式来和主链交互资产,但侧链的安全性依靠自身的共识机制。而且侧链往往比主网小很多。但plasma将自身的每一个区块的状态信息以区块根的形式发布到以太坊主网。因此在以太坊主网上是可以确认到plasma链上的状态信息的。因此Plasma链也被称为"子"链,因为它们本质上是“父链”以太坊链的较小复制。这意味着它继承了主链的部分安全性,所以也属于layer2的方案。
2)plasma上是不支持智能合约的,仅支持基本的代币转移、交换和其他一些交易类型。
无限创建“链中链”:
每一条Plasma可以无限创建更多的子链,以减轻父链的工作量,每条子链都有一个叫做“Operator”的角色。
运营商周期性的“状态承诺”:
所有链下交易会先汇总到子链的运营商,然后运营商周期性地把子链计算结果汇总,通过默克尔树的形式打包压缩成一个区块根,最后将区块跟提交回主链做状态记录。也就是所谓的周期性的提交”状态承诺“。通过这样的方式,无论在两次提交期间,子链上发生了多少笔交易,子链只需要将交易执行造成的状态信息提交到主链上即可。而交易的数据是不会提交给主链的。
入口——主网合约:
像侧链一样,Plasma使用在以太坊上运行的主合约来处理用户的进入和退出。用户必须在主合约中存入ETH或任何ERC-20代币。监视合约存款的Plasma运营商重新创建与户的初始存款相等的金额,并将其释放到用户在Plasma链上的地址。
退出——欺诈证明:
然后在推出plasma链,也就是取款的时候,plasma引入了之前提到的“挑战期”,通过欺诈证明的方式来惩罚不诚实行为、保证状态有效性。该主合约还负责跟踪状态承诺并通过欺诈证明惩罚不诚实行为。「欺诈证明」意味着任何人在这段挑战期内,都可以通过默克尔树校验的方式来提交证明用户资产的退出是不合法的。
DrawnbyRJ
状态根StateRoot:
首先刚才提到了Plasma在主链上拥有一个(或者一系列相互关联的)合约,用来维护plasma子链中的状态记录,这个状态记录实际上是一棵默克尔树的根节点存储的哈希值,这个哈希值被称为stateroot。
具体解释:默克尔树,在二叉树的叶子节点上记录着当前rollup层账户的状态信息。
对于每两个状态信息(例如State1/State2),我们可以根据某种哈希公式计算出一个唯一的哈希值(eg:Hash(1,2))来作为这两个叶子节点的父亲节点,依次一层一层往上类推,最终得到一个哈希值存储在根节点中:你不需要知道怎样计算哈希值,你只需要记住几件事情。
1)任何一个状态的变化都会导致Roothash发生变化。
2)如果两棵树的根哈希值相同,那说明他们的叶子结点存储的信息完全一致。
3)根据根节点的哈希值和下载相邻哈希值,我们可以确认某一个状态信息存在于这棵哈希树中。
DrawnbyRJ
当rollup上发生交易的时候,会产生新的stateroot。任何子链的用户这时候都可以根据自己在子链上下载记录的交易信息来对比、证明新的状态根是否正确。(因为刚才提了,但凡记录的交易/叶子节点上完全一致的,根哈希值一定会相同。
为了保证他们的资金完全安全,用户需要每隔一段时间观察一次等离子链,去记录链上的交易信息。这包括运行一个自动同步等离子链并确保一切按预期运行的软件。用户应至少每隔几天运行一次该软件,但具体时间取决于PlasmaMVP智能合约设置的参数。
如果等离子链运行正常,那么用户不需要做任何其他事情。但是,如果出现不可逆转的错误,那么用户的钱包将自动开始从Plasma链中提取资金。这种自动取款保证了用户资金的安全,即使在最坏的情况下,当恶意运营商试图窃取资金时也是如此。
数据不可用:
但Plasma有一个很大的问题,就是数据的不可用性。欺诈证明有效预防了用户作恶,也能保证只要有还有哪怕一个诚实节点,就能保证链的安全性。但如果是运营商作恶,同时用户/验证者没有可以证明真实性的相关交易信息呢?由于用户可以提交欺诈证明的前提是用户自行记录了子链上的交易数据+运营商将所有真实交易数据打包上主链,所以当运营商作恶提交无效数据时,只要将防欺诈所需的相关信息隐藏,网络中的用户便无法拿到真实信息来证明交易是无效的。
大规模退出:
由于“运营商作恶”这个问题在plasma方案中无法有效预防,只能想解决办法。plasma就设计了一套“大规模退出”“massexit“方案,但这个方案又有可能引发以太坊本身的全网拥塞…
Plasma项目:
Matic最早期就是使用plasma,区块链研究人员此后不久发现了数据可用性问题,导致Plasma被其他解决方案弃用。改名后,polygon项目就转为全方面,全站式扩容方案。
优缺点:
+ve:
1)提供高吞吐量和
2)每笔交易的低成本。
3)适用于任意用户之间的交易。使用的人可以将资产发送给plasma以外的人,收款者可以在任何时间点,回到plasma只要拿着收款证明,去兑现就可以。而如果两者都建立在等离子链上,则每个用户对没有开销。所以plasma也可以适应与主链无关的特定用例。包括企业在内的任何人都可以定制Plasma智能合约,以提供可在不同环境中工作的可扩展基础设施。
4)不需要像channel去提前锁定资金.
5)安全性高,plasma的安全性某种程度上依赖于主网。侧链的validator定期将状态树根stateroot传到主链,但主链不去验证,允许任何人在一周内提交质疑,和欺诈证明。以此来保证sv状态有效性。
-ve:
1)无法运行智能合约。plasma仅支持基本的代币转移、交换和其他一些交易类型。
2)固定提交周期,如果在这个周期内去支付,支付是不会被确认,需要等周期到了才可以。
3)提款慢,通常需要等7天,以允许提交质疑和欺诈证明。
4)需要定期观察网络或将此责任委托给其他人以确保资金安全
5)依靠一个或多个运营商来存储数据并根据要求提供服务。
6)如果太多用户试图同时退出,以太坊主网可能会变得拥挤。
所以这边可以看出来,Plasma和Channel通道对比,核心优势在于:用户可以将资产发送给从未参与过系统的参与者,并且资本要求要低得多。但代价是:Channel通道不需要任何数据在链上运行,但Plasma要求每条链定期发布一个哈希值。此外,Plasma转账不是即时的:用户必须等待挑战权结束。
但plasma自身最核心的问题是,Plasma子链为了提升效率,只会定期提交其状态结果上主链,而非所有交易数据。但是这样做的代价是Plasma无法建立和以太坊主链同一级别的信任,因为确保”数据有效性“的重任就落到了”运营商“身上,而非以太坊主网。但运营商是存在动机去作恶的。
于是乎,就有了roll-up方案…
C.Roll-Up:
Rollup是目前最主流的扩容方案,可以算是原始主链处理方式和Plasma方式的折中:他和plasma一样在以太坊主链之外执行交易,然后将多个交易成批处理在一起,最后将它们的状态发送回以太坊主网络。但是不同之处在于,1)roll-up也会将交易数据提交给主链,2)rollup会最大限度压缩这些交易数据,同时基于Rollup本身的特性适当删除和缩减一部分数据,只要保证最终的提交能够上主链从而供任何人验证即可。
因此,Rollup的安全性要比Plasma高。而他的核心优势也就是同时保证了状态有效性+数据可用性。
Roll-up具体上怎么实现的呢?
StateRoot(先前提到过):
首先Rollup在主链上拥有一个(或者一系列相互关联的)合约,用来维护Rollup层中的状态记录,这个状态记录实际上是一棵默克尔树的根节点存储的哈希值,这个哈希值被称为stateroot。
具体解释:默克尔树,在二叉树的叶子节点上记录着当前rollup层账户的状态信息。
对于每两个状态信息(例如State1/State2),我们可以根据某种哈希公式计算出一个唯一的哈希值(eg:Hash(1,2))来作为这两个叶子节点的父亲节点,依次一层一层往上类推,最终得到一个哈希值存储在根节点中:咱不需要知道怎样计算哈希值,咱们只需要记住几件事情。
1.任何一个状态的变化都会导致Roothash发生变化;
2.如果两棵树的根哈希值相同,那说明他们的叶子结点存储的信息完全一致(因此只需要对比两个根节点哈希值就可以确认底层状态信息的一致性;
3.根据根节点的哈希值和下载相邻哈希值,我们可以确认某一个状态信息存在于这颗哈希树中。
DrawnbyRJ
Batch:
当rollup上发生交易的时候,会产生新的stateroot。
但是如果每发生一笔交易就签名并在主链更新一次stateroot,产生的成本反而会比将这些交易在Layer1上执行还要高。
所以rollup中产生的交易就被按批次打包汇总,同时根据这批交易全部执行完成后的状态,会产生一个新的stateroot。无论是谁将交易打包提交给主链上的智能合约,他都需要计算这个新的stateroot,并将其和上一个stateroot以及交易数据一并提交。
这一部分的打包被称为一个”batch”,运营商将batch提交给Rollup合约后,主链会去验证新的stateroot是否正确,如果通过验证,则将stateroot更新为最新提交的stateroot,并最终完成一次rollup内的状态转移确认。
所以,Rollup的实质是将一大笔实际产生的交易汇总成一笔主链上的交易,这些交易由Rollup链来执行和计算,但会将数据提交给主链。这样既利用了主链的共识和安全性,同时提升了实际上的交易效率,降低了交易成本。
https://vitalik.ca/general/2021/01/05/rollup.html
https://vitalik.ca/general/2021/01/05/rollup.html
压缩:
这两种技术方案能够做到扩容,核心都是交易数据的压缩和打包。这是因为以太坊的区块gaslimit是有上限的,压缩后的交易越小,一次能提交给主链的交易就越多,平摊的费用越低。那么如何做到这一点呢?
以下是Vitalik在其文章中描述的一种zk的压缩模式,作为例子帮我们理解:
以太坊主链上一笔简单的交易通常消耗约112字节。然而,在zk-Rollup上发送ETH可以缩减到约12字节。
https://vitalik.ca/general/2021/01/05/rollup.html
达到这样的压缩效果,一方面是采用了更简单高级编码,另一方面,还有一些巧妙的压缩技巧。
这个图表很有意思,不考虑rollup,一般在以太坊网络上交易会涉及到这些参数:
Nonce:此参数的目的是防止重放。如果一个账户的当前nonce是5,那么来自该账户的下一笔交易处理后,账户中的nonce将增加到6。nonce一般来说可以到几千几万,但它是通过rlp编码可以动态缩短字节,所以以太坊网上的nonce大约是在3字节左右
Gasprice:是以10的负18次方为单位的一个数,也是rl编码,大概是8字节
Gas:这边指的是你愿意付出的gas个数,一般都不多。一般以太坊一个block的gas上限是允许2千万个gas。一般一个转账交易gas差不多是2万,调个合约差不多是10万-20万,顶多几十万。所以这边平均差不多3个字节
To:以太坊上一个地址差不多是21个字节,而且以太坊地址范围很大
Value:指的是转账时的钱数,很多时候调合约value都是0,因为你不需要往合约里转账。但比如我转5eth给你,那value就有个值。单位也是10的负18次方,rlp编码,9个字节差不多
Signature:签名就比较固定差不多68个字节
所以这样算下来,一个eth交易差不多112个。因为roll-up是往L2发,所以只要能表达出完整信息,L2方案是可以自定义格式的。但是这些信息他可以挑选,和压缩。比如:
Nonce:在rollup中可以完全省略nonce。因为完全可以从pre-state中恢复nonce。
GasPrice:可以在每批中设置一个固定的费用水平,或者甚至将gas支付完全移到汇总协议之外,并让交易者通过渠道向批次创建者支付费用。
Gas:可以在batch层面设置gas限制,选择一些特定的值,
To:可以通过默克尔树上的索引来替换20字节的地址(例如,如果地址是添加到树中的第4527个地址,我们只需使用索引“4527”来引用它。就可以限制到4个字节
Value:钱数把单位改一下,或者用其他技术法来存储。
Signature:使用BLS聚合签名,将多个签名整合为一个。然后可以一次性地针对整个消息批次“batch”验证签名。因为每个区块中可验证的聚合的签名数量上限是100,所以即使包含100笔签名的大批次也能聚合成一笔签名。
最后省下来差不多12个字节。其实相当于限制了精度,但信息范围不变,依旧几乎表达了完整的信息。这就是rollup为什么能扩容的重点。但这扩容的原因主要是因为在主链上,calldate是有限制的,因为calldate它每个字节都会消耗主网上的一点gas,而主链上一个blcok的总gas数上有限制的。所以就限制了calldata能包括的字节的总数。
这些压缩技巧是rollup扩容的关键,如果我们不对交易数据进行压缩,rollup或许只能在主链的基础上的有大约10倍的提升效率,但有了这些压缩技巧,才能做到100倍甚至更高的压缩效率。
Dataavailability:
如何验证提交的信息是正确可用的?
Roll-up和plasma的一大不同在于它也提交了交易数据上主链,来保证任何人可以验证。那现在就涉及到了如何验证提交的信息是正确可用的?
对于这一问题,大体上有两种解决方案,而根据解决方案的不同,rollup也被分成了两类:Optimisticrollup乐观卷叠和Zero-knowledge(ZK)rollup零知识证明卷叠。
a)Optimisticrollup顾名思义,它们乐观地假设所有交易都是有效的,并在没有任何初始证明的情况下提交批次。任何人可以在挑战期内,检测并证明有数据是虚假的。
DrawnbyRJ
如果批处理被证明是有欺诈性的,那么Optimisticrollps会执行欺诈证明,并使用以太坊主链上的可用数据运行正确的交易计算。
还可以用刚才这个图来解释optimisticroll-up中的欺诈证明构建:
batch所包含的信息包括了pre-stateroot,poststateroot,和交易信息。
根据pre-stateroot这一部分能够构建完整的默克尔树。
根据交易信息,我们可以模拟执行batch中提交的交易,从而得到了新的账户状态,得到新的默克尔树,得到新的stateroot。
将上一步得到的stateroot和batch中的stateroot进行比对从而验证batch中的是否正确。
https://vitalik.ca/general/2021/01/05/rollup.html
https://vitalik.ca/general/2021/01/05/rollup.html
https://vitalik.ca/general/2021/01/05/rollup.html
为了威慑提交者不作恶,提交者往往需要质押资金,当他的提交被验证为错误时,一部分质押资金将会被扣除作为惩罚。同时,提交了相应欺诈证明的验证者会得到被扣除的押金,以此来激励监测和提交欺诈证明的行为。
如果我们将OR和Plasma进行比对,我们会发现一些相似性,例如他们都使用了欺诈证明机制,需要有一个验证者的角色来监测OR给主链的提交。但由于OR同时向主链提交了交易数据,所以OR上的验证者不需要在自己去保存记录OR上的交易。
DrawnbyRJ
优缺点:
+ve:
1)提供高吞吐量
2)和低交易成本
3)roll-up交易数据存储在第1层链上,提高了透明度、安全性、抗审查性和去中心化性。在不牺牲安全性或不信任的情况下提供可扩展性的巨大改进。
4)optimisticrollup的欺诈证明保证了去信任的最终性,状态的有效性,而且并允许诚实的少数人保护链
5)optimisticrollup也通过将交易数据上主网保证了数据的可用性。
6)与EVM和Solidity的兼容性允许开发人员将以太坊原生智能合约移植到汇总或使用现有工具来创建新的dapp。
-ve:
1)提款慢,通常需要等7天,以允许提交质疑和欺诈证明
2)安全模型依赖于至少一个诚实节点执行汇总交易并提交欺诈证明来挑战无效状态转换。
3)Optimisticroll-up必须在链上发布所有交易数据,也需一定的成本。
OptimisticRollup项目:
b)另一类Roll-up解决方案是Zero-Knowledgerollup(ZKrollup)
先来说说什么是零知识证明ZKP?
零知识证明是现代密码学的一个重要组成部分,它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。
证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。通俗的来讲就是:
既证明了自己想证明的事情,同时透露给验证者的信息为"零"。eg数独
完备性
可靠性
零知识性
与OptimisticRollup不同,ZKRollup要求提交者在提交batch(zkrollup也是将交易捆绑成批次,链下执行,一同上链)时除了交易数据以及post/previousstateroot之外,还要携带一个“有效性证明”。有效性证明被提交到主网的roll-up合约后,任何人都可以使用它来验证zkRollup层中特定batch的交易是否正确。证明可以在提交batch几分钟后完成,验证成功后主链rollup合约会将Stateroot更新为提交的最新数据。这基本等同于省略了验证人的工作,在提交的同时完成验证。
这意味着:1.zkRol-Up省略掉了验证者保存数据,在挑战期提交欺诈证明的环节;2.也不再需要在提交后再等待7-14天来做验证。所以交易速度也比其他L2方案快很多。
DrawnbyRJ
目前市面上有两种零知识证明的解决方案:
zk-SNARK是简洁非交互式知识论证的缩写。该种方案的特性是简洁的,即验证过程不涉及大量数据传输以及验证算法简单,这就意味着验证时间不会随着运算吞吐量而成倍增长。
zk-STARK是可扩展的透明知识论证,是作为SNARK的替代版本而创建的。与SNARK的Succinct的“S”不同,STARK的“S”代表的是Scalable,主要表现在STARK生成证明时间复杂度近似于计算的复杂度,而验证证明的时间复杂度远小于计算的复杂度。也就是说随着STARK扩展性提高,STARK的证明复杂度并没有相应增加。
但由于零知识证明这部分涉及到很复杂的底层技术和密码学概念,所以这个日后可以单拎出来再做个分享。今天这边就简单说一下,不进入具体细节。
总之,我们知道ZKrollups特有的几个重要压缩技巧是:
1.生成的证明体积远远小于证明内容的体积。
2.如果事务的一部分仅用于验证,并且与状态更新无关,那么该部分可以下链,从而减少字节。但这不能在optimisticroll-up中完成,因为该数据仍然需要包含在链上,以防以后需要在欺诈证明中进行检查。
但zk的挑战在于生成、以及验证一个zk证明本身需要非常非常大量且复杂的计算,这也是为什么目前ZK-Rollup研发进度和实际应用都非常慢的原因之一。而且正因为其技术上的复杂性,并不是随便一种语言,编译环境,虚拟机,指令集都能够无缝支持完成以上提到的过程,需要做额外的适配,这导致zk项目天生就很难兼容evm。
这边是@W3.Hitchhiker团队做的一个不同方案的费用和TPS对比:
https://w3hitchhiker.mirror.xyz/7dwD76ZZIlR7ep731K6y9vTTuXGHOojxWSnkXKzqPzI
优缺点:
+ve:
1)有效性证明确保链下交易的正确性。
2)由于省略了验证者的工作和挑战期这个概念,一旦在L1上验证了有效性证明,就会批准状态更新,从而提供更快的交易最终确定性。
3)OR的数据可用性来自于经济学。为了能够良好的运转,OR必须设计合理的激励机制驱使一批主链上的验证人随时监测提交者,并准备提交欺诈证明,而zk的数据可用性依赖于密码学和代码。
4)安全性依赖于主网的安全性和共识。因为恢复链下状态所需的数据都存储在L1上,从而保证安全性、抗审查性和去中心化。
5)更好的数据压缩有助于降低calldata在以太坊上发布的成本,并最大限度地减少用户的汇总费用。属于目前压缩能力最强,效率最高的方案
6)所以用户交易费用也低。
-ve:
1)由于其有效证明所需计算量大,复杂度高,所以开发速度慢
2)因此应用不广泛。不像op有那么多的应该和迭代
3)目前很难支持以太坊虚拟机,使其难以运行智能合约、DeFi协议等去中心化应用程序。
4)硬件方面的中心化风险。生成有效性证明需要专门的硬件,硬件垄断有可能会导致对链进行集中控制。
ZKRoll-Up项目:
datafromhttps://l2beat.com/scaling/tvl/,22/09/2022
Rollup小总结:
现在就能明白为什么Roll-Up方案能够取代Plasma方案:
1)效率-zk-rollup会生成链下交易处理的有效性证明。直接省略了运营商打包数据、发布“状态承诺”和用户欺诈证明提交的环节,从而消除挑战期和退出机制的需要。这也意味着用户不必定期观察链来保护他们的资金。
2)支持智能合约-Plasma的另一个问题是无法支持以太坊智能合约的执行。Optimisticroll-up与以太坊虚拟机兼容,甚至现在不少zk项目也在推进zkEVM的实现。使其成为更理想的、即安全又有用的去中心化扩容方案。
数据不可用-如前所述,Plasma存在数据可用性问题。如果恶意运营商在Plasma链上提交了无效数据,用户将无法质疑并提交欺诈证明。Rollups通过强制运营商在以太坊上发布交易数据来解决这个问题,允许任何人验证链的状态并在必要时创建欺诈证明。
3)大规模退出问题-ZK-rollups和OptimisticRollups都以不同的方式解决了Plasma的大规模退出问题。例如,ZK-rollup的加密机制确保运营商在任何情况下都无法窃取用户资金。
同样,optimisticrollup对提款施加了延迟期,在此期间任何人都可以发起挑战并防止恶意提款请求。虽然这类似于Plasma,但不同之处在于验证者可以访问创建欺诈证明所需的数据。因此,roll-up方案不会涉及到有可能损害主网络的“大规模推出”。
V神这几年也强调了未来以太坊的发展路线将是以rollup为中心,底层链为区块的数据可用性提供保证,而Rollup为区块的扩容和有效性提供保证。
然而…
随着向layer2大规模迁移的推进,即便是压缩能力强的rollups,最终还是会回归到相同的扩容问题——因为rollup交易数据仍必须传播到所有完整节点,其扩容程度依旧受到以太坊的数据处理能力的限制。
与主网相比,Optimisticrollup可以实现25倍的可扩展性升级,zkrollup可以实现100倍,约3000TPS。
可以说Rollup方案们在扩容方面提供的是线性增长,而非指数级的。那有没有可能够既保证性能,又提供指数级的扩容增长?
于是StarkWare团队又首创了Validium方案,一个有可能达到2-3万tps的链下扩容方案…
D.Validium链
它的运行方式类似于ZKrollup,也通过发布零知识证明来验证以太坊的链下交易,但是最主要的区别在于Validiums的数据可用性是链下的。因为这样吞吐量不受以太坊数据处理能力的限制,从而提高扩展性、交易速度、降低用户费用等目的。
存款和取款:
存款和取款也和rollup类似,用户的存款和取款由以太坊上的智能合约控制。用户通过在以太坊主链合约中存入ETH,在validium链上铸造出与其存款相等金额的代币。
取款的话,validium用户将其提款交易提交给运营商。用户在validium链上的资产在退出系统前也会被销毁。一但批次的有效性证明得到验证,用户就可以通过提供merkle证明来调用主合约进行提款。所以和zk-rollup一样,Validiums提供近乎即时的提款。
Batch批次:
和rollup类似,用户向运营商提交交易,运营商将交易打包成批次然后提交上主链。批次中包括状态根stateroot/merkleroot和有效性证明。要执行状态更新,运营商必须计算一个新的状态根并将其提交给主链上的合约。如果有效性证明通过,将切换到新的状态根。
与ZK-rollup不同,validium上的运营商不需要发布交易数据。这使得validium成为一个纯粹的链下扩展协议。
DrawnbyRJ
Validium的链下数据存储主要好处是进一步提高可扩展性、提高交易速度、降低用户费用、以及保护隐私,因为公众无法在链上访问交易数据。
数据可用性:
然而,链下数据的可用性带来了一个问题——如果运营商作恶向用户隐瞒链下状态数据,同时用户无法访问交易数据,那么用户就无法计算执行提款所需的Merkle证明,用户的资金就会被冻结。
如下图所示:如果运营者更改了trasaction6,则交易transaction1的所有者将无法证明其帐户所有权,因为丢失了证明过程中所需的节点hash的信息。
DrawnbyRJ
因此,Validium有必要采用额外的链下数据管理机制,以便确保用户在需要时可以访问到链下交易数据。
Validiums的链下数据可用性管理方法可以分为两大类:一些依赖受信任方来存储链下数据;而另一些则使用随机分配的验证者来完成任务。
第一类:数据可用性委员会DataAvailabilityCommittee(DAC)
为了解决这个问题,StarkWare提出了数据可用性委员会的概念,以消除用户对运营商的信任依赖。
通过指定一组受信任的实体来存储链下数据副本并在运营商不为用户的提款请求提供服务的紧急情况下将其变为公开可访问。由于成员较少,DAC更容易实施并且需要较少的协调。但伴随的是集中化风险。
直接退出,无需通过运营商。
在紧急情况下,主网上应用程序智能合约将不再接受新的状态更新,而是只允许能够为最新状态提供merkle证明的用户直接提取资金。也就是说这种情况下用户可以无需通过运营商,直接调用主合约的提款功能,将他们的资金提回。
由于其仍使用零知识证明,所以不存在广播不正确状态的危险。
但是,用户必须信任DAC以在需要时提供数据。数据可用性委员会的成员有可能受到恶意行为者的损害,然后恶意行为者可以扣留链下数据。
第二类:绑定数据可用性BoundedDataAvailability
这种是通过经济激励机制和去中心化的形式来保证链下数据的可用性。此方案要求负责存储离线数据的参与者在担任其角色之前在智能合约中质押代币。这种代币作为一种“纽带”来保证数据可用性管理者之间的诚实行为并减少信任假设。如果这些参与者未能证明数据可用性,则保证金将被削减。
在绑定的数据可用性方案中,一旦质押所需的代币,任何人都可以被分配存储链下数据。这扩大了符合条件的数据可用性管理人员的数量,减少了影响数据可用性委员会(DAC)的集中化风险。更重要的是,这种方法依赖于加密经济激励措施来防止恶意活动,比指定受信任方来保护离线数据更安全。
Validium的优缺点:
+ve:zkroll-up的很多优势和劣势validium也有:
1)有效性证明强制链下交易的完整性,并防止运营商用无效状态来更新
2)交易速度快。将资金撤回以太坊时不会出现延迟
3)适用于特定用例,例如优先考虑隐私&可扩展性的交易或区块链游戏。(比如DeversiFi是一个使用第二层网络(Validium)实现隐私交易和可扩容的去中心化*交易所。*的DEXV1.0选择链下数据解决方案的主要原因之一,是因为他们的客户——专业交易者——不能将他们的交易历史记录在链上,因为这会将他们的策略暴露给竞争对手。
4)链下数据可用性提供更高水平的吞吐量。
5)通过不将交易数据发布到以太坊主网来降低用户的gasfee
6)指数级的可扩展性增长将承载更高的流动性,这会是新兴DEX的一个重要属性
-ve:
1)由于其有效证明所需计算量大,复杂度高,所以开发速度慢。对于低吞吐量的应用程序不具有成本效益。
2)因此应用不广泛。不像op有那么多的应用和迭代
3)目前很难支持以太坊虚拟机,使其难以运行智能合约、DeFi协议等去中心化应用程序。
4)硬件方面的中心化风险。生成有效性证明需要专门的硬件,硬件垄断有可能会导致对链进行集中控制。
5)模型依赖于信任假设和加密经济激励,不像ZK-rollups纯粹依赖加密密码学安全机制。
6)链下数据的可用性的问题:创建或验证Merkle证明所需的数据可能不可用。这意味着如果运营商作恶,用户可能无法从链上合约中提取资金。即时有数据可用性委员会,依旧存在中心化的风险。
Validium项目:
fromhttps://l2beat.com/scaling/tvl/,22/09/2022
E.Volition
这边可以多提一个混合方案——StarkWare创立的volition的概念:结合了ZK-rollup和validium,并允许用户在两种扩展解决方案之间切换。通过Volition,用户可以利用validium的链下数据可用性进行某些交易,同时保留在需要时切换到链上数据可用性解决方案的自由。这实质上使用户可以根据他们的独特情况自由选择权衡取舍。
https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb
例子:在zkSync2.0中,就用到了volition的概念。他们L2状态分为2个方面:具有链上数据可用性的zkRollup和具有链下数据可用性的zkPorter。这两部分将是可组合和可互操作的。
四、总结:
各类方案对比,rollup有效地保证了状态有效性+数据可用性,保留了先前方案的优势,同时解决了他们的局限性。从而成为目前扩容领域的的龙头。
在roll-up方案中,短期来看,optimisticrollup技术更加成熟、运用更广泛,oproll-up可能会在通用EVM计算中胜出,而ZKroll-up可能会在简单的支付、交换和其他特定于应用程序的用例中胜出。
但从长远来看,而ZKRollup的弱点基本都属于技术问题,随着大量优秀的开发人员投入到相关研究,ZKRollup在未来会是更优的扩容方案。ZK-Rollup技术的基本原理将使其能够取代OptimisticRollups,有能力达到更快的速度、更高的安全性,更全的性能,从而带来更加广泛的采用。目前已经有不少像Scroll、zkSync和Polygon这样的Layer2项目已经在尝试引入zk-EVM的计算环境,这将使ZK-Rollups能够独立运行所有类型的通用智能合约。
未来会有更多融合。从扩容方案发展过程来看,以太坊的扩容并不是某个单一方案能够一劳永逸的。很多解决方案提供商也都在多条路径上进行着探索和布局。个人相信这也势必会产生更多融合方案
读完本文应该能很直观地感受到:扩容方案的发展迭代,往往是意识到一个解决方案存在的局限性后,用另一种更好的方案来尽可能地保留优点,解决缺点,突破局限。就像当初很长一段时间开发人员都认为Plasma就是“therightone”,直到意识到它的局限性无法被突破,从而探索出了roll-up;目前roll-up看起来好像就是大家公认的答案了,但也许随着探索的深入,还会出现颠覆roll-up的更优的解决方案?
最后就是我整理完感觉这些扩容方案目前有无数种走向,对于我这种二级投资的个体户感觉可以慢慢来,等项目跑出来做右侧交易,因为变化太快,可能好不容易搞明白了,他们发现走不通,改方向了。然后判断出一个大趋势广撒网,广押宝也许是笨但比较有效的办法哈哈。但这是二级思路不适用于一级,一级最后还是看团队、看项目背后的网络、资源。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。