Starknet和zkSync 详细比较分析

  • 张小风
  • 更新于 2024-03-07 20:39
  • 阅读 694

本文从各维度详细对比 Starknet和zkSync, 如两者验证成本构成与差异、每个用户操作的差异与操作成本、分析 Rollup 的收益及 DA 成本,思考在 4844 升级后,可能给谁带来更多的收益。

img

Starknet和zkSync:比较分析

作者 Eli Barbieri Jorik Schellekens

介绍

过去两年,以太坊Rollup领域取得了重大进展。有效性Rollup,也称为ZK-Rollup,在最近几个月已成为高度竞争、实用且廉价的Layer2解决方案。此外,随着即将到来的Dencun硬分叉和数据块blob(EIP-4844)的实施,了解在以太坊主网上验证有效性证明的过程和成本是至关重要的。

如果您还不熟悉Rollup,我们建议阅读这篇Matter Labs团队的深入分析文章。

img

图1 — 每日Rollup Gas消耗

特别是Starknet和zkSync Era已成为突出的竞争对手,通常能够匹敌甚至超过以太坊主网上执行的用户操作数量。本文的目标是准确比较它们的系统在交易量、相对计算和压缩效率方面,深入探讨Layer1验证成本、Layer2交易以及Layer2上的资源消耗等方面。它们之所以被选择,是因为它们是最大的Layer1 gas消耗者,具有现成的分析基础设施;Linea和Scroll将留待未来的研究。

接下来的章节将详细分析提交证明和状态数据上链所涉及的成本。我们将剖析负责此过程的Layer1智能合约,并评估每笔交易的平均链上验证成本。

此外,我们将预测EIP-4844对这些成本的影响,突出哪个链可能会从此升级中受益更多。最后,我们将讨论比较这两个网络真正可扩展性的各种技术,力求对它们的效率进行平衡和细致的比较。

背景

用户操作与交易

Starknet处理交易的方式与主流的EVM兼容链不同。在我们后面的分析中,我们将专注于用户操作(UserOperation),而不是分析Starknet的交易量,这是由 bartek.eth 定义的。用户操作代表用户想要执行的“标准”操作,包括代币转账、代币交换、铸造或投票。

img

Starknet 0.2 — 用户操作 vs 交易

在大多数EVM兼容链上,每个操作都作为单个交易发送。当账户抽象可用时,用户将操作捆绑到单个交易中。在Starknet上,这被称为多次调用(multi-call)。由于这种差异,直接的“以交易为单位”的比较,例如每秒交易数(TPS)的比较,低估了具有原生账户抽象的Rollup的性能。

例如,zkSync Era上大约20%的所有交易是ERC20 Approve交易,而在Starknet上几乎所有Approve交易都被捆绑在一起。实际上,相同一组用户和操作在Starknet上发出的TPS要少20%。

在比较Starknet和其他链之间的交易负载时,我们使用“UserOperation”指标(缩写为UOP或UOPS)。

有效性Rollup的流行度

目前,有效性Rollup在几个方面已经完全具备竞争力,并且与以太坊主网相媲美。以太坊平均每天有约550,000个合约调用交易(不包括原生ETH转账)。Starknet的交易量变动更大,但其平均每日用户操作量略高于以太坊。zkSync Era呈现出类似的情况,具有高度的变化性,交易量经常超过以太坊主网的交易量。

img

图3 — 每日用户操作和交易量

在上图中,zkSync Era的每日交易在2023年12月16日达到历史最高水平,这是由于大量BRC-20铭文被铸造。

对比分析使用的方法

Rollup数据和回填范围

我们利用zkSync Era的zks_getL1BatchDetails RPC方法来检索主网交易哈希,以获取提交、证明和执行交易的范围。使用zks_getL1BatchBlockRange,我们获取每个批次中包含的L2区块范围。

在第330,981批次,zkSync Era进行了证明者升级,重新部署了L1验证合约,并从基于Plonk的证明系统转换为更新的Boojum系统。zkSync Era数据分为两个数据集:过渡期前批次的Plonky数据和升级后批次的Boojum数据。

为了追踪Starknet的证明批次,我们追踪以太坊上的verifyProofAndRegister交易。通过这些追踪,我们可以检查isValid(fact)调用并为每个证明生成事实列表。一旦生成了列表,我们可以直接将组件交易与它们所属的批次进行匹配。对于数据可用性(DA)交易,验证事实可以通过日志获得。在随后的步骤中,我们利用状态差异来检测每个交易记录的事实。最后一步是将状态转换事实与updateState事件进行匹配,该事件提供了L1消息成本和每个批次的L2区块列表。

最早的Starknet批次使用不同的数据格式。为简单起见,我们的Starknet数据省略了前面的约300个批次。同样,zkSync Era最初的几个月使用了单独的验证架构;为简单起见,我们省略了前100,000个批次。对于Starknet,数据在第368到3,966批次之间进行了回填(backfilled),而对于zkSync Era,数据在第100,000到401,345批次之间。下表列出了回填的证明批次的日期范围,以及此数据集中涵盖的L2区块编号。

image-20240303162143951

第1部分 — Rollup L1验证成本

在本节中,我们将详细介绍验证zkSync和Starknet证明所需的链上步骤。我们将剖析相关成本,包括证明的链上提交、证明验证算法中的主要操作,以及为数据可用性提交Rollup数据。为了参考,包含了链上合约的链接。

zkSync中证明验证的概述

zkSync Lite和zkSync Era的早期版本使用了PLONK证明系统。我们预计这些基于SNARK的系统具有恒定的证明验证成本和可变的数据可用性成本。在2023年12月,Era升级到了使用其Boojum证明系统,该系统利用了一个包装在SNARK内部的STARK证明。这个证明仍然预计具有固定的验证成本和可变的数据可用性成本,但更高效的证明可以降低集中的基础设施成本。不幸的是,没有可用的集中的数据来进行分析。

为了先建立一个基准,图1.1显示了zkSync Lite每日L1验证成本的详细分解。对于zkSync Lite的PLONK证明者,区块首先被提交,然后被证明,最后被执行。最有趣的是,commitBlocks使用了最多的gas,总计占验证成本的60%,而proveBlocksexecuteBlocks分别占约20%。对于zkSync Lite的L2交易数据和分析的质量并不理想。然而,基于区块平均值的估计表明,zkSync Lite的交易量很少超过每天100,000个 Layer2 用户操作。要深入了解zkSync Lite数据,请参考Marcov的此仪表板。

zkSync Lite L1 验证成本

图1.1 — zkSync Lite L1 验证成本

⚠️ 从 zkSync Lite 到 Era 的变化

1 — L1 ↔ L2 消息操作已从 executeBlocks 移动到 commitBlocks,降低了 executeBlocks 的成本并增加了 commitBlocks 的成本。(这使 Era 可以创建一个约 20 小时的执行延迟,在此期间区块被提交和证明,然后保持在挂起状态,直到最终确定。这个延迟可在发生安全事件时创建用于roll-back 缓冲。在去年 12 月份,因为 BRC-20 代币铭文的创记录交易量对网络进行压力测试时,使用了这个延迟)

2 — zkSync Era 改为存储状态差异而不是完整交易。鉴于消息的更改,我们预计 commitBlocks 的比例会增加;然而,它保持不变,表明状态差异比完整交易需要更少的 DA 字节。

负责为 zkSync 系统提交交易的 EOA/代理如下:

image-20240303162229753

zkSync 批处理包括三个独立操作:提交交易/状态差异、验证证明和执行,其中包括更新链头和消息传递等。每个步骤的 L1 交易可以在 zkSync Era 区块浏览器 中找到,并将用于将验证成本分解为单独的操作。处理这些交易的以太坊主网合约如下。

image-20240303162307230

来源:https://gist.githubusercontent.com/elicbarbieri/132dc8d3227fba314d00563df20bcb50/raw/479d097bfae9145a9a6df3d711dc9ad4606de011/zk_sync_proof_breakdown.md

所有 zkSync 证明系统都从发送 DA 承诺开始,用于批处理的 commitBatches 交易。在 zkSync Lite 中,一个区块由其交易表示,而在 zkSync Era 中,它由执行交易产生的状态差异表示。commitBatches 可能包含多个批次并消耗/触发 L1 ↔ L2 消息。一旦 DA 承诺已被哈希和保存,就会发送一个带有证明的 proveBatches 交易。每个批次有一个证明。证明的验证检查 DA 承诺是否已保存以及 zkProof 是否正确。几个小时后,批次被‘执行’,最终确定 L2 的状态。每个 executeBatches 交易一次执行多个批次。

zkSync 证明验证调用图

图1.2 — zkSync 证明验证调用图

zkSync Era L1 验证成本

图1.3 中对 Era Plonk 和 Boojum 证明成本的成本分解分析显示,尽管百分比图表并未显示出明显变化,但总 L1 Gas消耗表明 Boojum 升级是一个重大改进。

img

图1.3 — zkSync Era 证明验证成本

Plonk 验证的每批次成本约为 760,000 L1 gas,而验证 Boojum 证明仅为每批次约 460,000 gas,表明了显著的改进。令人感到困惑的是,花费在 proveBatches 上的成本比例并未显示出显著减少。然而,顶部子图中总费用的回顾显示了明显的减少。考虑到 Boojum 升级后 Layer 2 UOP 交易量的增加,看来 zkSync 在此次升级期间还对其 DA 发布进行了实质性的优化。

进一步分析 zkSync 如何在处理更多交易的同时减少其 DA 费用将是有价值的。

Starknet 证明验证概述

Starknet 利用基于 STARK 的证明系统,我们预计其具有对数多项式的验证成本。

所有证明验证交易均源自两个 EOA 中的一个。这些 EOA 调用五个入口点合约中的一个,用于批次验证的每个步骤。

image-20240303162409470

下表展示了五个入口点合约,以及展示执行的操作的示例交易。在证明验证期间,这些合约处理证明验证的各个步骤。请注意,批次由数百个交易组成,发送在数十个区块上。

image-20240303162530539

image-20240303162602207

Starknet 证明验证调用图

图1.3 — Starknet 证明验证调用图

Starknet 区块被批处理。registerContinuousMemory 交易提交区块的状态差异作为数据可用性(DA),每个区块涉及两个交易:一个捕获状态差异,另一个捕获区块输出。一旦一批状态差异已被提交,就会验证相应的执行证明。最后,处理 L1 ↔ L2 消息传递,并推进链的头。

为了分解验证,我们将其分为以下部分:

  • 验证 Merkle
  • 验证 FRI
  • 注册 Memory
  • 验证和注册证明
  • 更新状态

通过 registerContinuousMemory 的数据可用性使用了大部分 gas,约占验证成本的 80%。updateState 占 10%,verifyProofAndRegister 占 5%,其余占 5%。

Starknet 证明验证成本

图1.4 — Starknet 证明验证成本

Starknet 和 zkSync Era 成本比较

zkSync Era 和 Starknet 每日 gas 消耗量大致相似,介于 20 亿至 40 亿之间。虽然 Starknet 在证明验证方面使用的 gas 明显少于 Era 和 Boojum,但它在使其数据可用性方面消耗的 gas 更多。

尽管这可能不是一个公平的比较,因为使用网络不同,但这些见解是有价值的。为了进行更精确的比较,在第 2 节中,我们将详细介绍每个用户操作的验证成本。

以上数据表明,Starknet 可能会从其链上数据表示的最小改进或实施 EIP-4844 中受益,这可能导致其比 zkSync Era 更便宜。

第2部分 — 每个用户操作的验证成本

前面的分析比较了网络之间的总日常验证成本以及其内部支出的分解。虽然这提供了关于扩容的运营成本的见解,但它并不能帮助我们了解网络对最终用户的性能或成本。在本节中,我们将比较每个用户操作(user operation)的系统验证成本,如方法论部分所述。

为了实现这一点,我们将测量每个 L2 区块批次中的用户操作数量,并将它们与 L1 上批次的验证成本在 Starknet 和 zkSync Era 中进行比较。

一旦我们有了每笔交易成本变化的公式,我们就可以根据批次体积绘制两个网络的性能,并比较它们的平均每个用户操作的成本。

我们根据每批次的 L2 操作数量和每批次在 L1 上的验证 gas 消耗量定义了批次的 userOperaptionCost

img

在接下来的几节中,我们将绘制L1中使用的gas与批处理中用户操作数量的关系,并试图找到上述公式的最佳拟合回归。然后我们将这些数据与Starknet和zkSync进行比较。

zkSync Era每个用户操作的验证成本

在图2.1中(缺),我们绘制了L2批处理用户操作数量与在L1上验证批处理所需的gas,涵盖了zkSync Era(Plonky)和zkSync Era(Boojum)。

我们注意到了一些事情:

  1. 无论批处理大小如何,Era和Boojum中的证明验证GAS固定不变,Plonk的证明验证成本为 76 万 gas,Boojum的证明验证成本为 46 万 gas。
  2. 在Era pre-Boojum中,commitBlocks的成本似乎与交易数量成正比。这不是我们所期望的,因为我们假设更多的交易数量会导致更大的状态差异。然而,这种差异可以通过Era的批处理算法来解释。批处理器尝试包含尽可能多的交易,直到达到 gas limit 或750笔交易(Plonk)和1000笔交易(Boojum)的硬限制。基于这一假设,交易数量较少的批次可能使用了更多的存储。为了解决批处理大小和成本的选择偏差,我们将删除提供DA的成本,以确保对网络的公平比较。

💡 — 负交易成本回归是由zkSync批处理大小和封印标准导致的。如果满足以下任一条件,批次将被封印和证明:

— 达到每批120kb的MAX_PUBDATA

— 达到750笔交易(Plonk)或1000笔交易(Boojum)的交易限制

— 达到8000万的gas limit

— 达到zkEVM Prover电路限制

有关zkSync批处理大小的更多文档可以在这里找到。

值得注意的是,我们对L1中x个用户操作的L2批处理的gas有以下回归:

img

从Era数据的趋势推断,验证批处理的成本随着用户操作数量的增加而降低。这个结果令人惊讶,违反直觉,并且很可能是批处理大小选择偏差的结果。当x趋向无穷大时,每笔交易的gas为-299.18。这是不可能的,因此我们必须得出结论,即我们的模型缺少数据,这将限制每笔交易的成本为0 gas。对于Boojum来说,情况甚至更加荒谬。

Starknet 用户操作压缩效率

在Starknet上,Merkle、FRI和证明验证几乎与批处理大小成正比。寄存器内存和更新状态操作都需要calldata发布,因此随着批处理中操作数量的增加而线性增长。

Starknet用户操作压缩

图 2.2 — Starknet用户操作压缩

值得注意的是,我们对L1中x个用户操作的L2批处理的gas有以下回归:

img

在Starknet上,验证批处理的总成本随着用户操作(UOPS)数量的增加而增加。根据当前数据集,每个用户操作的平均L1成本为2425 gas,每批的固定成本约为 5100万 gas。在中位批处理大小为30.7千个操作时,评估上述回归的结果为每个L2用户操作的 L1 gas 成本约为 4120 gas。

以太坊每天平均消耗1080亿gas,并记录平均100万笔每日交易。这意味着每笔交易平均消耗108000 gas。因此,Starknet平均使交易成本降低了44 倍。

比较Starknet和zkSync Era每个L2操作的成本

关于Starknet的第一件事是,它的批处理大小明显大于zkSync Era。虽然zkSync Era的批处理有750或1000笔交易的限制,但Starknet没有交易限制;相反,它填充到资源限制。Starknet的批处理可以有很大的变化,从主要是简单操作的批处理,包含超过5万个操作,到包含资源密集型操作的批处理,包含少于1.5万个操作。

🗒️ 从上述观察中,Starknet在压缩大量简单操作方面表现出优势。而zkSync Era批处理将在1000笔交易时填满,Starknet批处理将继续填充直到达到资源限制。

考虑到每个网络的批处理大小,zkSync Era和Starknet在验证相似数量的L2操作时,花费了非常相似的gas。下图2.3绘制了每个L2操作的每日L1成本,通过将L1验证gas除以L2操作数量来计算。

从上图可以清楚地看出,zkSync Era的Plonky证明显示出与Starknet非常相似的每个操作成本。然而,最近的Boojum升级导致了实质性改进,将每个操作的成本减少了约一半,从而使zkSync Era在用户操作压缩方面当前具有优势。

比较 zkSync Era 和 Starknet 的验证成本

由于预计EIP-4844将影响rollups的动态,分析没有DA的证明验证成本是很有价值的。对于zkSync Era来说,proveBatches的成本保持不变。另一方面,对于Starknet来说,verifyMerkle操作每批有固定成本,而verifyFRIverifyProofAndRegister操作具有对数多项式成本。

💡 — 虽然 VerifyFRI 具有对数多项式的验证成本,但当前的证明器只填充到128个叶子,需要八个verifyFRI操作。如果填充256个叶子,则需要九个verifyFRI操作。Starknet成本的两个层次来自早期的证明,只填充了64个叶子,只需要七个verifyFRI操作。

`固定(fixed)`证明成本

图 2.4 — 固定(fixed)证明成本

图2.4的底部图在对数尺度上绘制了每次操作的固定成本,并评估了最小、中位数和最大批处理大小的操作压缩。对于zkSync Era来说,Boojum后的中位数批次包含807个操作,每个UOP的固定成本为568.15 gas。相比之下,Starknet的中位数批处理大小要大得多,为30700个用户操作,每个用户操作的验证成本为432.35 gas。

从这张图表中可以看出,zkSync Era在压缩方面具有优势,因为每个UOP的成本大约比Starknet低了两个数量级。然而,在实践中,zkSync Era的批处理要小得多,因此在不考虑DA和消息成本的情况下,考虑到每个批处理大小的有效成本,Starknet目前仍然保持压缩优势。

第 3 部分 — 比较rollups之间的计算

在有效rollup上的具体执行成本很难进行比较和对比。例如,用Cairo重写某些东西意味着什么?与Solidity实现相比,在链上运行会有多昂贵?两个EVM在一组操作码上会消耗相同数量的gas吗?这些问题引发了一个古老的计算机科学争论:哪种编程语言最快?

虽然这个问题缺乏明确的答案,但通常有两种方法来回答它。首先,可以对各种算法及其在不同语言和运行时中的实现进行基准测试,并编译数据以比较一类算法的性能,例如Benchmarks Game。另一种方法是在各种环境中实现所讨论的程序,并直接测量这些实现的性能。

在本节中,我们不关注哪个网络是“最快”的。相反,我们的目标是根据网络跟踪的计算单元——gas来比较程序。

以下分析围绕一个观察展开,即尽管每个网络都具有新颖的程序、相同程序不同的实现和不同的使用级别,但用户操作的整体模式的轮廓保持相当一致。

这使我们能够将它们的使用概况拟合在一起,并计算函数,该函数平均地将一个网络上的gas单位转换为另一个网络上的gas单位。我们将尝试近似一个公式,该公式比较了每个网络上的gas消耗与以太坊的gas指标。

我们的结果不太可能是一个好的公式,特别是当网络在用户行为上有所不同时。然而,我们相信它提供了一种新颖的比较网络计算能力的方法,为开发人员提供了一种“试探风向”的技术,以评估其下一个部署的潜在位置。我们希望这种技术能激发其他人构建更好、更细致的方法。

交易资源消耗(本地单位)

为了比较每个网络之间交易的构成,我们回填了以太坊、zkSync Era和Starknet一周的交易数据。所有收集的数据都在9月16日至9月23日之间,Unix时间戳在16948476001695452400之间。每个网络的区块范围如下所示。

下表展示了在此期间分析的gas_used数据在这三个网络之间的比较。重要的是要记住,gas在不同网络之间的构造方式有根本的不同,不能直接进行比较。

为了为交易分布创建一个更准确的基线,我们排除了原生主网ETH转账(占交易的32.26%),因为Starknet和zkSync Era没有原生ETH转账,这类转账在以太坊的智能合约交易中占比很小。大多数应用程序专门使用ERC20代币,而WETH转账仍然包含在这些数据中。

下表显示了未经过滤的以太坊gas使用数据。然而,在随后的章节中,我们将从所有以太坊分发中排除原生转账。

image-20240303162657767

本地单位资源(Gas)消耗直方图

图 3.1 — 本地单位资源(Gas)消耗直方图

💡 — Starknet的分布要“尖锐”得多,因为相同操作的gas使用在所有执行中保持一致。在zkSync Era中,相同交易的gas使用取决于L1 gas价格,导致分布更加平滑。对于以太坊来说,平滑可能是由于各种协议和每个UOP的不同实现的广泛多样性。

每个网络的分布在较低端最为集中,这符合大多数交易涉及基本转账、ERC操作和DEX交易。通过分析每个网络上的交易构成来证实这一点。

按函数选择器/UOPS的百分比分布

图3.2 — 按函数选择器/UOPS的百分比分布

不同网络的交易类型构成非常相似,主要涉及DEX上的转账和交换。尽管这些Rollup为各类新应用提供了更低成本的链上部署,但观察到的交易活动大部分来自于已经存在于以太坊上的应用程序的更经济的迁移部署。

这些图表并不表明应用程序计算的使用明显比之前增加了。

各 Rollup 之间的 gas 使用

我们假设这些交易分布源自相同的“全局”用户意图分布。如果这一假设成立,我们预期 Kolmogorov–Smirnov(KS)检验结果为零。然而,网络的资源是用不同的单位来衡量的。我们利用KS应该为0的期望来规范化单位,通过定义一个函数覆盖资源使用直方图,并最小化KS检验的输出。实际上,我们将KS检验视为一个要最小化的客观函数。我们的方法在附录B中有详细介绍。

结果是从zkSync gas到以太坊gas和从Starknet gas到以太坊gas的近似映射。这使我们能够比较网络之间的交易成本,并为处理每秒计算提供了基础。

img

我们在最小化两个直方图之间的方差后获得了转换函数的系数输出。将转换后的密度绘制在以太坊KDE旁边,不仅揭示了分布之间的相似性,还突出了可能改进拟合的潜在区域。这是一个非常有趣的数据科学练习,我们鼓励每个人都去探索这项研究的存储库,并为改进我们的方法做出贡献。

Gas转换结果

图3.3 — Gas转换结果

第 4 节 — Rollup 收入

现在我们已经对Layer 1验证成本进行了分类和理解,计算盈利的下一步是审查Rollup收入。与EIP-1559之前的以太坊类似,Rollup 通过交易费用支付其运营成本,这些费用通常以ETH计价。

以太坊上的 gas 作为阻止DoS攻击的主要机制。它通过按照操作码在网络上的负载分配成本来实现这一点。像ADD()这样的基本操作很便宜,只消耗3 gas,而昂贵的操作,比如数据库查找,可能消耗20000 gas。一个设计良好的gas计划还会减少最大执行时间的变化。这是因为每个区块都有一个gas限制,gas消耗与执行复杂性密切相关。

这个原则也适用于Layer 2网络,其中prover和sequencer的资源是受限的。交易支付的费用必须与执行交易、发送数据可用性承诺、生成证明、验证证明以及未来 L1 gas 价格的复杂性成正比。这导致了一个复杂的方程,确保Rollup用户支付的费用覆盖基础设施成本,同时保持低费用以改善用户体验。

乐观Rollup通常具有与以太坊主网几乎相同的EVM实现,因此具有几乎相同的gas机制。这包括精确复制操作码价格,就像Optimism和Base所展示的那样。另一方面,ZK-rollup必须调整额外的操作码,因为所有指令都必须通过zkProver运行。特别是,在ZK环境中计算常用的哈希算法是计算密集型的,操作码价格需要相应进行了调整。

这些变化有值得注意的设计意义。一个显著的例子是映射,它使用哈希从键中检索值。ERC 代币广泛利用映射;然而,哈希的成本增加使得标准的 ERC 代币实现在 ZK-rollups 上比在乐观的 rollups 上效率低。Starknet 还使用了 ~252 位的字(felt),而不是 EVM 兼容链上发现的 256 位字,进一步降低了标准实现的效率。因此,标准和协议的优化实现在 ZK-rollups 和乐观 rollups/Ethereum 主网之间可能会有显著差异。

Starknet gas 计算

Starknet 使用一种新颖的虚拟机,与 EVM 不兼容。然而,gas 的概念保持相同,费用按资源消耗比例分配。每个 Starknet 交易利用不同的执行资源,比如“steps”、“builtins”和“memory”。有一个关于执行资源的加权公式,确保 L2 gas 模型既考虑了证明生成的复杂性,又考虑了 L1 验证成本。最后,Sequencer 获得了 L1 gas 价格的加权平均值。有关此机制的更详细信息,请参阅 Starknet 之书,以及 AVNU 的博文:A Tale of Gas and Approximation

Starknet & 以太坊平均 Gas 价格

图 4.1 — Starknet & 以太坊平均 Gas 价格

如图 4.1 所示,Starknet 价格与以太坊 gas 价格高度相关。这种 gas 价格的紧密跟踪使得 Starknet 交易对终端用户来说是可预测和可理解的。Starknet 的路线图上有一个费用市场,这将导致这些图表有差异。虽然费用市场将允许用户指定他们的优先费用,但 L2 gas 价格很可能始终有一个下限,它由 L1 gas 价格的函数确定。

zkSync Era gas 计算

在 zkSync Era 上,区块基础费用保持非常稳定,大部分时间设置为 0.25gwei,使用 Plonk prover 的生命周期,每隔几天进行调整(目前约为 0.10gwei)。为了抵消 L1 gas 的波动价格,直接消耗 L1 gas 的操作码具有动态 gas 成本。例如,在 zkSync Era 上,SSTORE 操作码使用的 gas 每个区块都会变化,以反映以太坊上 SSTORE 的 ETH 费用。

算术和逻辑操作仅影响证明生成,不会线性增加验证成本。由于这种压缩,这些操作码消耗固定数量的 gas。

图 4.2 展示了动态资源定价。它显示了 zkSync Era ERC20 approve() 交易的每日中位 gas 消耗在左轴上,并在右轴上绘制了 L1 gas 价格。在以太坊主网上,approve() 交易消耗固定的约 46,000 gas,而在 zkSync Era 上,每个 approve() 交易消耗了数十万 gas。值得注意的是,大约在 2023 年 5 月 5 日左右,zkSync Era 上的 ERC20 approve() 消耗的 gas 超过了 3 百万。

zkSync Era 操作资源 vs L1 Gas 价格

图 4.2 — zkSync Era 操作资源 vs L1 Gas 价格

