浅谈以太坊扩容
浅谈以太坊扩容⌗
这两天看了下以太坊扩容相关文章,囫囵吞枣、不甚理解。
简单写下小结,权当学习资料汇总了,欢迎一起探讨。
背景⌗
区块链诞生之初的一个愿景就是去中心化,要实现这一目标就需要更多节点参与到区块链的共识中来。
考虑到不同设备的计算水平不同,区块链节点类型大致可以分成三类:全节点、轻节点和SPV节点。
我们知道每个区块由区块头和这个区块所有的交易数据组成,这三种节点的区别就在于:
- 全节点:验证所有区块的全部数据并存储的完整节点;
- 轻节点:仍需下载验证区块的全部数据,只需存储部分数据;
- SPV节点:只需验证并存储区块头数据。
PS:
扩容方案⌗
为了解决日益严重的交易费和吞吐量低下问题,以太坊的扩容途径主要有两种:
- 直接提高区块链交易吞吐量
- 增大区块容量,区块验证对节点设备要求提高,逐渐变得中心化;
- 缩短区块产生时间,分叉概率提高。
- 重构以太坊架构
- 分层
- State channels
- Plasma
- Rollup
- 分片
- Sharding
- Danksharding && crList
- 分层
PS:POW和POS的主要区别不在于交易吞吐量,而是出于环保、安全等方面的考虑。
PS:POS机制是分片的基础,在POW中由于矿工不需要质押,很容易在分片中作恶,无法对矿工进行实际惩处;通过POS质押可以直接扣除作恶提议者的资金,确保分片的安全性。
分层⌗
方案一的缺点已经说明,我们下面来分析方案二,我们先了解下分层的概念:
不必将所有交易放在以太坊主网上,而是在 Layer2 层执行大部分交易;L1层只需执行两个任务:处理存取款和验证L2交易的有效性,减轻L1负担,提高交易处理效率。
分层的方案大致可以分为三类,前两种是「完全的」Layer2 方案,它们试图将数据和计算都转移至链下,但由于 owner 问题,无法兼容所有的EVM应用;
而Rollup 是一种「混合」的 Layer2 方案,将计算以及状态存储转移至链下,但同时将每笔交易的部分数据保留在链上。
PS:
数据可用性(DA)⌗
我们上面所说的这些交易验证都是基于SPV证明,那么问题来了,SPV节点如何知道区块头的数据是正确的呢?又要如何验证Rollup数据的置信度呢? 这便是数据可用性问题。解决方案主要有两种:
- 欺诈性证明:依赖于随机采样证明或可信节点的警报;
- 有效性证明:数据中就包含有相关证明
Rollup因此也分为两类:
- Optimistic rollup,采用欺诈性证明,惰性计算,优化计算性能;
- ZK rollup,采用有效性证明,只需压缩后的相关证明,优化存储性能
由于目前 ZK proof 计算成本高,趋于中心化。因此前期 Optimistic rollup 可能占有一定优势,随着 ZK proof 算法的优化,ZK rollup 应该会逐渐成为主流。
欺诈证明⌗
欺诈证明主要依赖于 SPV节点 和 全节点 两部分。
对于全节点来讲:
- 通过激励来鼓励它们举报坏家伙们
- 通过惩罚来限制它们进行警报的DOS攻击
但有时全节点是无法确定是欺诈的,比如矿工广播区块头和tx1外的所有交易数据,由于不可归因的性质,全节点无法证明tx1不可用。
利用纠删码技术,我们可以将n块数据扩展为2n块数据,任意的n块数据都可以恢复原始数据块。除非矿工隐藏一半以上的数据,否则全节点可以保证能拿到所有数据。
对于SPV节点来讲:
- 通过历史数据等验证区块头数据的正确性(如无效、双花等问题)
- 通过随机采样等验证全节点知道该区块头对应的所有交易数据
PS:
- https://polygon.technology/blog/the-data-availability-problem-6b74b619ffcc
- https://www.truthcoin.info/blog/fraud-proofs/
有效证明⌗
上面提到了通过纠删码技术,可以避免矿工隐藏某些交易,但这项技术仍需要依赖一个可信的全节点; 而且如果优化不好,一些欺诈证明的大小可能与区块本身的大小差不多,这个问题可以采用多维纠删码技术来改进。
而通过 KZG的多项式承诺,我们可以生成一个有效性证明,从而使SPV节点跳过欺诈证明。
当然除此之外,还有Coded Merkle Tree、Coded Interleaving Tree、FRI等技术。
PS:
分片⌗
分片就是将主链拆分成多个拥有单独共识机制的分片,全节点无需再同步验证所有交易数据,只需处理分片内的交易。同时为了保证安全性,信标链(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 是公开的交易列表。
PS: