不断妥协的Layer2发展史

不断妥协的Layer2发展史,第1张

我们都知道现在以太坊面临着拥堵手续费高等问题,Layer2正是为了解决这些问题而生。每一种新方案都在旧方案的基础上的提出;另外也发现Layer2的发展历程就是一个不断地在去安全性、通用性和效率之间妥协、寻找平衡点的过程。本文不涉及具体的技术实现,单从原理上梳理一下几种Layer2的技术,会在下一篇文章结合侧链一起对Layer2做进一步探讨。

 

Layer2的发展路径:状态通道->Plasma->Rollup

假如把以太坊的记账看成考试,Layer1就是把从打草稿,写答案到最后批改卷子出分数的过程全都放在链上。Layer2则是把一部分过程放到链下,以太坊仅保留试卷分数。从发展历程来看Layer2看先后分为:状态通道,plasma和Rollup,每一代技术都吸取了前一代技术的发展成果。

状态通道——继承自比特币闪电网络

比特币闪电网络是2016年Joseph Poon和Thaddeus Dryja在论文《The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments》中提出。状态通道的理念和闪电网络非常类似,只是状态通道不仅仅用于“支付”场景,还适用于一般意义上的“状态更新*”。

*状态更新:以太坊其实是一个状态机,以太坊上每产生一笔转账就意味着以太坊账户和整个以太坊网络的状态发生了变化。因此状态更新的适用范围比支付场景更广,比如象棋游戏。在游戏中:A走一步棋,紧接着B走一步棋,之后再轮到A走,依次往复。象棋游戏可以看成是A,B之间相互转账这一“支付”场景的拓展。

1. 状态通道的工作原理

A和B分别把一部分资金质押到一个智能合约中,然后A、B之间建立一个链下通道,在通道存续期间A和B的交易都记录在链下,等通道关闭时再到链上做一次结算,根据结算转账A,B间的质押的资金,最后再把资金分别退回到A和B的账户上。相当于在通道存续期间,A和B间都通过支票交易,账目只有纸面上的增加和减少。最后去银行对账户资金做一次性结算,银行只需要转账一次。

2. 状态通道怎么预防作恶

首先我们要知道,状态通道为了保证链上结算的正确,需要把最新的链下状态上传到以太坊主链上作为最后的结算依据。那么,该如何防止用户作恶呢?办法是设置“争议窗口期”(dispute window),当有一方试图单方面关闭通道时,通道中的另一方可以在争议窗口期内提交证明,证实作恶的一方企图欺诈。由此衍生出两种作恶的情况:

一种作恶方式是A不愿意正常关闭状态通道,希望通过拖延状态通道的正常关闭来影响主链结算,这样另一方B就无法拿回资金了。在这种情况下,B会试图单方面关闭通道,这时进入“争议窗口期”,A需要在窗口期内提交最新的状态证明B在欺诈。但A才是作恶的一方,因此A交不出来B作恶的证据,待”争议窗口期”结束后B将正常拿回自己的资产。

另一种是作恶方式为A提交的不是最新的链下状态而是更早链下状态,A为了骗取资金会要求提早关闭通道进行结算。这时是A试图单方面关闭通道,进入“争议窗口期”,B在窗口期内提交最新的状态副本证明了A在作恶,智能合约会拒绝A的要求并没收A的罚金。

3. 状态通道的局限性

从状态通道的工作原理可以发现它有几点的限制:首先它不能向未参与通道的人发送资金,状态通道要求所有参与者要随时在线,如果中途掉线可能会有财产损失。其次状态通道仅适用于逻辑上有明确参与者的场合,即智能合约需要明确的知道每个参与者;如果要添加或者删除参与成员,则需要重新建立一台条新的通道。因此Uniswap这样的应用就不适合状态通道,因为每时每刻参与的成员和成员的数量都在变化。最后状态通道也不适用于大资金流的场合,因为这需要预先在智能合约里锁住海量资产,不利于流动性。所以,状态通道的应用场景很受限,只适用于高频次小资金的交易。

Plasma——结合了状态通道和侧链

Plasma是Joseph Poon(闪电网络提出人之一)和V神在2017年提出来的以太坊二层扩容框架。它不是一个单独的项目而是一套框架,针对不同的应用场景有不同的链下解决方案,比如Plasma Cash,Plasma Debit,Plasma Prime,MVP (Minimum Viable Plasma)等。每个方案都会针对特定场景做一些大同小异的变化,但它们的主体思想是一致的。在这里我们只介绍其主体思想,不对具体方案做讨论。

1. Plasma的原理和结构

Plasma结构通过智能合约和默克尔树搭建。在主链以太坊上部署一系列的智能合约作为以太坊和子链*间的通信的媒介,这些智能合约统称为根节点。智能合约记录子链的状态,并规定子链状态转换的基本规则。

*子链可以认为是一种特殊的侧链,它是一条独立的区块链可以有不同于主链的共识和自己的节点。一般的侧链是自己记账自己确认,自己对自己的账本负责。但子链需要定期向主链汇报(向主链发送哈希值),子链的计算需要递交到主链上由主链来记账确认。

默克尔树的树状结构允许我们创建无限数量的子链,这些子链本质上是父链以太坊区块链的较小副本。在每个子链上还可以创建更多的子链,类似树状结构,如图1。

图片1 Plasma本质上是一系列智能合约形成的连接到以太坊主网的可信侧链(子链)网络

来源:PlasmaBlockchain Scalability Framework — An Off-chain Scaling Solution for EthereumBlockchain:https://neoyiukit.medium.com/plasma-blockchain-scalability-framework-an-off-chain-scaling-solution-for-ethereum-blockchain-7e4ade2fdf86

和状态通道类似,用户使用的时候需要在主链的智能合约中抵押资产,这些资产会被映射到子链中供用户交易,交易完成后用户可以退出子链并提现。不难看出,Plasma是侧链和状态通道相结合的产物。

2. Plasma怎么防止作恶

根节点智能合约会要求子链提交每个区块的默克尔根(Merkle Root)做欺诈证明,只有提交了证明的子链区块才能被主链最终确认,子链和主链之间通信可靠性通过欺诈证明来保证(欺诈证明会在后文Rollup部分进一步的阐述)。欺诈证明确保了即使在有恶意攻击的情况下,用户依然能够报告不诚实的节点、安全退出且保护自己的财产,因此Plasma设定了一个“等待期”(waiting period),一般为7到14天。在“等待期:内任何人都可以向根节点提交欺诈证明,一旦证明节点作恶,交易会立刻回滚且作恶者被处没收罚金。

这里的”等待期“和状态通道的“争议窗口期”有着异曲同工之妙。不同之处是在状态通道中,当参与交易的双方对交易没有争议时是不会触发“争议窗口期“的,双方可以直接关闭通道结束交易;在Plasma中,由于我们不能保证每笔交易都是发生在确定的用户之间,所以不管有没有人提出质疑,只要有人要退出交易就必须经历7到14天的等待期。这对一些需要立刻确认的交易极不友好。

3. Plasma的局限性——数据可用性问题(Data Availability Problem)

子链上的数据由矿工打包成区块以后,需要通过子链的运营商把区块的哈希值或者说区块头提交到主链作为确定最新状态的证明。这个运营商可以是一个中心化的组织,也可以是一个多重签名,或者一些更复杂的结构比如DPOS,POS等,具体形式根据每个子链的情况不同各不相同。一般为了提高子链处理和递交数据的速度,运营商常常采用中心化程度较高的形式,比如POA。正常情况下如果运营商(或矿工)创建了无效区块(invalid block,指包含无效交易的区块),这些区块会在先在子链中广播,然后区块头被提交到主链上。由于用户留有子链数据,他们可以创建了一个欺诈证明:即根据需要验证的交易,重建交易状态并计算这个状态的默克尔根。在这个过程中用户完成了对区块的验证,如果确认区块无效就会惩罚作恶方没收罚金。

还有一种数据不可用的作恶攻击:运营商创建了一个无效区块并把区块头提交到主链上,但不把区块传播到子链中。因为没有这个区块的链下数据,用户无法验证这个区块的是否有效,这就是数据可用性问题。Plasma相当于只把考试分数放到链上,答案和草稿都在链下。当我们怀疑打错分的时,自然想要去查试卷,却因为不知道试卷的题目和考生写的答案,也不知道草稿里的计算过程,而无从查起——无法查到到底是哪道题批改除了问题。Plasma MVP试图通过采用和比特币一样的UTXO交易模型解决这个问题。但它的缺点也很明显,拓展性差,只能用比特币的脚本语言,很难像在以太坊上那样运行DAPP。为了解决数据不可以用问题,Plasma反而变的不太通用,无法适应需要高级语言的智能合约。

4. Plasma的其他局限

综合来看,Plasma改良了状态通道对用户的限制,使任何用户都可以向另一个用户发送资金。缺点是退出机制复杂,等待期太长,而且仅仅适合一些转移支付的场景,不适用于智能合约。为了解决这些问题,Rollup被提了出来。从2019年开始Plasma似乎陷入了发展瓶颈,鲜少被以太坊社区提起, 连曾经的Plasma Group也转头去研究Optimistic Rollup,看起来Plasma已然大势已去。

Rollup——为了解决数据可用性问题应运而生

Plasma是一种“完全链下“的方案,它试图把数据和计算都移到链下,但却因此出现了数据可用性问题。Rollup改良了这一点,将每次转账的部分数据保留在链上(这些数据包括账户余额,合约代码等),仅把计算和状态储存放到链下。类似把考试分数和试卷上的题目、答案都放在链上,草稿的演算过程放到链下(就像我们日常生活中的考试一样)。这样当我们怀疑分数有错时可以查阅试卷看看到底那道题批改错了。Rollup和“完全链下”的方案相比放在链上的数据变多了,对以太坊的扩容也就相应的变弱了;但它依然能大幅降低费用,提高吞吐量。

1. Rollup的工作原理

Rollup和Plasma一样,也是利用默克尔树和子链结构来构建,如图片2和图片3。

图片2 Rollup的工作过程1

来源:An Incomplete Guide to Rollups:https://vitalik.ca/general/2021/01/05/rollup.html

如图2所示,链上的智能合约会包含一个状态根0x1345f7,这个状态根是Rollup状态的默克尔根。默克尔树并不储存在链上,但是这个默克尔树可以通过链上数据重新计算得出。

图片3 Rollup的工作过程2

来源:An Incomplete Guide to Rollups:https://vitalik.ca/general/2021/01/05/rollup.html

任何人都可以发布一个交易批次,这个交易批次包含一系列高度压缩的交易,之前的状态根(pre-state root)和新的状态根(post-state root)。类似于电脑上的压缩文件,交易都被打包压缩后上传到链上,这也是Rollup名字的由来。如图3所示,新的状态根是指处理完交易之后的默克尔根,而每个交易里除了状态根还包括一些转账数据足够我们更新状态了,尽管这些数据不包括20字节的地址,每笔转账的签名之类的信息。正是这些信息的上链才避免了像Plasma那样的数据可用性问题,下面对图4和图5做一些标注来表明Rollup和Plasma之间的区别。接下来智能合约会检查交易批次里的前一个状态根是否和自己的状态根一致,如果一致就把自己的状态根变更为新的状态根。如图3中Rollup contract 的状态根会变更为0xbc892f。

图片4 Rollup的工作过程1——标注:哪些数据在链上哪些数据在链下

图片5 Rollup的工作过程2——标注:与Plasma的区别和联系

2. Rollup怎么防止作恶——两种处理方法衍生出ZK Rollup和Optimistic Rollup两种方案

虽然解决了数据可用性的问题,还需要注意作恶的可能,即交易批次中提交的新状态根不正确。这样任何人都可以伪造新的处理状态,他就可以随意的把代币转给自己而不需要承担任何后果。针对这个问题,提出了两种解决方案,代表了Rollup的两种类型,ZK Rollup和Optimistic Rollup。

ZK Rollup通过有效证明防止作恶

ZK Rollup的每个交易批次都包含零知识证明*(ZK-SNARK证明),它可以证实新状态根是交易批次正常执行的结果。无论有多大的计算量,这个证明都可以快速在链上得到验证。这种方式证明了以太坊区块的有效性,又被称为有效性证明(Validity Proof)。

*零知识证明:

一般情况下,一方要向另一方证明自己拥有某个情报,需要向对方公开情报的信息,但这可能会造成情报泄露。零知识证明可以允许在不公开情报内容的基础上,向对方证明自己拥有这个情报。

举例来说A要向B证明A有某个房间的钥匙,但又不能直接把钥匙展示给B看。B确定房间里有一个全世界独一无二的戒指,A只要把这个戒指给B看,就可以在不展示钥匙的前提下证明自己有房间的钥匙。

a. ZK Rollup的优点

零知识证明允许在不知道具体数据的情况下对某一信息验证,非常适合部分数据在链下的Layer2这一使用场景。ZK-Rollup正是基于这一技术发展出来的一种Layer2 Rollup方案,和Plasma相比省去了7到14天的等待期,因为交易批次在生成时就完成了对新状态根的验证,所以能无需等待即刻上链。如此一来,ZK Rollup只需要把与状态更新有关的信息放到链上(放到交易批次中),与验证有关的数据都可以放到链下。因此ZK Rollup每个交易批次中包含的数据更少,增加了Layer2的吞吐量和扩展性。

b. ZK Rollup的缺点

