当前位置:首页 > 资讯 >

LD Research:一文详解以太坊扩容全方案

原文作者:0xRJ_eth(Twitter:@0xRJ_eth)

今天主要是从一个自上而下结合时间发展的视角整理了以太坊扩容方案,内容涵盖了一些市场如今已经不再提及的旧方案,有些可能大家听都没听说过。但我认为把大框架和相互逻辑理清楚是非常重要的,这有助于我们理解扩容的发展经历了哪些创新和组合,遇到了哪些问题,不同时期市场的关注点是什么,以及为何目前 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 大致上可以分为两大类:Ⅰ. 侧链;Ⅱ. layer2二层解决方案。

Ⅰ. 侧链

侧链是独立运行的区块链,其安全性全靠自身协议机制。这也是侧链和目前主流链下扩容方案 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(以太坊虚拟机)。但侧链有自己的账本系统、共识算法(例如权威证明、委托权益证明、拜占庭容错)脚本合约等。但为了实现各种不同的目标,它们获得安全性的方式也有所不同。

这里举几个例子:

  • 单一托管模式 Centralized (basic third party authority):这是现阶段最简单的在区块链之间转移数字资产的方式——将主链上的资产发送到一个单一托管方(比如交易平台),托管方收到这笔资产后,在侧链上激活等额资产,这笔资产就能在侧链上流通了。这种方式最大的缺点是过于中心化。

  • 联盟模式 Federation - multisig federation:联盟模式是使用公证人联盟来取代单一的保管方,利用公证人联盟的多重签名对侧链的数字资产流动进行确认。在这种模式中,如果要想盗窃主链上冻结的数字资产就需要突破更多的机构,但是侧链安全仍然取决于公证人联盟的诚实度。这种方式还是中心化的。

  • SPV(simple payment verification) 模式:以上两种方案都是通过中间人来保证安全的,都属于中心化的。

    SPV (Simplified Payment Verification),即简单支付验证则是安全性更高的去中心化方式。

    SPV是Nakamoto在《比特币白皮书》(《Enabling Blockchain Innovations with Pegged Sidechains》大家感兴趣可以读读,我把链接放在下面了)中提到的概念。这也是比特币底层技术中很重要的一个概念。

    SPV是一种用于证明交易存在的方法,它的特点是只需通过少量数据就可以验证某个特定区块中交易是否存在。在SPV模式中:

    1. 用户在主链上将资产发送到主链的一个特殊的地址,来锁定主链的该资产。

    2. 在主链上等待一个确认期,是指币在转移至侧链之前,在父链上必须被锁定的期间。此确认期目的是生成足够多的工作量,让下一个等待期内的拒绝服务攻击变得更困难。典型的确认期的量级可以是一或两天。

    当父链上生成了特殊输出后,用户等待确认期结束,然后在侧链上生成一个引用该输出的交易,提供出一个它已被创建并在父链上被足够工作量覆盖的SPV证明,确认期是一个依侧链而定的安全参数,要在跨链交易速度和安全性间做权衡。

    3. 主链确认期结束资产确定被锁定后,会创建一个SPV证明并发送到侧链上。然后一个对应的带有此SPV证明的交易会出现在侧链上,这笔交易就在侧链上生成了相同价值的侧链代币资产。

    4. 生成的侧链资产先处于锁定状态,接下来,用户必须等待一个竞赛期。这个期间,新转移过来的币不能在侧链上花费。竞赛期的目的是防止重组时出现双花,在重组期间转走先前锁定的币。在这个延迟期内的任何时刻,如果有一个新的工作证明发布出来,对应的有着更多累计工作量的链中没有包含那个生成锁定输出的区块,那么该转换将被追溯为失效。我们称此为重组证明,需要等待一个竞争期来防止双花。如果在竞争期内,用户把主链上锁定的币转走,其他用户可以用最新的SPV证明此事,则侧链铸币交易失效,称此证明为重组证明。

    只要有可能,所有侧链上的用户都会有动力来制发重组证明,因为对不良证明的承认会稀释所有币的价值。

    5. 典型的竞赛期也是一或两天。竞争期结束后,侧链代币生成,可以在侧链内自由转移,不需要与父链进一步交互。不过,它仍保留着父链币的身份,仅能转回到它所来的那一条链上。

    6. 当用户想把币从侧链上转回父链时,流程重复上述步骤:在侧链上将币发送至一个SPV锁定的输出,产生一个充分的SPV证明来表明该输出已完成,使用这个证明来解锁父链上先前被锁定的那个等面值的输出。

  • (不太重要)驱动链模式 Drivechain:驱动链概念是由Bitcoin Hivemind创始人Paul Sztorc提出的。在驱动链中,矿工作为‘算法代理监护人’,对侧链当前的状态进行检测。矿工相当于资金的托管方,驱动链将被锁定资产的监管权发放到矿工手上,并且允许矿工们投票何时解和将解锁的资产发送到何处。矿工观察侧链的状态,当他们收到来自侧链的要求时,他们会执行协调协议以确保他们对要求的真实性达成一致。诚实矿工在驱动链中的参与程度越高,整体系统安全性也就越大。

  • (不太重要)混合模式:驱动链 公证人/侧链而混合模式则是将上述获得双向锚定的方法进行有效的结合的模式。由于主链与侧链在实现机制存在本质的不同,所以对称的双向锚定模型可能是不够完善的。混合模式是在主链和侧链使用不同的解锁方法,例如在侧链上使用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)和通道方案比起来,侧链的隐私性弱一些,因为在侧链上,每笔交易都会发布到侧链上,无论是否跟侧链上的所有参与者交互,交易都会被侧链上每个参与者接收。

Ⅱ. 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%的在线,如果参与者中途离开也会被扣除质押代币。

7)通道不能用于表示没有明确逻辑所有者的对象(例如 Uniswap)。所以说通道只通道不能用于表示没有明确逻辑所有者的对象(例如 Uniswap)适合用于有已定义好参与者集的应用,虽然说可以添加和移除参与者,但是需要每次都对合约进行改变。

B. Plasma

由于Channel“无法支撑大规模、大资金和复杂交易”的局限性,Plasma方案应运而生。其结合了侧链的一些设计,解决了将资产发送给任意目标人的问题,同时也能够确保TPS的提升。事实上在开发者们研究Layer2解决方案的开始很长一段时间里,Plasma一度被认为就是 “the right one”。

但随着后来因为一些硬伤被Layer 2 取代了,这边来简单给大家说说:

Plasma是一条独立的区块链,最初的设计也是想保留侧链的主要用途,可以通过链下交易来扩容,同时能一定程度解决侧链自身的安全性问题(也就是说当子链遇到攻击时,存储在子链上的资产始终是安全的)因此在取舍后放弃了侧链的一些性能(比如执行智能合约等),却通过区块锚定回主网来增加安全性。他和侧链最大的2点不同在于:

1)侧链使用桥的方式来和主链交互资产,但侧链的安全性依靠自身的共识机制。而且侧链往往 比主网小很多。但plasma将自身的每一个区块的状态信息以区块根的形式发布到以太坊主网。因此在以太坊主网上是可以确认到plasma链上的状态信息的(只不过子链上的具体交易数据存储需要用户自行下载保存。以太坊主链在这个过程中只承担了确认者的角色,而非验证者,所以其安全级别是较差的)。因此Plasma链也被称为 "子"链,因为它们本质上是“父链”以太坊链的较小复制。这意味着它继承了主链的部分安全性,所以也属于layer2的方案。

2)plasma上是不支持智能合约的,仅支持基本的代币转移、交换和其他一些交易类型。

  • 无限创建“链中链”:

每一条Plasma 可以无限创建更多的子链,以减轻父链的工作量,每条子链都有一个叫做“Operator(运营商)”的角色。

  • 运营商周期性的“状态承诺”:

所有链下交易会先汇总到子链的运营商,然后(因为子链要锚定回主链)运营商周期性地把子链计算结果汇总,通过默克尔树的形式打包压缩成一个区块根,最后将区块跟提交回主链做状态记录。也就是所谓的 周期性的提交”状态承诺“。通过这样的方式,无论在两次提交期间,子链上发生了多少笔交易,子链只需要将交易执行造成的状态信息提交到主链上即可。而交易的数据是不会提交给主链的。

  • 入口——主网合约:

像侧链一样,Plasma 使用在以太坊上运行的主合约来处理用户的进入和退出。用户必须在主合约中存入 ETH 或任何 ERC-20 代币。监视合约存款的 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仅支持基本的代币转移、交换和其他一些交易类型。

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 是有上限的, 压缩后的交易越小,一次能提交给主链的交易就越多,平摊的费用越

猜你喜欢

关注我们

微信二维码

微信