不断妥协的Layer2发展史
时间:2023-02-01 10:00:00
众所周知,以太坊现在面临着拥堵费高的问题,Layer为解决这些问题而生。每一个新方案都是在旧方案的基础上提出的;此外,还发现Layer2的发展过程是一个不断妥协、寻找安全、通用和效率平衡的过程。本文不涉及具体的技术实现,原则上梳理了几种Layer2技术将与下一篇文章的侧链相结合Layer进一步探讨。
Layer2发展路径:状态通道->Plasma->Rollup
假设以太坊记账被视为考试,Layer一是把从打草稿、写答案到最后批改论文分数的过程放在链上。Layer以太坊只保留试卷分数,将部分过程放在链下。从发展过程来看Layer2.先后分为状态通道,plasma和Rollup,每一代技术都吸收了前一代技术的发展成果。
- 状态通道-继承比特币闪电网络
2016年比特币闪电网络Joseph Poon和Thaddeus Dryja在论文《The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments》中提出。状态通道的概念与闪电网非常相似,但状态通道不仅用于支付场景,也用于一般意义上的状态更新*”。
*状态更新:以太坊实际上是一台状态机器。以太坊上的每次转账都意味着以太坊账户和整个以太坊网络的状态发生了变化。因此,状态更新的应用范围比支付场景更广,如象棋游戏。在游戏中:A走一步棋,然后B走一步棋,然后轮到A走,依次往复。象棋游戏可以看作是A,B支付场景相互转账的拓展。
1. 状态通道的工作原理
AB将部分资金质押在智能合同中,然后A、B在通道存续期间,建立链下通道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