ZK Rollup也有它的缺点,最大的问题是零知识证明的证明过程非常复杂,一般的计算机无法胜任,这无疑中增加了中心化程度:只有那些有财力的大型企业才能用超级计算机做节点。也是因为证明过程复杂,零知识证明通用性很差,很难适应以太坊虚拟机(EVM)环境,因而无法适用于智能合约。目前阶段的ZK Rollup只能用于简单的支付场景。希望随着零知识证明技术进步,这些缺点能消失。

Optimistic Rollup通过欺诈证明防止作恶

Optimistic Rollup就和它的名字一样,先“乐观的”认为发布的区块信息都是正确的,再设立了一个”退款期”(withdraw period),只要在这个“退款期”内没有人提出异议这些信息就可直接发布在区块链上。如果在“退款期”内有人提出异议,这些人可以向链上提交证明,一旦验证了这个交易批次无效,网络将回滚交易批次并没收作恶者的罚金——这就是欺诈证明的过程。

它的原理是利用储存在链上的哈希值进行检查。由于交易都是以默克尔树的形式储存,这允许我们在不知道所有信息情况下就可以重构整个交易,因此我们根据链上信息重构的交易批次,并重新计算交易批次的新状态根。如果发现重构后交易批次的新状态根和链下提交上来的新状态根不同,就可以判定这次个交易批次存在欺诈。这和无状态客户端验证单个区块的方式相同,感兴趣的朋友可以另外查阅资料,在此不做展开了。

具体的执行过程是:Rollup合约会跟踪整个状态根的历史和每个交易批次的哈希值。任何人一旦发现某个交易批次有错误的新状态根,他就可以发布一个欺诈证明到链上。链上合约会验证这个证明,如果验证下来存在欺诈,网络会并回滚这个交易批次以及它之后所有的交易批次。

a. Optimistic Rollup的优点

显而易见,OptimisticRollup的欺诈证明、“退款期”这些思想完全继承自Plasma。不同之处在于它解决了数据可用性问题,这使得Optimistic Rollup在提高交易速率降低费用的同时,还完全适用于智能合约。因此,Optimistic Rollup是现在以太坊上呼声最高的Layer2解决方案。

b. Optimistic Rollup的缺点

和ZK Rollup相比,Optimistic Rollup需要把与状态根新和验证有关的数据都放到链上,因此它的拓展性和对吞吐量的提升程度最为有限,而且也需要7~14天的等待期。

c. Arbitrum——知名的Optimistic Rollup项目

我们来看一个OptimisticRollup的实列——Arbitrum项目。Arbitrum属于Optimistic Rollup技术,但它对“挑战期”(challenge period,与上文中的“退款期”,“争议等待期”等一个意思,“挑战期”是Arbitrum中的说法,Arbitrum有为期一周的“挑战期”)内处理争议的方式做了改进。Arbitrum使用一种多轮制交互的处理争议机制的方法,而Optimistic是采用单论制处理争议的方法。

比方说,当有人对试卷的分数提出质疑时,Optimistic会把整张试卷重新验算一边来验证有争议的分数。试卷代表交易批次,分数可以类比为交易批次的状态根。在Arbitrum中,当有人提出质疑时,会通过二分法协议缩小分歧点到某一个处理步骤,再发送证明核算这一步骤的正确性。这里的证明也被称作一步证明,如图6。

图片6 Arbitrum处理争议的方法

来源:https://developer.offchainlabs.com/docs/dispute_resolution

在Arbitrum中,当挑战者对分数提出质疑时,判卷人会问他:“你是觉得前50道题有错还是后50道题有错?”挑战者会说:“前50道题。”判卷人又会问:”是这里的前25道有问题还是后25道?”挑战者回答:“前25道。“以此类推最终会锁定在某一道题上,之后只要重新验算这一道题就好。

这种方式使一步证明的数据非常小,小到最多只要几百字节,只需消耗少量gas就能完成。当然和单轮制相比,多轮制意味着交易在Arbitrum花在确认争议上的时间比Optimistic要长。在实际运行中,不是把试卷划分成两份质疑,而是划分成K份。假设每个试卷上有N道题(执行了N个指令),这样划分过后争议规模就缩小到N/K,能大大缩短处理争议的时间。Optimistic Rollup要链上验证“整张试卷”,所以它没法处理大于以太坊gas限制的交易;而Arbitrum会把大交易分解到某一具体的步骤做链上验证,所以它可以处理超过以太坊gas限制的大交易。

Layer2的无奈妥协

现在梳理一下以上的Layer2技术。