虽然对于熟悉以太坊 gas 结构的用户来说可能看起来有些反直觉,但这种机制使得 zkSync Era 能够准确地模拟其 L1 验证成本。鉴于某些操作具有可预测的 L1 gas 成本,Era 区块链可以根据每个区块的 L1 价格设置 opcode 价格。有关 zkSync 费用机制的更多信息,请阅读他们的 [文档](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart contract Section/zkSync fee model.md)。

Layer 2 费用的支出方式

用户支付的费用代表了 rollup 的净收入。在图 4.3 中,我们绘制了这些费用的百分比分布(不包括中心化的链下成本)。Starknet 的费用偶尔会超过 100%,这不是错误,而是表示 Starknet 的一天是不盈利的。

 L2 费用

图 4.3 — L2 费用

比较 zkSync Era 和 Starknet,可以明显看出 zkSync 从净收费中获得了比例更高的利润。然而,它们的支出也有很大不同。在 Starknet 上,大约 10% 的费用用于证明成本,而 zkSync 则在证明成本上花费了约 25% 的费用。

💡 以上数据显示,数据可用性(DA)成本的降低将不成比例地影响 Starknet 和 zkSync Era。由于在 Starknet 上花费在 DA 上的百分比要比在 zkSync Era 上高得多,我们预计 EIP-4844 的费用减少将对 Starknet 的影响大于对 zkSync Era 的影响。

虽然 zkSync Era 目前拥有更好的整体压缩比,但上述数据和图 2.4 中所示的固定成本使我们相信,在 EIP-4844 上线后,这种情况可能会发生变化。

Rollup 每日盈利

现在我们对 rollup 上的费用生成有了更好的理解,我们计划回填 Starknet 和 zkSync Era 的费用数据。我们可以通过计算每个批次的 L2 费用生成的净收入(不包括链下成本)来估算 rollup 的盈利。

rollup 的盈利仍然是一个悬而未决的问题。在接下来的部分中,我们将在假设它们确实盈利的前提下进行。此外,我们呼吁 rollup 运营商发布有关他们运营成本的数据。这些信息对于他们的社区至关重要,因为网络的长期性、它们能够去中心化的程度以及它们的设计重点在一定程度上取决于运营的盈利性。请注意,根据所选择的证明系统,计算证明的成本会有很大的变化,包括这些数据可能会从根本上改变下面的观察。考虑到这一点,我们在其他情境中参考这些数据时,应谨慎对待。

Rollup 盈利

图 4.4 — Rollup 盈利

应用于盈利数据的回归线说明了每日和累积盈利的趋势,这些回归的系数在图例中有详细说明。Starknet 的平均每日盈利几乎是恒定的,与此相反,zkSync Era 的每日盈利呈下降趋势。我们可以通过累积盈利回归系数创建每日收入的估计:对于 Starknet,它为每天的 11.94 ETH,对于 zkSync Era,它为每天的 36.79 ETH。

在右下角的子图中,我们绘制了每笔交易的盈利。简单的观察显示了 Starknet 的盈利具有显著更高的方差,而 zkSync Era 保持稳定的盈利,平均每笔 L2 交易约为 50,000 Gwei。我们推测 zkSync Era 的证明时间和 L2 费用结构允许更好地模拟 L1 成本,从而为用户提供更均匀的成本分布。然而,我们注意到两个网络的费用设计正在演变,此时批评任何一个网络可能还为时过早。

验证人的盈利

ZK-rollups 利用证明系统而不是 M of N 一致性来确保完整性,通常需要 1 of N 诚实性来从有效性证明中受益。在撰写本文时,正在讨论和开发许多设计,以确保 rollups 的其他属性(如活性和抗审查)具有可接受的保证。无论使用何种机制,确定确保所有属性都得到保证的“足够”验证人数量仍然不清楚。然而,我们可以尝试估算可以支持的验证人数量的上限,考虑到现有的 rollup 盈利能力。

⚠️ 这份分析应谨慎对待。Rollup的盈利能力存在争议,而空投狩猎季节(撰写时)可能会提高交易量。鉴于这些网络仍处于早期阶段并且正在经历显著增长,目前的利润率未来可能会保持、增长或缩减都不明确。

首先,我们计算了Starknet和zkSync的日利润分别为11.94 ETH和36.79 ETH。然后,我们计算了每个网络的年度奖励,假设验证者按比例获得奖励。

进行了一些粗略的计算,假设以2000美元的ETH价格和100个验证者为前提,每个Starknet验证者每月大约可以获得7200美元,而zkSync Era验证者每月大约可以获得22000美元。这足以支付租用2-3TB的RAM和100多个CPU核心的成本。因此,Starknet和zkSync Era至少可以持续拥有100个验证者的网络规模。

让我们从(诚然慷慨的)假设开始,即以太坊每个验证者的收入是验证者价格的良好指标。预计以太坊验证者每年的收入约为1.4 ETH,不包括MEV利润。下表尝试量化每个网络可以拥有多少验证者,如果它们将相同的收入分配给每个验证者,就像以太坊一样。重要的是要注意,许多网络正在考虑以数百个验证者的数量运行,这可能会显著增加每个验证者的盈利能力。

注:乐观Rollup的数据来自Dune分析;但是,我们没有回填或再次检查Dune指标。

image-20240303162822801

尽管这些数字没有考虑Layer 1 MEV收入或运行Rollup验证者的更高硬件成本,但它们清楚地显示,(撰写时)Rollup正在产生足够的利润,吸引了大量运营商,与 Rollup 当前的雄心相一致。随着验证者、用户和交易数量的变化,这种计算可能会发生变化。然而,可以合理地预期,拥有数百个验证者在当前情况下既可能又适合。我们再次强调,当前Rollup运营商公布其服务器和证明成本将带来巨大价值。这种透明度将有助于验证者了解运营要求,并加快去中心化的步伐。

第5节 — 分析 ZK-rollup 以外的DA成本

在审查 zkSync Era 和Starknet之间的验证成本分解后,明显地,数据可用性目前是验证Rollup的主要成本。每个非零字节的 Calldata 成本为16 gas(零字节成本为4 gas),而Rollup每天发布的数据量范围从几十兆字节到数百兆字节不等。主要Rollup的总日调用数据消耗经常超过600MB,偶尔达到1GB以上的峰值。这种大量的数据发布导致了L1的膨胀,并增加了L2操作的成本。在接下来的部分中,我们将分析EIP-4844对Rollup成本的影响。

每日Rollup调用数据消耗

图5.1 — 每日Rollup调用数据消耗

EIP — 4844 blob数据定价

每个blob消耗固定数量的blob_gas,每个块的目标(target)是3个blob(0.375MB),最多为6个blob(0.75MB)。Blob gas费用使用公式blob_fee_wei = blob_gas * blob_gas_fee进行计算。

对于每个块,存在以下费用机制。如果连续多个块消耗的blob数量超过目标blob数量,blob gas价格将呈指数增长。UPDATE_FRACTION参数设置为,两个块之间的blob_gas_price最大增加为12.5%。excess_blob_gas将是一个累加器,跟踪gas价格。

excess_blob_gas = parent.excess_blob_gas + parent.blob_gas_used - TARGET_BLOB_GAS
blob_gas_price = 1 * e**(excess_blob_gas / UPDATE_FRACTION)

img

目前,每128KB调用数据的Rollup成本约为0.2至0.6 ETH。每个块的目标是3个blob,以太坊的DA容量将约为每天2.7GB,几乎是2024年1月观察到的峰值DA负载的两倍。由于blob供应是固定的,blob gas的价格由需求决定。在Dencun硬分叉后的最初几周,blob gas将是微不足道的,直到EIP-4844的使用加速并且2.7GB供应完全被利用。在此期间,Rollup DA的成本将比当前价值低26个数量级。

下图显示了每个Rollup的主网调用数据的每日平均费用。调用数据发布被分成128Kb块(blob的大小)以近似blob gas价格的上限。鉴于每128kb的当前费用约为0.075ETH,这相当于大约60 gwei的blob gas价格。我们假设,如果blob gas价格迅速达到这个水平,Rollup可能会决定继续发布调用数据而不是blob,特别是考虑到永久性持久性而不是两周的生命周期。

每日Rollup调用数据费用

图5.2 —— 每日Rollup调用数据费用

从图5.2中呈现的数据中出现的一个意外观察是每KB的费用的变化。即使Base和Optimism都建立在相同的技术堆栈上,也存在不同的费用。

两个因素可能导致这种差异:0x00字节和波动的gas价格。调用数据的非零字节使用16 gas,而零字节只使用4 gas。由于零字节和非零字节都计入在内,如果网络A发送非常稀疏的DA承诺,其中有许多零字节,而网络B发送非常密集的DA承诺,其中有很少的零字节,那么网络A的每KB的gas消耗将比网络B低。

可能影响这种情况的另一个因素是需求定价。如果网络A的政策是仅在前两个块的gas消耗低于目标时发送承诺,那么它很可能会避开高峰交通时间,并且平均支付较低的费用。这种策略将降低DA承诺的一致性,我们怀疑这不是这种变化的根本原因。

尽管稠密和稀疏数据集之间的gas成本差异可能是变化的主要因素,但深入研究这一分析可能会很有趣。

总结思考

审查验证成本为我们提供了对Rollup运营的宝贵见解。尽管压缩和扩容频繁被讨论,但评估实现成本和吞吐量为我们提供了对Starknet和zkSync Era效率的具体见解。这种练习应该适用于所有Rollup。

我们的分析之所以有效,是因为两个网络的用户操作使用情况具有相似的特征。只要这种情况持续存在,UOPS/秒就是比较网络的可靠指标。然而,这引发了一个问题:Rollup在未来是否会执行基本不同类型的计算?如果Rollup开始专业领域化,UOPS/秒将逐渐失去准确性。比较每秒执行资源将提供更准确的指标。

此外,我们已经采取了初步步骤,通过创建一个函数来在执行资源之间进行转换,以构建公平比较。我们希望我们的努力能够鼓励更多使用类似技术进行公平比较的调查。我们相信,一旦建立了用于跨领域比较执行资源的基准度量标准,它就可以取代每秒交易数(TPS)成为标准度量标准。

我们对当前L1费用和L2收入进行了高层次分析,这对于识别趋势和模式非常有价值。然而,它并不能提供有关有效性Rollup的盈利能力的见解。再次强调公共数据的价值。如果Rollup披露其集中式基础设施成本和架构概述,将使研究人员、开发人员和运营商能够更清楚地了解不同Rollup的运营要求,从而加快去中心化的步伐。

在当前状态下,EIP-4844块将仅在信标链上持续两周。尽管这对大多数情况可能是足够的,但我们怀疑一些Rollup可能会试图增加其数据可用性(DA)承诺的生命周期,转向替代解决方案。此外,EIP-4844的blob 供应是固定的,随着对块的需求增加,其价格将继续上涨。相比之下,在专用DA网络上,供应可以随着需求的增加而扩大,从长期来看,专用DA解决方案具有价格优势。目前尚不清楚EIP-4844是否会成为Rollup DA的标准,或者专用网络是否会随着时间的推移而占据主导地位。

