这两天看了下以太坊扩容相关文章,囫囵吞枣、不甚理解。
简单写下小结,权当学习资料汇总了,欢迎一起探讨。
区块链诞生之初的一个愿景就是去中心化,要实现这一目标就需要更多节点参与到区块链的共识中来。
考虑到不同设备的计算水平不同,区块链节点类型大致可以分成三类:全节点、轻节点和SPV节点。
我们知道每个区块由区块头和这个区块所有的交易数据组成,这三种节点的区别就在于:
PS:
有了上面的背景知识,接下来学习下以太坊的扩容方案。
为了解决日益严重的交易费和吞吐量低下问题,以太坊的扩容途径主要有两种:
PS:
个人认为 POW 转向 POS 的共识机制,并非是要提升交易吞吐量,而是出于环保、安全等方面的考虑。
推荐阅读:
方案一显然是不可取的,对于方案二,我们先了解下分层的概念:
不必将所有交易放在以太坊主网上,而是在 Layer2层执行大部分交易;L1层只需执行两个任务:处理存取款和验证L2交易的有效性,减轻L1负担,提高交易处理效率。
分层的方案大致可以分为三类,前两种是「完全的」Layer2 方案,它们试图将数据和计算都转移至链下,但由于 owner 问题,无法兼容所有的EVM应用;
而Rollup 是一种「混合」的 Layer2 方案,将计算以及状态存储转移至链下,但同时将每笔交易的部分数据保留在链上。
推荐阅读:
那么问题来了: SPV节点如何知道区块头的数据是正确的呢?又要如何验证Rollup数据的置信度呢? 这便是数据可用性问题。
解决方案主要有两种:
Rollup因此也分为两类:
由于目前 ZK proof 计算成本高,趋于中心化。因此前期 Optimistic rollup 可能占有一定优势,随着 ZK proof 算法的优化,ZK rollup 应该会逐渐成为主流。
推荐阅读:
欺诈证明主要依赖于 SPV节点 和 全节点 两部分。
对于全节点来讲:
但有时全节点是无法确定是欺诈的,比如矿工广播区块头和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 是公开的交易列表。
推荐阅读: