简析以太坊 Layer 2 技术方案及扩容特性

原文标题:《L2 – 理解和思考》撰文:Star LiLayer2 是个大的话题。是否去中心化,是否安全,资金状态确认时间是 Layer2 的主要的讨论话题。最近有点时间,总结一下 Layer2 的理解和思考。Layer2,相对于 Layer1,在 Layer1 的基础上提供更丰富功能,更好的用户体验。抽象一下 Layer2 的逻辑以及交互模型如下:简析以太坊 Layer 2 技术方案及扩容特性除了 Layer1 的交易外(入金),其他 Layer2 的交易都在 Layer2 执行。为了 Layer2 在必要时恢复交易状态,所有 Layer2 的交易数据需要安全存储。简单起见,也为了和 Layer1 保持一样的安全性,所有 Layer2 的交易数据一般存储在 Layer1。这种交易数据的随时可访问,称为 「Data Availability」(数据可用性)。所有的 Layer2 交易都在 Layer2 执行,并同步到 Layer1。如何证明 Layer2 同步的状态正确,不同的 layer2 方案有不同的实现方法。从 Layer2 状态同步方式,Layer2 分为两类:一类是侧链实现(Side Chain),一类是 Rollup。侧链,就是通过不同于 Layer1 的共识进行 Layer2 状态向 Layer1 的同步。仅从这一点,整个侧链的安全性,就降低到 Layer2 的共识的安全性。Rollup 又分为两种:一种是 zkRollup,一种是 Optimistic Rollup。所谓 Optimistic Rollup,乐观性 Rollup,期望绝大多数情况下 Rollup 正确向 Layer1 同步状态。同时,为了防止同步错误的状态,提供了挑战机制。乐观预计挑战的机率比较小。在需要挑战的情况下,Layer1 可以判断正确状态。zkRollup 是最直接的状态同步方式,通过零知识证明技术,在向 Layer1 提交状态的同时提供状态变化的证明。Layer 实现分类如下:简析以太坊 Layer 2 技术方案及扩容特性zkRollup,按照采用的零知识证明协议又分为三类:1/ Groth16 2/ PLONK 3/ STARK。Groth16 协议需要针对每一个电路进行初始设置 (Trusted Setup)。PLONK 协议在一定规模下的电路只需要一次初始设置。STARK 协议不需要初始设置。但是,相对另外两种算法,STARK 协议,证明数据量大,验证时间长。相对来说,在 Layer2 的场景下,PLONK 是目前广泛使用的算法。STARK 协议和 SNARK(Groth16/PLONK) 协议比较(来源于 Matter Labs 的 github 链接):简析以太坊 Layer 2 技术方案及扩容特性https://github.com/matter-labs/awesome-zero-knowledge-proofs总结一下,从安全性角度看,各种 Layer2 的排序如下:zkRollup,optimistic Rollup,侧链。从提现的时间也印证了安全性,zkRollup 的提现是分钟级别,其他两种方案,小时甚至是天级别。zkSync 是比较完善的 zkRollup 开源项目zkRollup,虽好,目前存在很大的缺陷:可编程性差。相对其他 Rollup 方案,zkRollup 方案多了 zk 证明系统。也就是说,在 Layer2 每个交易除了「执行」外,还需要生成证明,证明执行过程的正确性。熟悉零知识证明技术的小伙伴都知道,零知识证明的安全性在于「电路」的安全性。对于 Layer2,每种交易的处理「固化」为电路,电路逻辑完全公开。对应于每种电路,存在唯一的验证秘钥。验证秘钥用在 Layer1 验证状态证明。通过验证的状态证明,符合固化电路的逻辑。简析以太坊 Layer 2 技术方案及扩容特性关键就在于 Layer2 交易的执行和固化电路语义是否一致。公开电路就是一种共识方式,供所有人查阅电路逻辑。简单的说,为了实现 zkRollup,需要实现 Layer2 执行对应的电路。事实上,电路的实现相对复杂,没有高级语言,很多情况下都是手写 R1CS。进一步,为了利用 zk 证明系统,为了优化电路的实现,整个 Layer2 的状态经常优化为电路友好结构(merkle 树)。所以,zkRollup 的系统需要考虑电路的结构,从而约束了 Layer2 交易以及账户模型。细心的小伙伴可以发现,不管是 zksync/zkswap/loopring,都只实现了特定交易场景。反过来说,如果需要通过 zkRollup 支持 EVM 的交易执行,需要将 EVM 的交易抽象成电路友好的账户模型。这种抽象并不容易,再者,EVM 的描述电路可以预见比较大。从零知识证明的性能看,这方面会限制整个 zkRollup 的性能。再看看 zkRollup 方案在 Layer1 的 gas 消耗。整个 zkRollup 方案的主要 gas 消耗为三部分(withdraw 不考虑在内):以一个区块 350 笔交易,每个交易的 Transaction Raw Data 的大小为 20 字节为例,一个区块处理的 gas 消耗:简析以太坊 Layer 2 技术方案及扩容特性虽然上述的数据不是精确值,但是足以说明交易原始数据在整个 zkRollup 方案中的 gas 消耗占比是非常高的。从这个角度看,Layer2 的有些项目选择通过其他链下的方式存储交易数据。Optimistic Rollup 兼容 EVM。也就是说,Layer2 支持可编程性,并且在以太坊上的程序几乎无缝迁移。为了保证链上的状态正确,这两种方案都提供一段时间内的挑战机制。挑战者提供挑战的证据,Layer1 抉择正确与否。Optimism 采用 OVM 执行 Layer2 交易。取名 OVM 是为了区分 Layer1 的 EVM。因为提交到 Layer1 的状态需要检验正确性,Layer1 需要「重放」Layer2 的交易,也就是说,Layer1 在有些情况下需要执行 OVM 交易的执行。Optimistic Rollup 最复杂的地方也在于此,用 EVM 模拟 OVM,并执行 Layer2 的交易。可想而知,在 Layer1 的 EVM 模拟 OVM 的执行是比较繁琐,消耗较大的操作。Arbitrum 也是采用挑战机制。为了避免挑战的 gas 费用低,Arbitrum 引入了 AVM:简析以太坊 Layer 2 技术方案及扩容特性相对于 EVM,AVM 是一个相对简单的虚拟机。Arbitrum 在 AVM 虚拟机上模拟 EVM 执行环境。也就是说,所有的 Layer2 交易都是在 AVM 执行,交易的执行状态可以用 AVM 状态表示。在提交到 Layer1 的状态有分歧时,挑战双方(Asserter 和 Challenger)先将状态分割,找出「分歧点」。明确分歧点后,挑战双方都可提供执行环境,Layer1 执行相关操作确定之前提交的状态是否正确。在 Layer1 挑战的是 AVM 的状态,分歧点的 AVM 的指令执行。简单的说,为了省挑战的 gas 费用,Arbitrum 采用了精简的 AVM (非常方便状态表示),通过快速分割,在链上只需要执行一个指令,判断状态是否执行正确。Arbitrum 介绍文档中提到,整个挑战需要大概 500 字节的数据和 9w 左右的 gas。在 AVM 的基础上,Arbitrum 设计了 mini 语言和编译器,模拟了 EVM 的执行环境,从而兼容 EVM。Layer2,相对于 Layer1,在 Layer1 的基础上提供更丰富功能,更好的用户体验。资金状态确定性时长,安全性,可编程性是目前讨论的焦点。zkRollup 是资金状态确定性最快的方案。optimistic Rollup/ 侧链具有可编程性。zkRollup 支持 EVM 的证明是个期待的方向。

原创文章,作者:惊蛰财经,如若转载,请注明出处:https://www.xmlm.net/wang/6959.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注