# ETH Layer2分析

By [QF](https://paragraph.com/@qf) · 2023-09-05

---

什么是Layer2?
==========

Layer2是为了解决Layer1扩容问题提出的一个方案。Layer2是一个独立的区块链，它将Layer1上的部分数据转移到Layer2上进行处理，然后将处理后的结果在提交给Layer1进行上链。这样就提高了Layer1的处理速度，降低了手续费并且还继承了Layer1的安全性和去中心化。

### 以太坊为什么需要扩容？

随着以太坊生态的繁荣，以太坊一层网络已经无法承受这么大的数据量。当出现一些非常火的项目，大家都赶着参与，由于矿工会优先打包手续费高的交易，所以会导致这段时间手续费飙升。如果你交易的手续费给的低的话，那就有可能很长一段时间都不会上链。

下面是ETH的Gas Fee统计：

![](https://storage.googleapis.com/papyrus_images/bb8c5b8f88771fc365cfbac2b54997fbdc4767b2a24e7196414e399eae21eae1.png)

### 区块链不可能三角

既然以太坊拥堵了，那么能在以太坊上提升性能吗？那就要提到区块链不可能三角问题了，就是类似于分布式应用的CAP定理。不可能三角问题就是指一个Layer1项目中，不可能同时完全满足去中心化、安全性和扩展性。

*   去中心化：指的是节点的去中心化程度，节点越多，去中心化程度也就越高。
    
*   安全性：是指整个区块链网络的安全性，黑客攻击付出的成本越高，那么这个区块也就越安全。
    
*   可扩展性：交易处理的越快，成本越低，扩展性就越高。
    

区块链是去中心化，去中心化程度越高，就意味着节点越多，那么节点间的数据同步就会慢，导致可扩展性变低。这也就是为什么去中心应用要比Web2的中心化应用的处理速度慢的原因。

为了解决这个问题，现在有两种解决办法：

*   分片：在Layer1上进行改造，提高以太坊的处理速度
    
*   Layer2：用新的链来帮助以太坊提升处理速度
    

Layer2是公认主要的解决方案，分片只是辅助。这次主要讲解Layer2的方案。

Layer2 的扩容方案
------------

Layer2现在有以下方案：

*   侧链
    
*   状态通道
    
*   Plasma
    
*   Validium
    
*   Rollup
    

其中Rollup是目前认为解决以太坊扩容问题最好的方案。

### 侧链

从严格意义上来说，侧链并不属于Layer2，因为侧链是完整单独的一条链，并不会将执行结果回传到Layer1上，而是完全在自己的链上执行。其安全性也是由自身的链来保证，不像其他Layer2方案，安全性和去中心化是依靠以太坊。

基本的工作原理就是利用双向锚定机制(2WP)，首先如果我想在侧链上交易，需要先在主链上将100个ETH锁定，然后会将锁定信息发送给侧链，侧链收到消息后会在侧链上解锁比如100个WETH，这样我就在侧链有了对应数量的侧链币。在侧链经过一些交易后，我想回到主链，就需要将侧链币锁定，然后对应的主链上就会释放对应数量的ETH。

![](https://storage.googleapis.com/papyrus_images/ff51525826bd3c59ebaafb4e3461d6af092d284072915ec7412505af5d4da51d.png)

2WP又可以分为两种：

1.  中心化：就是将主链上的币发送到一个中介平台或者联盟平台，平台收到资产后再到侧链上解锁对应的侧链币。
    
2.  去中心：SPV是一个处理主链和侧链跨链安全性的方案。是将主链上的币发送到一个特殊地址，然后在锁定和解锁币时都设置了锁定期，必须要等待一段时间。在提高了安全性时，相比于中心化方案，速度肯定是逊色的。
    

**优势和缺陷**

优势：

1.  通过将大量交易转移到侧链中，大幅度提升了吞吐量。
    
2.  手续费更低。
    
3.  兼容性高，支持智能合约。
    

缺陷：

1.  相比于主链，去中心化低。
    
2.  依赖于侧链自身的安全性。
    

### 状态通道

状态通道就是将部分交易或者计算放到链下去执行，并不需要将中间的过程回传主链，只需要将最后的结果回传主链。就能避免中间过程占用大量资源和高手续费。

比如A和B两人想要进行多次的交易，起初都有50个ETH，如果不使用状态通道，那么每次交易都会消耗手续费。但是如果有了状态通道，可以通过一方打开状态通道，并且只需要在打开和关闭状态通道时付手续费。打开状态通道后，A先签名一笔交易声明转10个ETH给B，B拿到这个交易后也进行签名，也把签名后的数据发送给A。之后如果B想要给A转30个ETH，同样的先签名一笔交易声明转30个ETH给A。A拿到交易后也将签名后的数据发送给B。最后只需要将最终状态A有70个ETH，B有30个ETH提交给智能合约，然后付一笔关闭状态通道的手续费就可以了，不需要将中间的交易提交给合约。然后在等待一段时间后，确保两人没有异议，这次的状态通道就算成功关闭了。

之所以要等待一段时间，是防止其中有人作弊，比如最后B提交给合约自己有60个ETH。A就有时间可以提出异议，并将最新双方签名过的交易明细给智能合约。智能合约就能识别到B只有30个ETH并惩罚B。

**优势和缺陷**

优势：

1.  具有很高的隐私性，因为只需要将结果上传到链，不需要暴露中间过程。
    
2.  非常适合需要长时间多次交易的用户，能够省去中间的手续费成本。
    

缺陷：

1.  不适合交易频次低的用户。
    
2.  提币慢，因为需要等待一段时间确保状态通道正确关闭。
    
3.  依赖双方的状态，如果中间有一方掉线了，那么另外一方就可以作弊提交最终状态，并且掉线的一方如果在关闭状态通道等待期间没有提出异议，那么就会导致财产损失。
    
4.  存在流动性问题，在状态通道打开期间，资产是一直锁定在智能合约中的。
    

### Plasma

Plasma和侧链有非常多的相似之处，最大的区别就是Plasma利用了主链的安全性。Plasma将ETH称为“根链”，每个子链都由“根链”延伸而来，通常通过“根链”的智能合约来管理。

Plasma利用到了Merkle树，下面图片中就是一个Merkle树

![](https://storage.googleapis.com/papyrus_images/cffa1a4d231ac4d6a4e212aab43b6649cbb809c2a8b8c94278445bf10f833c09.png)

Merkle树中，每一个节点的值都由它下面紧邻的两个节点决定，所以root节点的值就能确定一个Merkle树。Merkle中任何一个节点的值变化了，都会影响到root节点。如果root值变化了，可以从上往下对比每个节点的值，就能最终找到变化的节点。

Plasma子链中进行的交易，最后都会生成一个root节点值，只会将这个值提交到“根链”中。不会提交中间的交易信息。

**优势和缺陷**

优势：

1.  提供高吞吐量和较低的每笔交易成本。
    
2.  适合任意用户之间的交易（如果双方的交易都建立在 Plasma 链上，则这个交易几乎没有成本）。
    
3.  减少主链负载
    

缺陷：

1.  不支持智能合约。
    
2.  需要依靠一个或者多个运营商来存储数据。
    

### Roll-up

Roll-up是目前最主流的扩容方案，和Plasma一样，也是将部分交易放到链下执行，然后再将执行结果传回到主链上，但是不同之处在于

*   roll-up也会将交易数据提交给主链
    
*   roll-up会每次会将交易按照批次打包，每批去更新到主链上
    
*   roll-up会最大限度压缩这些数据
    

所以，Rollup 的实质是将一大笔实际产生的交易汇总成一笔主链上的交易(其中包含交易生成的root hash)，这些交易由 Rollup 链来执行和计算，但会将数据提交给主链。这样既利用了主链的共识和安全性，同时提升了实际上的交易效率，降低了交易成本。

前面提到了roll-up也会将交易数据提交到主链，但是主链上一笔交易的大小是有限制的，为了能够提交更多的数据，roll-up会对交易数据进行压缩。

下面是一个压缩的例子

![](https://storage.googleapis.com/papyrus_images/2caab03cc22f9b191cd3fa231707827d5bcc9b865693b14d9957b9b6f1235e5b.png)

Nonce：在 rollup 中可以完全省略 nonce。因为完全可以从 pre-state 中恢复 nonce。

GasPrice：可以在每批中设置一个固定的费用水平，或者甚至将 gas 支付完全移到汇总协议之外，并让交易者通过渠道向批次创建者支付费用。

Gas：可以在 batch 层面设置 gas 限制，选择一些特定的值，

To：可以通过默克尔树上的索引来替换 20 字节的地址（例如，如果地址是添加到树中的第 4527 个地址，我们只需使用索引「4527」来引用它。就可以限制到 4 个字节

Value：钱数把单位改一下，或者用其他技术法来存储。

Signature：使用 BLS 聚合签名，将多个签名整合为一个。然后可以一次性地针对整个消息批次「batch」验证签名。因为每个区块中可验证的聚合的签名数量上限是 100，所以即使包含 100 笔签名的 大批次（batch）也能聚合成一笔签名。

通过上述的步骤，可以将一笔交易112个字节压缩到只有12个字节。

roll-up提交了数据到主链上，还需要验证数据的安全性，从而有两种解决办法：Optimistic Rollup和ZK Rollup

**Optimistic Rollup**

顾名思义，是乐观的认为提交的数据是合法的，允许在一段时间内(挑战期)让任何人进行验证

![](https://storage.googleapis.com/papyrus_images/d97beb3b90bd578c689b8267fe2f5d4f87dcbb4cb6182d5883410a8b56d28a6b.png)

为了威慑提交者不作恶，提交者往往需要质押资金，当他的提交被验证为错误时，一部分质押资金将会被扣除作为惩罚。同时，提交了相应欺诈证明的验证者会得到被扣除的押金，以此来激励监测和提交欺诈证明的行为。

验证交易的过程也叫做欺诈性证明，欺诈性证明也分为两种方式：

*   单轮交互型：将交易都放到主链上执行一次，得到一个root hash，再和提交的hash进行比较来判断是否合法。缺点是手续费会高一点。Optimistic利用了单轮交互型。
    
*   多轮交互型：会将整个默克尔树进行二等分，让验证者选择要选择验证哪一个部分，一直循环直到找到需要验证的交易，让后放到链上执行，在比较执行后的结果。缺点是验证期会长一点。Arbitrum 利用了多轮交互型的欺诈证明。
    

**ZK Rollup**

ZK Rollup利用到了零知识证明，ZK Rollup要求提交者提交Batch是多携带一个“有效性证明”，任何人可以通过“有效性证明”验证交易的合法性。

**Optimistic Rollup 和 ZK Rollup 的区别：**

*   速度：ZK Rollup要领先与Optimistic Rollup，它可以在几分钟内就从Layer1跨链到Layer2，而不像Optimistic Rollup需要等待几天的挑战期。
    
*   兼容性：Optimistic支持EVM智能合约，但是ZK Rollup方案也在积极的研发解决方案。
    
*   安全性：ZK Rollup的安全性更好。
    
*   成本：因为零知识证明需要大量的计算，所以ZK Rollup消耗的成本更高。
    

**Rollup 的优势和缺陷**

优势：

1.  更加安全。
    
2.  保证了数据可用性。
    

缺陷：

1.  Optimistic Rollup 方案的提币速度慢。
    
2.  ZK Rollup 由于开发难度更大，目前其尚未兼容 EVM。
    

**Reference**
-------------

[https://research.web3caff.com/zh/archives/7008?ref=372](https://research.web3caff.com/zh/archives/7008?ref=372)

[https://www.8btc.com/article/6783962](https://www.8btc.com/article/6783962)

---

*Originally published on [QF](https://paragraph.com/@qf/eth-layer2)*
