内容
我们于 2022 年开始构建 Reth,为以太坊 L1 提供复原能力,并解决 L2 上的执行层扩展问题。
今天,我们很高兴与大家分享 Reth 在 2024 年如何实现 L2 每秒 1 GB Gas,以及我们超越这一目标的长期路线图。
我们邀请生态系统与我们合作,推动加密领域的性能和严格基准测试的前沿发展。
加密货币要达到全球规模并避免投机成为主要用例,有一条非常简单的途径,即让交易变得便宜且快速。
性能通常通过“每秒事务数”(TPS) 指标来衡量。特别是对于以太坊和其他 EVM 区块链来说,更细致、或许更准确的衡量标准是“每秒的 Gas 量”。该指标反映了网络每秒可以处理的计算工作量,其中“gas”是衡量执行交易或智能合约等操作所需的计算工作量的单位。
将每秒Gas量作为性能指标进行标准化可以让我们更清楚地了解区块链的容量和效率。它还有助于评估对系统的成本影响,防止可能利用不太细致的测量的潜在拒绝服务 (DOS) 攻击。该指标有助于比较不同以太坊虚拟机(EVM)兼容链的性能。
我们建议 EVM 社区采用每秒 Gas 作为标准指标,同时纳入Gas定价的其他方面,制定综合性能标准。
每秒的 Gas 量是通过将每个区块的目标 Gas 使用量除以区块时间来确定的。在这里,我们展示了各种 EVM 链 L1 和 L2 的当前每秒 Gas 吞吐量和延迟(并非详尽无遗):
我们强调每秒 Gas 来全面评估 EVM 网络性能,捕获计算和存储成本。 Solana、Sui 或 Aptos 等网络由于其独特的成本模型而未包括在内。我们鼓励努力协调所有区块链网络的成本模型,以实现全面和公平的比较。
我们正在开发一个用于 Reth 复制真实工作负载的连续基准测试套件,如果您想就此进行合作,请联系我们。我们需要一个用于节点的TPC 基准。
2022年,我们构建 Reth 的部分出于迫切需要专门为网络规模的汇总构建客户端的原因。我们认为我们的前进道路充满希望。
Reth 在实时同步期间已达到 100-200mgas/s(包括发送方恢复、执行交易以及计算每个块上的 trie);所以,需要再扩展 10 倍才能实现我们每秒 1GB gas 的短期目标。
随着我们推进 Reth 的开发,我们的扩展计划必须在可扩展性与效率之间取得平衡:
我们在这里探索的优化不涉及解决状态增长,我们正在单独研究这一点。
以下是我们打算如何实现这一目标的总体计划:
在整个堆栈中,我们还使用参与者模型针对 IO 和 CPU 进行优化,以允许将堆栈的每个部分部署为服务,并对其利用率进行精细控制。最后,我们正在积极评估替代数据库,但尚未确定候选数据库。
我们的目标是最大限度地提高运行 Reth 的单个服务器或笔记本电脑的性能和效率。
在以太坊虚拟机(EVM)等区块链环境中,字节码执行通过解释器进行,解释器顺序处理指令。此方法会带来开销,因为它不直接执行本机汇编指令,而是通过 VM 层进行操作。
即时(JIT)编译通过在执行之前将字节码转换为本机机器代码来解决这个问题,从而绕过了虚拟机的解释过程,提高了性能。这种技术提前将合约编译成优化的机器代码,在 Java 和 WebAssembly 等其他虚拟机中得到了广泛应用。
然而,JIT 可能容易受到旨在利用 JIT 进程的恶意代码的攻击,或者可能在执行过程中速度太慢而无法实时运行。Reth 将提前(AOT)编译需求最高的合约并将其存储在磁盘上,以避免不受信任的字节码试图在实时执行期间滥用我们的本机代码编译步骤。
我们一直在为 Revm 开发 JIT/AOT 编译器,目前正在与 Reth 集成。完成基准测试后,我们将在未来几周内将其开源。平均大约 50% 的执行时间花在 EVM 解释器上,因此这应该会提供大约 2 倍的 EVM 执行优化,尽管在一些计算量较大的情况下,它可能会产生更大的影响。未来几周,我们将在 Reth 中分享我们自己的 JIT EVM 的基准测试和集成。
并行以太坊虚拟机(并行 EVM)的概念可以实现同步事务处理,这与 EVM 的传统串行执行模型不同。我们有两条实施道路:
根据我们的历史分析,约 80% 的以太坊存储插槽是独立访问的,这意味着并行性可以使 EVM 执行速度提高高达5倍。
我们最近写了关于状态根对性能的影响以及 Reth 数据库模型与其他客户端之间的差异,以及它的重要性。
在Reth模型中,计算状态根是与执行交易不同的过程(查看我们的代码),允许使用标准 KV 存储,而无需了解有关 trie 的任何信息。目前,这需要>75%的端到端时间来密封一个区块,并且是一个非常令人期待的优化领域。
我们确定了以下 2 个“易于完成的任务”,它们可以使我们的状态根性能提高 2-3 倍,而无需更改任何协议:
除此之外,我们还看到了一些与以太坊 L1 状态根行为不同的前进路径:
这里有几个问题:
我们将在 2024 年全年执行上述多项要点,并实现 1gigagas/秒的目标。
然而,纵向扩展最终会遇到物理和实际的限制。没有任何一台机器能够满足全世界的计算需求。我们认为这里有两条路可以让我们随着更多负载的到来而引入更多的“盒子”来进行扩展:
如今的 L2 堆栈需要运行多个服务来遵循该链:L1 CL、L1 EL、L1 -> L2 派生函数(可能与 L2 EL 捆绑在一起)和 L2 EL。虽然这非常适合模块化,但在运行多个节点堆栈时这会变得复杂。想象一下必须运行 100 次汇总会怎样!
我们希望允许在与 Reth 相同的流程中启动汇总,并将运行数千个汇总的运营成本降低到几乎为零。
我们已经与我们执行扩展项目 ([1],[2])一起着手进行这项工作,未来几周将有更多内容。
高性能排序器可能对单个链有足够的需求,需要扩展到单个机器之外。这在当今的整体节点实现中是不可能的。
我们希望允许运行云原生 Reth 节点,将其部署为服务堆栈,可以根据计算需求自动扩展,并使用看似无限的云对象存储来实现持久性。这是 NeonDB、CockroachDB 或 Amazon Aurora 等无服务器数据库项目中的常见架构。
早起我们团队分享了关于解决这些问题的想法。
我们打算逐步向所有 Reth 用户推出此路线图。我们的使命是让每个人都能享受 1 gigagas/s 及以上的访问速度。我们将在 Reth AlphaNet 上测试我们的优化,我们希望人们使用 Reth 作为 SDK 来构建优化后的高性能节点。
有些问题我们还没有找到答案。
对其中许多问题,我们都没有答案,但我们有足够多的有希望的线索,这能让我们探索一段时间,并希望在未来几个月看到这些努力能取得成果。
内容
我们于 2022 年开始构建 Reth,为以太坊 L1 提供复原能力,并解决 L2 上的执行层扩展问题。
今天,我们很高兴与大家分享 Reth 在 2024 年如何实现 L2 每秒 1 GB Gas,以及我们超越这一目标的长期路线图。
我们邀请生态系统与我们合作,推动加密领域的性能和严格基准测试的前沿发展。
加密货币要达到全球规模并避免投机成为主要用例,有一条非常简单的途径,即让交易变得便宜且快速。
性能通常通过“每秒事务数”(TPS) 指标来衡量。特别是对于以太坊和其他 EVM 区块链来说,更细致、或许更准确的衡量标准是“每秒的 Gas 量”。该指标反映了网络每秒可以处理的计算工作量,其中“gas”是衡量执行交易或智能合约等操作所需的计算工作量的单位。
将每秒Gas量作为性能指标进行标准化可以让我们更清楚地了解区块链的容量和效率。它还有助于评估对系统的成本影响,防止可能利用不太细致的测量的潜在拒绝服务 (DOS) 攻击。该指标有助于比较不同以太坊虚拟机(EVM)兼容链的性能。
我们建议 EVM 社区采用每秒 Gas 作为标准指标,同时纳入Gas定价的其他方面,制定综合性能标准。
每秒的 Gas 量是通过将每个区块的目标 Gas 使用量除以区块时间来确定的。在这里,我们展示了各种 EVM 链 L1 和 L2 的当前每秒 Gas 吞吐量和延迟(并非详尽无遗):
我们强调每秒 Gas 来全面评估 EVM 网络性能,捕获计算和存储成本。 Solana、Sui 或 Aptos 等网络由于其独特的成本模型而未包括在内。我们鼓励努力协调所有区块链网络的成本模型,以实现全面和公平的比较。
我们正在开发一个用于 Reth 复制真实工作负载的连续基准测试套件,如果您想就此进行合作,请联系我们。我们需要一个用于节点的TPC 基准。
2022年,我们构建 Reth 的部分出于迫切需要专门为网络规模的汇总构建客户端的原因。我们认为我们的前进道路充满希望。
Reth 在实时同步期间已达到 100-200mgas/s(包括发送方恢复、执行交易以及计算每个块上的 trie);所以,需要再扩展 10 倍才能实现我们每秒 1GB gas 的短期目标。
随着我们推进 Reth 的开发,我们的扩展计划必须在可扩展性与效率之间取得平衡:
我们在这里探索的优化不涉及解决状态增长,我们正在单独研究这一点。
以下是我们打算如何实现这一目标的总体计划:
在整个堆栈中,我们还使用参与者模型针对 IO 和 CPU 进行优化,以允许将堆栈的每个部分部署为服务,并对其利用率进行精细控制。最后,我们正在积极评估替代数据库,但尚未确定候选数据库。
我们的目标是最大限度地提高运行 Reth 的单个服务器或笔记本电脑的性能和效率。
在以太坊虚拟机(EVM)等区块链环境中,字节码执行通过解释器进行,解释器顺序处理指令。此方法会带来开销,因为它不直接执行本机汇编指令,而是通过 VM 层进行操作。
即时(JIT)编译通过在执行之前将字节码转换为本机机器代码来解决这个问题,从而绕过了虚拟机的解释过程,提高了性能。这种技术提前将合约编译成优化的机器代码,在 Java 和 WebAssembly 等其他虚拟机中得到了广泛应用。
然而,JIT 可能容易受到旨在利用 JIT 进程的恶意代码的攻击,或者可能在执行过程中速度太慢而无法实时运行。Reth 将提前(AOT)编译需求最高的合约并将其存储在磁盘上,以避免不受信任的字节码试图在实时执行期间滥用我们的本机代码编译步骤。
我们一直在为 Revm 开发 JIT/AOT 编译器,目前正在与 Reth 集成。完成基准测试后,我们将在未来几周内将其开源。平均大约 50% 的执行时间花在 EVM 解释器上,因此这应该会提供大约 2 倍的 EVM 执行优化,尽管在一些计算量较大的情况下,它可能会产生更大的影响。未来几周,我们将在 Reth 中分享我们自己的 JIT EVM 的基准测试和集成。
并行以太坊虚拟机(并行 EVM)的概念可以实现同步事务处理,这与 EVM 的传统串行执行模型不同。我们有两条实施道路:
根据我们的历史分析,约 80% 的以太坊存储插槽是独立访问的,这意味着并行性可以使 EVM 执行速度提高高达5倍。
我们最近写了关于状态根对性能的影响以及 Reth 数据库模型与其他客户端之间的差异,以及它的重要性。
在Reth模型中,计算状态根是与执行交易不同的过程(查看我们的代码),允许使用标准 KV 存储,而无需了解有关 trie 的任何信息。目前,这需要>75%的端到端时间来密封一个区块,并且是一个非常令人期待的优化领域。
我们确定了以下 2 个“易于完成的任务”,它们可以使我们的状态根性能提高 2-3 倍,而无需更改任何协议:
除此之外,我们还看到了一些与以太坊 L1 状态根行为不同的前进路径:
这里有几个问题:
我们将在 2024 年全年执行上述多项要点,并实现 1gigagas/秒的目标。
然而,纵向扩展最终会遇到物理和实际的限制。没有任何一台机器能够满足全世界的计算需求。我们认为这里有两条路可以让我们随着更多负载的到来而引入更多的“盒子”来进行扩展:
如今的 L2 堆栈需要运行多个服务来遵循该链:L1 CL、L1 EL、L1 -> L2 派生函数(可能与 L2 EL 捆绑在一起)和 L2 EL。虽然这非常适合模块化,但在运行多个节点堆栈时这会变得复杂。想象一下必须运行 100 次汇总会怎样!
我们希望允许在与 Reth 相同的流程中启动汇总,并将运行数千个汇总的运营成本降低到几乎为零。
我们已经与我们执行扩展项目 ([1],[2])一起着手进行这项工作,未来几周将有更多内容。
高性能排序器可能对单个链有足够的需求,需要扩展到单个机器之外。这在当今的整体节点实现中是不可能的。
我们希望允许运行云原生 Reth 节点,将其部署为服务堆栈,可以根据计算需求自动扩展,并使用看似无限的云对象存储来实现持久性。这是 NeonDB、CockroachDB 或 Amazon Aurora 等无服务器数据库项目中的常见架构。
早起我们团队分享了关于解决这些问题的想法。
我们打算逐步向所有 Reth 用户推出此路线图。我们的使命是让每个人都能享受 1 gigagas/s 及以上的访问速度。我们将在 Reth AlphaNet 上测试我们的优化,我们希望人们使用 Reth 作为 SDK 来构建优化后的高性能节点。
有些问题我们还没有找到答案。
对其中许多问题,我们都没有答案,但我们有足够多的有希望的线索,这能让我们探索一段时间,并希望在未来几个月看到这些努力能取得成果。