附录 A:数据收集

本研究的数据是从Layer 2的JSON-RPC端点收集的,Layer 1的数据是通过JSON-RPC端点和Etherscan API的组合进行回填的。此外,一些Starknet数据是通过Voyager进行回填的。

使用python-eth-amm库进行了来自RPC端点和API的回填过程。本报告中使用的数据的重建说明以及相关笔记本可以在L2Bits存储库中找到。

Layer 1交易回填

从以下地址回填了交易,以计算与每个网络相关的L1验证成本。尽管这些数据可以通过Dune analytics获得,但为了ABI解码交易,我们手动进行了回填,以确保对基础数据具有完全控制。

交易分布回填

为了比较每个网络之间的交易构成,我们回填了以太坊、zkSync Era和Starknet一周的交易数据。收集的所有数据跨越了9月16日至9月23日,Unix时间戳在16948476001695452400之间。每个网络的区块范围如下所示。

image-20240303163041063

批处理方法

Starknet Proofs明显被界定,批次包含数百个交易,分解为单独的验证步骤。为了计算Starknet批次,我们按顺序选择所有L1交易,并对它们进行索引,直到检测到新的证明批次的开始。此外,我们收集了L2块,并将L1VerificationHash参数与L1批次进行匹配,以精确计算每个批次中证明了哪些块。

对于zkSync Era和zkSync Lite,操作员EOA定期发送executeBlockscommitBlocksproveBlocks,中间没有间断。由于这种频率,我们避免了基于逻辑的批处理,而是将L1和L2块分组到每小时的区间。尽管批处理的界定不像Starknet的情况那样清晰,但由于L1验证的规律性,过度采样不应该是一个重大问题。

Rollup数据收集思路

这项研究突显了新Rollup的成熟索引和分析解决方案的缺乏。例如,来自Dune analytics和Subgraph的Starknet数据是不可用的。zkSync Era最近于2023年10月被添加到Dune analytics中,这代表了显著的进展,并使本研究的许多领域变得更加容易。

从RPC中收集原始数据的难度超出了预期,因为RPC位于Cloudflare 网关后面。存在速率限制、超时错误和无响应主机错误。如果您有兴趣分析这些网络,请考虑探索python-eth-amm中包含的CLI工具。

由于有三个开源节点可用,Starknet的RPC要好得多,Juno和Pathfinder都提供了允许在不到一个小时内设置节点的快照。此外,与zkSync Era和Lite相比,Starknet的区块浏览器更加完整,使得调查工作更加容易。

由于其不同的性质和较少的开发工具,对Starknet的数据进行解码要困难得多。在这项研究中,我们能够通过利用Voyager区块浏览器的索引基础设施来避免大部分这些挑战。然而,目前在家中重新创建Starknet的解析和解码是相当困难的。

附录 B:将步骤转换为gas

从这里推断,每个Rollup的交易数据将是用户意图的派生。一些链的费用较低,安全性较弱,可能会有更多低资本应用的表达,而一些链可能会通过经济学过滤掉计算密集型的用户意图。基于这些假设,可以得出结论,跨链的交易构成是从类似的用户意图分布中提取的是合乎逻辑的。

第一步是排除Rollup之间的异常值。对于以太坊,我们将排除所有ETH转账,因为它们构成了交易量的重要部分,但不属于智能合约生态系统的一部分。即使排除了ETH转账,DeFi转账仍然被捕获,因为WETH更为普遍。

从这些经过滤的数据集中,我们计算密度,描述了每个资源消耗水平上的交易比例。然后,我们为每个网络计算核密度估计(KDE)。使用KDE,我们可以估计在给定价格水平上预期的交易数量,并生成遵循其估计的新的随机分布。

img

定义目标函数

下一步涉及找到一种方法来比较两个分布的相似性。在这种情况下,Kolmogorov-Smirnov(KS)检验是一个理想的选择,因为2样本KS检验生成的输出可以被解释为两个数据集来自同一分布的百分比机会。要了解这一检验的基本原理,请阅读更多这里

然而,KS检验有一个重大缺点:它很敏感,如果分布有太多的方差,输出将为零,使得优化器无法得知分布之间的方差是增加还是减少。

由于这种敏感性,我们需要手动调整函数的参数,直到分布开始看起来相似,并且KS统计量小于0.80。一旦达到这一点,优化算法就可以分辨出更改是增加还是减少准确性,从而让优化器接管工作。

免责声明

本文已经为读者的一般信息和理解而准备。需要注意的是,虽然Nethermind目前是Starknet Foundation的战略合作伙伴,但我们已经注意为读者提供客观评估。

Nethermind未对上述文章中包含的信息或意见的准确性或完整性作出明示或暗示的陈述或保证。第三方不应以任何方式依赖本文,包括但不限于作为财务、投资、税收、监管、法律或其他建议,或将本文解释为任何形式的推荐。

关于Nethermind

Nethermind是一支由世界一流的构建者和研究人员组成的团队。我们赋予全球企业和开发人员访问和构建去中心化网络的能力。我们的工作涉及web3生态系统的各个部分,从我们的Nethermind节点到基础密码学研究和Layer-2生态系统的基础设施。

如果你有兴趣解决一些区块链中最困难的问题,请访问我们的 职位招聘板

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
张小风
张小风
0xD305...609D
ETH