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