Cover photo

聊一聊不同类型的以太坊L2

本文是v神文章《Different types of layer 2s》的中文译文,为了便于理解,我加了一些译注。由于本文是我第一次翻译,如果有不足还请指正海涵。英文原文请参见:

https://vitalik.eth.limo/general/2023/10/31/l2types.html

以下为译文正文:

     以太坊L2生态系统在过去一年中发展迅猛。特别是EVM rollup生态(比如Arbitrum, Optimism, Scroll, Kakarot和Taiko)进展迅速,L2的安全性有了很大的提升。除此之外,还有其他的一些进展,比如专注于侧链的团队也开始构建基于Rollup的项目(Polygon),一些L1项目也开始转向validium(Celo),还有一些全新构架的尝试(Linea, Zeth等)。最后还有一些“非仅限于EVM生态”的方案,比如zksync, Arbitrum Stylus, Starknet, Fuel等。

     伴随着生态越来越繁荣,L2项目也在各自朝着不同的方向演进。我断定这个趋势会继续下去,主要有以下几个原因:

  1. 一些完全独立于以太坊的L1项目正在尝试靠近以太坊生态,甚至有可能变成L2. 这些转变应该是逐步进行,而不是毕其功于一役。由于现在的rollup技术相比之下还不是十分成熟,直接一次性完成转变会带来可用性的下降。而等万事俱备后再做一次从头到尾的彻底转变,就已经太迟了。

  2. 一些中心化的项目希望给他们的用户更多的安全保证,并且正在尝试用区块链来实现这一点。在许多情况下,这些项目应该就像在上一个加密技术时代中采用“联盟链”的项目。实际上,他们可能只需要一个类似“中途屋”级别的去中心化实现(译注:我的理解,中途屋级别去中心化,指的是把中心化项目中,部分对安全要求高的业务拿出来做去中心化)。此外,这些项目通常有非常高的吞吐量,即使是rollup方案也满足不了他们高吞吐量的需求,至少短期内如此。

  3. 对于非金融类的项目,比如游戏或社交,想要去中心化的同时只想保留“中途屋”级别的安全性。拿社交项目来举例,项目中不同的业务部分需要不同的处理方式:新用户的注册这种高价值活动需要较高的安全性,所以应该在rollup来实现;但像发贴或投票这种高频且低价值的行为相比之下则不需要那么高的安全性。想一想,你发的一个贴子没了和你的帐户没了,哪个更让你抓狂。

     以上讨论有一个大的背景,以太坊原生用户很愿意支付rollup的交易费用(译注:那是因为相比之下主网交易太贵了),但非区块链用户(Web2)则十分不理解,因为他们已经习惯了不花钱。

     那么一个特定的项目应该怎么在Rollup, Validium和其它的各种系统中做选择呢?

Rollups vs validiums vs disconnected systems


     关于安全性与规模取舍的讨论有多个视角,其中一个视角可以描述如下:如果你的地址有一个在L1发行的资产,然后存入L2,再转移到你在L2上的地址,那么你能够将该资产转回L1的可能性有多大?(译注:可能性越大,安全性保证越高)

     与上述问题的一个相关问题是:技术上,不同程度的安全性保证有什么样的取舍?针对不同的系统方案,有如下内容:

