以太坊效能瓶颈与改善方案

以太坊的效能瓶颈

一条区块链由很多元件组成:共识、网路、交易验证,也因此有很多影响效能的因素。是达成共识的速度太慢?还是网路传输的速度太慢?还是交易验证的速度太慢?对以太坊来说,最大的效能瓶颈不是达成共识的速度,也不是网路传输的速度,而是交易验证的速度。

 

注:这个瓶颈也适用其他“EVM 兼容链”,不论你今天共识算法有多厉害、每秒可以达成多少 TPS,只要你交易验证包含 EVM 执行,你的整体效能就一定快不过 EVM 执行的速度。

如果不能调整协议参数,不如调整节点规格?

 

如果今天瓶颈是网路速度,那直觉就是假设节点网路速度要够快就好了;如果今天瓶颈是硬盘读取速度,那就假设节点都有够大够快的硬盘不就好了?但它们的代价都是一样的:越来越少节点能够符合规格,网路的节点就会越来越少、越来越中心化。

 

接下来要进入正题,介绍提升效能的其中一个方法:将交易执行从共识拆分出去。

将交易执行从共识拆分出去

 

为什么效能会被交易验证速度绑住?因为我们要亲自执行过每一笔交易,确认交易是合法的、别人的执行结果和我的执行结果是一样的,才收入这笔交易、这个区块,才达成共识。也就是共识和交易执行是绑在一起的。这就导致了即便你的共识算法一秒可以对 1000 笔交易达成共识,你实际上 TPS 却只有 100,因为你节点一秒就只能执行、验证 100 笔交易。

 

注:在意识到瓶颈出在 EVM 的效能后,当然最先想到的就是要换一个更快的 VM,也就是几年前还经常听到的 EWASM — Ethereum + WebAssembly,但后来研究方向已经转往其他地方

 

如果我们把共识和交易执行拆开:验证节点在收到一笔交易时不再执行该笔交易,而是单纯检查交易发起人有没有足够的钱来支付把他的交易资料收进区块里的费用。当节点不用执行交易,效能就不再受到交易执行的限制,也就是 EVM 的限制。在这个模型下,PoW 矿工或 PoS 验证者都可以专注在对“交易资料”达成共识,不需烦恼“交易执行”,这时候 TPS 就只受限于共识达成的速度或是网路传输的速度。

 

单纯对“资料”达成共识,而不是对“执行结果”达成共识。

 

你可能会觉得很奇怪,如果节点都不执行交易,谁来告诉我,我刚刚拿 300 USD 到 Uniswap 上去换,到底换到多少 ETH?其实这样的模式并不是要套用在目前你熟悉的以太坊执行层(原名 Eth1)中的。在介绍这样的模式要怎么实现之前,先快速复习一下 Sharding 和 Rollup。

Sharding

 

在 Sharding(以太坊升级的其中一部分)中,Beacon Chain(以下简称 BC) 的区块会收入各条 Shard Chain(以下简称 SC)的区块资讯,所以当 BC 验证者对 BC 的区块达成共识,也就同时对 SC 的区块达成共识。

Rollup

Rollup Sequencer 把交易打包送到 L1 上,利用 L1 的安全性,确保交易的排序。只要 L1 没有被攻击、没有 re-org,就可以确定交易顺序没有改变。只要确定了交易顺序,任何人都能独自算出当前 Rollup 的状态。

 

假设初始状态是 A 有 10 元,B 有 5 元,C 有 0元,你知道目前有三笔交易且交易排序是:

Tx1: A →$5 → C

Tx2: B →$2 →A

Tx3: C →$3 →A

则你一定可以算出最新的状态是 A 有 10 元,B 有 3元,C 有 2 元。 

 

虽然 Rollup 并不是真的将共识及执行拆开(Rollup 的 Sequencer 还是要执行过交易才会决定要不要把交易收进区块),但有一个相似的地方是:Rollup 的交易对 L1 来说是没有意义的。L1 验证者只负责收入 Rollup 交易进区块里而不会实际执行它,Rollup 节点才会挑出属于他 Rollup 的交易并执行。

Sharding + Rollup

 

Shard Chain 将会成为放置 Rollup 交易资料的链(如同今天 Rollup 的交易是放在 L1 区块里),再由 BC 对 SC 区块达成共识,确保 SC 区块里的交易排序。Rollup 再从 SC 区块中挑出自己的交易来执行。

Execution Environment / Execution Layer

 

从 Sharding 和 Rollup 的例子可以看到,BC 或 L1 的验证者是针对资料(Data)达成共识,他们不会去解读这些 Data,而是交给 Rollup 自己去解读。Rollup 的角色在这个模式里就称为 Execution Environment 或是 Execution Layer:负责解读 Data,例如把 Data 解读成一笔 Uniswap 交易然后执行。

 

不同 Rollup 有各自的协议设计:Optimism 有自己的 VM、自己的收费方式,Arbitrum 也是,StarkNet 也是,zkSync 也是,但他们都是透过 L1 的安全性来确保交易顺序,再以各自的协议去依序解读 Data、执行交易。他们各自的协议就如同不同的 Execution Environment。

 

回到前面提到的问题:谁来告诉我我的 300 USD 在 Uniswap 上换到多少 ETH?答案是 Rollup 节点而不是 L1 节点或 SC 节点,因为在共识和交易执行拆分的设计架构下,L1 或 SC 只是用来存放资料的。

 

准备好了吗?点击链接进入 Learn and Earn