状态通道:只能用于小额支付,不适用智能合约。通用性差,安全性和效率都还不错。
Plasma:适用于支付场景,不适用智能合约,有为期7到14天的提款等待期。通用性差,效率差。因无法解决数据可用性作恶的问题,安全性一般。目前Plasma的发展几乎停滞。
ZK Rollup:不适用智能合约,但链上验证迅速。通用性差,效率高,安全性好。
Optimistic Rollup:适用智能合约,有为期7到14天的提币等待期。通用性好,效率差,安全性好。因为上链的数据最多,对以太坊的拓展是最为有限的。但因其落地技术简单,完美兼容以太坊智能合约,是目前呼声最高的明星技术。

Layer2没有传说中那么安全

Layer2项目对外宣扬它们继承了以太坊的安全性,但这只是一个表象,实际上它们远没有号称的那么安全。Layer2这样宣传的理由是它们的记账由以太坊负责,所以账本安全性继承自以太坊。但事实是Layer2项目的记账过程是这样的:Layer2链交易->”递交信息”->以太坊记账。中间“递交信息”的这个环节往往由一些中心化程度较高的委员会或共识机制完成,这就造成“递交信息”这一步的安全性远低于以太坊,从而拖累了整个Layer2记账的安全。这个问题会在下一篇文章中具体说明,这里我们只要明白Layer2的安全性远低于以太坊就好,所谓继承以太坊的安全性只是一个假象。

我们会发现,没有一种技术可以做到在有良好通用性,安全性的同时还兼顾了高效率,总是存在顾此失彼的情况。可见技术的发展是一个不断妥协的过程,最终会找到一个适用我们生活场景的平衡点。

参考文献

[1] The DCSTriangle Decentralized, Consistent, Scalable. Pick any two.:https://blog.bigchaindb.com/the-dcs-triangle-5ce0e9e0f1dc

[2] StateChannels:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/state-channels/

[3] LightningNetwork:http://lightning.network/

[4] LightningNetwork Summary:https://lightning.network/lightning-network-summary.pdf

[5] LightningNetwork Technical Design Overview:https://lightning.network/lightning-network-technical-summary.pdf

[6] Time andBitcoin. Time and Bitcoin :https://lightning.network/lightning-network-presentation-time-2015-07-06.pdf

[7] JosephPoon, Thaddeus Dryja. The Bitcoin Lightning Network:

[8] ScalableOff-Chain Instant Payments. January 14, 2016 Daft Version 0.5.9.2

[9] Plasma:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/plasma/

[10] 深入理解Plasma(二)Plasma 细节剖析:https://zhuanlan.zhihu.com/p/46641217

[11] 深入理解Plasma(二)Plasma 细节剖析:https://zhuanlan.zhihu.com/p/47502211

[12] Plasma为什么不能成为真正的可扩展性解决方案:http://www.elecfans.com/blockchain/1161021.html

[13] DataAvailability problem in implementing Plasma design:https://medium.com/onther-tech/data-availability-problem-in-implementing-plasma-design-6e23df1a147f

[14] Why SmartContracts are NOT feasible on Plasma:https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598

[15] JosephPoon, Vitalik Buterin. Plasma: Scalable Autonomous Smart Contract. https://plasma.io/.August 11, 2017 working draft.

[16] Layer 2:公链本就不该追求性能 |链捕手:https://zhuanlan.zhihu.com/p/54248700

[17] ZK-Rollups:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/

[18] Zero-knowledgeproof:https://en.wikipedia.org/wiki/Zero-knowledge_proof

[19] OptimisticRollups:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/

[20] AnIncomplete Guide to Rollups:https://vitalik.ca/general/2021/01/05/rollup.html

[21] What’sup with Rollup:https://medium.com/offchainlabs/whats-up-with-rollup-db8cd93b314e

[22] 一文读懂L2强手Arbitrum 和 Optimism,同宗同源不同路:https://card.weibo.com/article/m/show/id/2309404657109013757989

[23] Arbitrum:https://arbitrum.io/

[24] HowArbitrum Rollup works:https://medium.com/offchainlabs/how-arbitrum-rollup-works-39788e1ed73f

[25] ArbitrumDeveloper Quickstart:https://developer.offchainlabs.com/docs/developer_quickstart

[26] Rant: Idislike the "Layer 2" term:https://www.reddit.com/r/ethfinance/comments/pdq2xp/rant_i_dislike_the_layer_2_term/has39wo/?utm_source=reddit&utm_medium=web2x&context=3

[27] Update,August 31st: Arbitrum One is now live! Bridging instructions here: ArbitrumBridge:https://www.reddit.com/r/ethereum/comments/peh166/arbitrum_one_faq/

希望大家可以关注微信公众号更加方便交流。公众号的文章也会率先更新~

相关文章:

区块链Layer2真能化腐朽为神奇吗https://blog.csdn.net/NewBlockChain/article/details/123100815

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/943610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存