译注:Rollup和Validium的主要区别是数据是否上L1.
译注:Rollup和Validium的主要区别是数据是否上L1.

     特别需要说明,这只是一个简化的分类。还有很多中间选项,比如Rollup和validium的混合方案,plasma和validium的混合方案。在整个L2的众多技术方案中,这类方案的安全性可以看作位于Rollup和validium之间。那么在众多的方案中,怎么选择合适于自己的呢?主要因素有以下两个:

  1. 以太坊主网级的数据可用性成本,随着技术的进展,这个成本会越来越低。即将到来的以太坊Dencun升级,可以提供每秒32kB的链上可用数据。在之后的几年里,随着full danksharding的实现,这个数据会逐步提升,最终达到1.3MB每秒。同时,数据压缩技术的进步也会带来进一步的提升。(译注:由于rollup方案需要将交易数据提交到以太坊主网,因此以太坊主网处理数据的能力就是rollup处理数据能力的上限。)

  2. 应用自己的需求:相对于应用出错,有多少用户能够承受较高的交易费用?在金融应用中,应用出错可能会导致较为严重的后果;游戏和社交应用有着海量用户和相对价值较低的用户行为。所以不同的应用需要做出不同的安全性权衡。

     值得一提的另一种部分安全保证方案:预确认。预确认是由Rollup或Validium中的一些参与者签名的消息,声明“我们证明这些交易按此顺序包含一个区块内,且交易执行后的状态根是这个值”(译注:这里的状态根应该是指数据状态的merkle tree root,可以简单理解为这些交易执行后区块链全部数据状态的一个快照,具体细节可以看官网对rollup的介绍)。这些参与者可能会签署一个与后来的实际情况不符的预确认,但如果他们这样做,他们的押金就会被烧毁。这对于像普通消费支付这样的低价值业务很有用,而像数百万美元的金融转账这样的高价值业务可能会等待一个由系统全部安全性支持的“常规”确认。

     预确认可以被视为另一个混合系统的例子,类似于上面提到的“Plasma / Validium混合体”,但这次是在具有完整安全性但高延迟的Rollup(或Validium)和一个安全级别低得多但延迟低的系统之间进行混合。需要低延迟的应用将获得较低的安全性,但可以与那些愿意为了最大安全性而接受更高延迟的应用共存于同一生态系统中。

去信任化地读取以太坊


     关于L2系统与以太坊的连接性,有一个很重要但较少被人考虑的是系统读取以太坊主网的能力(译注:就是数据与以太坊同步的能力)。比如以太坊主网发生回滚时系统也能回滚。为什么这个能力很重要呢?参见以下的情景:

译注:下面蓝色的为以太坊主网
译注:下面蓝色的为以太坊主网

     假设如上图,以太坊主网发生了回滚,可能是由于回滚了未最终确认的区块(译注:关于以太坊最终确认区块的介绍,可以参考这里),也可能是由于大量验证者离线导致主网长时间不能最终确认区块而进入不应期。上图中,在以太坊最左边的一个区块内,有人从以太坊向顶部的区块链存入了100ETH,然后以太坊发生了回滚,但顶部的链并没有随之回滚,而且还继续跟随以太坊回滚后产生的新区块,这就导致了以太坊已回滚失效的错误交易在顶部链依然有效。这种漏洞可能导致无锚印钞(上例中的100ETH),从而导致顶部链上的桥接ETH(应为全额保证)变为部分保证金。 有两种方法可以解决这个问题:

  1. 顶部链只读取已经最终确认的区块。

  2. 顶部链也随着以太坊主网一起回滚。

     两种方案都可以解决上述问题。第一种方案实现简单,但可能由于以太坊的不应期而不能正常运行。第二种方案实现难度较大,但保证了较高的可用性。

     去信任地阅读以太坊的能力十分重要,主要体现在两个方面:

  1. 它极大的减少了桥接资产的安全性隐患

  2. 它为抽象账户提供了安全保障。

     第一点已经取得了广泛的认同。第二点也十分重要,因为这意味着你有一个可变密钥的钱包,并且同时可以拥有多个跨链资产(译注,理解这一点有困难,需要先理解抽象账户)。

和以太坊建立桥接是否就拥有了validium级的安全性?


     假设顶部链最初是一个独立的链,然后有人在以太坊上布署了一个桥接合约。桥接合约只是一个简单的合约,它接受顶部链的区块头,提交给它的任何区块头都带有一个有效的证书,证明它已被顶部链的共识所接受,并将该区块头添加到一个列表中。应用程序可以在此基础上构建,实现如存取代币等功能。一旦这样的桥接建立起来,它是否提供了我们之前提到的任何资产安全保证?

