以太坊扩容漫谈

这两天看了下以太坊扩容相关文章,囫囵吞枣、不甚理解。

简单写下小结,权当学习资料汇总了,欢迎一起探讨。

背景

区块链诞生之初的一个愿景就是去中心化,要实现这一目标就需要更多节点参与到区块链的共识中来。

考虑到不同设备的计算水平不同,区块链节点类型大致可以分成三类:全节点、轻节点SPV节点

我们知道每个区块由区块头和这个区块所有的交易数据组成,这三种节点的区别就在于:

  • 全节点:验证所有区块的全部数据并存储的完整节点;
  • 轻节点:仍需下载验证区块的全部数据,只需存储部分数据;
  • SPV节点:只需验证并存储区块头数据。

PS:

扩容方案

有了上面的背景知识,接下来学习下以太坊的扩容方案。

为了解决日益严重的交易费和吞吐量低下问题,以太坊的扩容途径主要有两种:

  • 直接提高区块链交易吞吐量
    • 增大区块容量,区块验证对节点设备要求提高,逐渐变得中心化;
    • 缩短区块产生时间,分叉概率提高。
  • 重构以太坊架构
    • 分层
      • State channels
      • Plasma
      • Rollup
    • 分片
      • Sharding
      • Danksharding && crList

PS:

个人认为 POW 转向 POS 的共识机制,并非是要提升交易吞吐量,而是出于环保、安全等方面的考虑。

推荐阅读:

分层

方案一显然是不可取的,对于方案二,我们先了解下分层的概念:

不必将所有交易放在以太坊主网上,而是在 Layer2层执行大部分交易;L1层只需执行两个任务:处理存取款和验证L2交易的有效性,减轻L1负担,提高交易处理效率。

分层的方案大致可以分为三类,前两种是「完全的」Layer2 方案,它们试图将数据计算都转移至链下,但由于 owner 问题,无法兼容所有的EVM应用;

而Rollup 是一种「混合」的 Layer2 方案,将计算以及状态存储转移至链下,但同时将每笔交易的部分数据保留在链上。

推荐阅读:

数据可用性(DA)

那么问题来了: SPV节点如何知道区块头的数据是正确的呢?又要如何验证Rollup数据的置信度呢? 这便是数据可用性问题。

解决方案主要有两种:

  • 欺诈性证明:依赖于随机采样证明或可信节点的警报;
  • 有效性证明:数据中就包含有相关证明

Rollup因此也分为两类:

  • Optimistic rollup,采用欺诈性证明,惰性计算,优化计算性能;
  • ZK rollup,采用有效性证明,只需压缩后的相关证明,优化存储性能

由于目前 ZK proof 计算成本高,趋于中心化。因此前期 Optimistic rollup 可能占有一定优势,随着 ZK proof 算法的优化,ZK rollup 应该会逐渐成为主流。

推荐阅读:

欺诈证明

欺诈证明主要依赖于 SPV节点全节点 两部分。

对于全节点来讲:

  • 通过激励来鼓励它们举报坏家伙们
  • 通过惩罚来限制它们进行警报的DOS攻击

但有时全节点是无法确定是欺诈的,比如矿工广播区块头和tx1外的所有交易数据,由于不可归因的性质,全节点无法证明tx1不可用。

利用纠删码技术,我们可以将 n 块数据扩展为 2n 块数据,任意的 n 块数据都可以恢复原始数据块。除非矿工隐藏一半以上的数据,否则全节点可以保证能拿到所有数据。

对于SPV节点来讲:

  • 通过历史数据等验证区块头数据的正确性(如无效、双花等问题)
  • 通过随机采样等验证全节点知道该区块头对应的所有交易数据

推荐阅读:

有效证明

上面提到了通过纠删码技术,可以避免矿工隐藏某些交易,但这项技术仍需要依赖一个可信的全节点; 而且如果优化不好,一些欺诈证明的大小可能与区块本身的大小差不多,这个问题可以采用多维纠删码技术来改进。

而通过 KZG的多项式承诺,我们可以生成一个有效性证明,从而使SPV节点跳过欺诈证明。

当然除此之外,还有Coded Merkle Tree、Coded Interleaving Tree、FRI等技术。

推荐阅读:

分片

分片就是将主链拆分成多个拥有单独共识机制的分片,全节点无需再同步验证所有交易数据,只需处理分片内的交易。同时为了保证安全性,信标链(Beacon)每隔一段时间会将验证者随机分配给各个分片。

Danksharding 区别于传统的分片技术,首先采用PBS(proposer builder separation)策略将 proposer 和 builder 分离,来避免矿工(既是 proposer 又是 builder)审查交易内容,获取MEV。

传统分片技术中,每个分片都有各自的 proposer 和 builder,每个分片打包的 shard block 聚合成最终的 execution block。当有一个 shard block 作恶不可用时,整个execution block都会不可用。

Danksharding 架构中,每个分片的 proposer 只需要广播可执行交易,由执行层的 builder 同时负责打包 shard block 和 execution block。

crList(Censorship resistance)类似于 flashbot,可以确保区块按 proposer 提交的交易列表打包,以免 builder 任意审查交易数据,获取MEV;与后者的区别在于 crList 是公开的交易列表。

推荐阅读:

Subscribe to kutugu
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.