post image

     到目前为止,还没有!原因有两个:

  1. 我们验证了区块被签名,但没有验证状态转换是否正确(译注:可以简单理解为交易确实是执行了,但是交易执行的结果并不保证正确)。因此,如果你在以太坊上发行了一个资产并存入顶部链,假如顶部链的验证者想做恶,他们可以签署一个无效的状态转换来窃取那些资产。

  2. 顶部链仍然没有办法读取以太坊。因此,为了将以太坊原生资产存入顶部链,你不得不依赖其他的第三方桥接。

     现在,让我们将桥接变成一个验证桥接:它不仅检查共识,还检查一个零知识证明(ZK-SNARK),证明任何新区块的状态是正确计算出来的。一旦完成这一步,顶部链的验证者就不再能够窃取你的资金了。他们可以发布一个数据不可用的区块,阻止所有人提款,但他们不能窃取。然而,我们仍然没有解决第二个问题:顶部链不能读取以太坊。要做到这一点,我们需要完成以下两件事之一:

  1. 在顶部链放置一个验证以太坊最终确认区块的桥接合约。

  2. 让顶部链中的每个区块包含一个最近以太坊区块的哈希,并有一个分叉选择规则来强制到以太坊区块的哈希链接。也就是说,以太坊主网发生区块回滚时,顶部链能够同步这样的变化。

    (译注,其实就是两种方案。第一种方案只接受最终确认的以太坊区块;第二种方案接受最新的以太坊区块,但是当以太坊主网发生回滚等异常处理时,顶部链需要同步进行处理)

post image

     这足够了吗?结果显示,仍然不够,因为还有一些边缘情况:

  1. 如果以太坊遭受51%攻击会发生什么?

  2. 你如何处理以太坊硬分叉升级?

  3. 你如何处理你的链的硬分叉升级?

     以太坊遭受51%攻击的后果与顶部链遭受51%攻击的后果类似,但方向相反。以太坊的硬分叉风险使得顶部链内部的以太坊桥接不再有效。我们需要一个社会承诺以保证顶部链会跟随以太坊的回滚和硬分叉,这是解决这个问题的最干净的方法(译注,这里的社会承诺应该指的是链下治理,参考v神把etc硬分叉为eth.)。对于第三种情况,唯一可行的答案是,在以太坊上有某种形式的治理小工具,可以使以太坊上的桥接合约意识到顶部链的硬分叉升级。

     总结:双向验证桥接几乎足以使一条链成为Validium。剩下的主要部分是社会承诺,如果以太坊发生了一些异常情况使得桥接不再工作,另一条链将作出硬分叉响应。

结论


     关于与以太坊的连接性主要有两个维度:

  1. 提现到以太坊的安全性

  2. 读取以太坊能力的安全性

     这两者都很重要,并且有着不同的考虑因素,综合考虑,见下图:

post image

     值得注意的是,这两个维度各有两种不同的测量方式(所以是有四个维度?):提现的安全性可以通过两个方面衡量(i)安全级别和(ii)有多少用户从最高安全级别中受益;而读取的安全性可以通过以下两个方面衡量:(i)读取以太坊主网区块的速度,特别是最终确定的区块与任何区块的区别,以及(ii)对处理边缘情况(如51%攻击和硬分叉)的社会承诺的强度。

     在这个方案众多的设计空间中,很多项目都有其价值。对于某些应用程序来说,高安全性和与以太坊主网紧密的连接性很重要。对于其他应用程序,为了更大的可扩展性,可以接受更宽松的方案(译注:指与以太坊更宽松的连接)。对很多应用来说最佳方案可能是,先使用连接较为宽松的方案,随着技术的改进而转向与以太坊连接更加紧密的方案。