EIP-7623:以太坊交易的重新定价调用数据

本文深入探讨了以太坊的EIP-7623提案,旨在通过调整交易的calldata费用,限制最大区块大小,从而提高资源利用效率。文章详细分析了EIP-7623的动机、影响、受影响的交易类型以及潜在的担忧,特别是关于数据可用性(DA)目的的交易如何被额外收费。作者希望通过这篇文章帮助读者更好地理解这一提案及其内容。

区块链交易在节点之间传播、执行和存储时,会消耗 CPU、内存、存储和其他资源。因此,适当的交易定价对于防止网络滥用和实现有效资源利用至关重要。

然而,确定交易的适当定价一直是区块链协议设计中的一项长期挑战。

“区块链协议设计中最具挑战性的问题之一是如何限制和定价被包含在链中的交易提交。” - Vitalik Buterin

为什么正确定价交易如此困难?

这种困难的出现是因为估计每笔交易所消耗的每种资源的确切数量本质上是复杂的。目前,在以太坊中,所有资源都被表示为称为“gas”和“blob gas”的统一单位(通过 EIP-4844 引入)。

存在将交易资源消耗转换为 gas 的预定义规则,这些规则定期更新。这些规则的示例包括:

  • 一笔交易至少产生固定的 21,000 gas 的开销,主要用于签名验证
  • 每个 EVM 操作码的预定义 gas 消耗

此外,calldata 的 gas 消耗是这些规则的一个重要组成部分,这一点较少为人所知,但非常重要。

Calldata 的定价至关重要,因为它直接影响最大区块大小。此外,它还影响所有使用智能合约的交易,尤其是影响依赖于 calldata 空间而非 blobs 的汇总交易的成本,用于 数据可用性

EIP-7623 是一项以太坊改进提案,旨在通过限制最大区块大小来改变 calldata 的定价。与之前仅增加 calldata 成本的提案不同,EIP-7623 旨在在实现高效资源利用的同时,尽量减少对日常用户交易的影响。

为什么区块大小很重要?

以太坊以 12 秒的时间段运行,在此期间,所有验证节点必须传播区块和 blobs,执行和验证交易,并对新块进行认证。

具体而言,以太坊客户端实现要求诚实节点在时间段的前 4 秒内接收和验证区块。在时间段的 4 秒时认证,这意味着在 4 秒之后到达的区块预计不会获得认证,并且 易受后续提议者重组

为了最小化以太坊节点之间的视图分歧,块的执行时间和传播时间应该被限制。

以太坊通过设定最大 gas 使用量来限制块的执行时间,目前限制为 3000 万, 目标为 1500 万。此外,每个 EVM 操作码的 gas 成本是基于其资源消耗预先确定的。例如,SSTORE 操作码 的成本高于更简单的操作(例如,算术加法—ADD),因为它涉及访问和修改状态树。EVM 操作码的这种差异化定价,连同总 gas 限制,旨在限制总执行时间。

虽然区块的 gas 限制可以在一定程度上限制区块执行时间,但区块传播时间目前没有明确的限制。

区块大小是影响公共区块链传播时间的主要因素。较大的区块大小增加了网络负载和带宽需求。如果区块大小大大超过大多数节点的带宽,则节点完全传播和接收区块所需的时间更长,从而增加了丢失或重组区块的风险。

这就是比特币协议(Segwit 之前)设定 1 MB 区块大小上限的原因,以防止分叉率增加,并确保区块链的安全性和低节点要求。

目前在以太坊中,并没有明确设定的区块大小限制。然而,可以通过考虑 gas 限制、calldata 成本、压缩率等估算理论上的最大区块大小。

尽管当前以太坊的区块大小约为 2.78 MB(不包括 blobs),但当前的 calldata 定价允许 EL 负载的大小可达 7.15 MB,而平均大小远小于此,大约为 100 KB。如果这种大型负载在 10 分钟内持续传播,那么可能达到约 42.9 MB,这显著大于其他区块链网络的典型区块大小。这可能会使以太坊网络超负荷,并在 DoS 攻击场景中导致节点对 7.15 MB 负载在短期内产生不同的视图。

实际上,现今以太坊的平均区块大小约为 125 KB,显示出与最大区块大小之间存在显著差距。这再一次引发了资源利用效率不足的担忧。

例如,如果网络可以在连续的情况下充分处理 1 MB 的区块,那么平均区块大小与 1 MB 之间的巨大差异则表明,以太坊在数据可用性(DA)功能上具有更大的容量,但未能有效利用。

通过限制最大区块大小并将平均区块大小调整得更接近于此最大值,以太坊可以在实现更高效资源利用的同时减少共识风险。这就是为什么 EIP-7623 关注可能的最大区块大小,而这高度受 calldata 定价的影响。

什么是 Calldata?

Calldata 影响最大区块大小。但它是什么,它的定价缘何重要?

Calldata 是交易中的一个字段,通常用于传达要调用哪些函数以及传递什么参数。

例如,如果你想铸造 NFT,则在 calldata 字段中包含 “mint” 方法和 NFT 的特定特征。以下示例显示了 2017 年 CryptoPunk 的第一次铸造交易。

calldata(在图中称为“输入数据”)包含“getPunk”函数名称,由 0xc81d1d5b 表示,以及 NFT 索引,由 0x00001eb0(十六进制中的 7856)表示。

如果你只转移 ETH 而不与任何智能合约交互,则 calldata 字段为空(0x)。

除了其主要用途是向智能合约传递参数外,calldata 还用于记录简单的备忘录或通过 rollup 存储其交易数据。换句话说,calldata 不必始终与智能合约交互或遵循严格的规则;它可以包含任意值。

利用这一灵活性,乐观 Rollup(如 Optimism 和 Arbitrum)以及一些 ZK(有效性)Rollup 在其序列化交易的 calldata 字段中发布压缩的 Rollup 交易数据和更新状态。

虽然 EIP-4844 通过 blobs 而不是 calldata 启用了数据可用性,但对于小型 rollup,calldata 仍然是首选,因为它无需 128 KB 的完整 blob 用于单个批次。

由于在 EVM 上发布大量数据的最少 gas 消耗方式,calldata 通常用于 DA 功能。这就是为什么最大区块大小受到 calldata 价格约束的原因。最坏的情况发生在区块充满用于 DA 目的的交易时,这些交易使用的 gas 较少,但数据大小较大。

目前,calldata 的成本是每个零字节 4 gas,非零字节 16 gas。通过 Snappy 压缩可以压缩 calldata([EIP-706](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-706.md?ref=ghost-2077.arvensis.systems)),且交易大小不能超过 125 KB。由于压缩率的变化,准确计算最大区块大小相对复杂,但已知块可以增加至约 2.78 MB。

如果由于某些原因(例如,垃圾邮件攻击),2.78 MB 的区块连续出现,网络可能会超负荷,节点可能由于传播速度慢而产生分裂视图。随着更多节点可能对不同区块进行认证,达到共识的风险增加。为了防止这种情况,一个简单的解决方案是提高 calldata 的成本。

例如,将 calldata 的成本加倍为每个零字节 8 gas,非零字节 32 gas 可能会使最大区块大小减少一半。

然而,这种方法可能会对正常用户交易造成伤害。仅为防止最坏的情况而增加 calldata 成本可能导致损失大于收益,考虑到当前平均区块大小仅为 125 KB,并不造成显著问题。

EIP-7623:动机

EIP-7623 略微不同于其他 simplement增加 calldata 成本的提案。相反,它专门调整那些似乎服务于数据可用性(DA)目的的交易的 gas 成本。

换句话说,如果交易中消耗的 gas 相对于加载的总数据大小不足,则视为 DA 目的交易,并对 calldata 收取更高的费用。相反,如果交易相对于数据大小消耗了足够的 gas,则视为非 DA 交易,其费用与当前一样。

可以将以太坊中的 calldata 与现实世界中的塑料袋进行类比。当我们购买产品或杂货时,我们通常会收到塑料袋来携带它们,通常成本非常低甚至免费。然而,如果个人可以无限购买塑料袋,这将对环境造成负面影响。

一个可能的解决方案是将塑料袋限制在购买足够产品的顾客中,或者以更高的价格收费,例如每个袋子 1 美元。这类似于 EIP-7623 的方法,作为一种皮古税。它对那些消耗大量 calldata 但消耗不足 gas 的交易施加更高的成本,从而促进更加高效的资源使用。通过对那些主要使用 calldata 用于数据可用性而非平衡数据和执行的交易施加较高的成本,该协议旨在确保网络资源的更高效和可持续利用。

那么,为什么要针对 DA 交易?使用以太坊作为 DA 平台有什么问题?

这没有什么固有的问题。EIP-7623 不会阻止以太坊作为 DA 的功能;相反,它间接鼓励使用 blobs 作为 DA。该提案旨在将执行层与数据可用性层分离,使每一层能够有效管理需求并更好地预测极端情况。

通过这样做,EIP-7623 力求提高以太坊资源管理的效率和可预测性,同时限制 DoS 表面。这种分离确保每个层可以更有效地处理其特定功能,最终有助于打造一个更强大、更具扩展性的以太坊网络。

EIP-7623:规范

当前交易的 gas 计算如下:

21,000 是任何交易收取的最低 gas。

同时,STANDARD_TOKEN_COST tokens_in_calldata 表示用于 calldata 的 gas,这正是 EIP-7623 主要试图修正的地方。在此,tokens_in_calldata 是零字节和非零字节的简单加权组合,计算公式为 tokens_in_calldata = zero_bytes_in_calldata + 4 * nonzero_bytes_in_calldata

STANDARD_TOKEN_COST 当前设定为 4,因此 zero_bytes_in_calldata 的 gas 成本为 4,nonzero_bytes_in_calldata 的 gas 成本为 16。

evm_gas_used 是为执行交易而消耗的 gas,主要涵盖与智能合约的交互。非 DA 目的交易通常具有较大的 evm_gas_used 组成部分。

当一笔交易创建一个新合约时,isContractCreation 项目变为 1,这意味着在创建和存储新合约时会产生额外的 gas。由于合约创建不是这里的重点,我们将这一项设定为零。

EIP-7623 对总 gas 计算提出以下调整:

在新的计算中,max(蓝框,红框) 比较当前方法计算的 gas(蓝框)和 TOTAL_COST_FLOOR_PER_TOKEN calldata(红框)的值。蓝框与当前 gas 计算方法完全相同,而红框是 EIP-7623 中新加入的,表示用于判断某一交易是否为 DA 目的的值。从 2025 年 1 月 1 日起,TOTAL_COST_FLOOR_PER_TOKEN 提议设定为 10,明显高于 STANDARD_TOKEN_COST 的 4。

换句话说,如果某交易未消耗足够的 evm_gas_used,则红框的值可能会大于蓝框的值,从而被标记为 DA 目的交易。因此,该交易将按 TOTAL_COST_FLOOR_PER_TOKEN 费率收费,实际上针对 calldata 支付的费用几乎比之前多出 3 倍。而大多数一般性交易支出足够的 evm_gas_used,所以 max(蓝框,红框) 将默认使用蓝框的值,从而维持当前的 gas 费用计算方法。

哪些交易受到 EIP-7623 的影响

要确定哪些交易受到 EIP-7623 的影响,我们需要识别红框(新 gas 计算)高于蓝框(当前 gas 计算)的条件。

通过忽略合约创建项并将数值代入参数,我们得出以下条件:如果 EVM 执行所消耗的 gas 小于 6 倍于 calldata 中的 tokens,则交易将产生更高的 gas 成本。

尤其为避免混乱,我们可以将两边同时除以 4 的 tokens_in_calldata。值得一提的是,6 tokens_in_calldata 是一笔交易中用于 calldata 的 gas。

最终的这个方程表明,如果 EVM 执行所消耗的 gas 少于用于 calldata 的 gas 的两倍,则该交易将对 calldata 产生更高的费用。

成本将增加多少?

假设交易的最小 gas 为 21,000,EVM 执行所使用的 gas 为 k,calldata 使用的 gas 为 kx。则交易的总费用可以表示为:

在目前的计算下(没有 EIP-7623),成本将为 21,000+k+kx。因此,EIP-7623 的增加幅度将是:

下图显示了增加率为 k 的函数。

要理解实际影响,让我们查看常见函数方法的 gas 使用统计数据,重点关注大多数用户熟悉的函数。

在去中心化交易所的各种交换函数中,swap(string, address, uint256, bytes) 是使用最广泛的。根据中位数,它会 使用 5,152 gas 处理 calldata 和 175,742 gas 处理 EVM,这之间的比例(34 倍)形成了很大的差异。transfer(address, uint256) 函数用于传输 ERC20 代币,消耗了大约 24,501 gas 为 EVM 执行,几乎是 620 gas 处理 calldata 的 40 倍。

与这些函数类似,大多数日常用户交易在 calldata 和 EVM 执行使用的 gas 之间存在显著差距,这意味着它们不太可能受到 EIP-7623 的影响。

来源

分析提供者 Toni 的展示表明,如果 EIP-7623 被应用,3.02% 的近期以太坊交易将受到影响。他的分析还识别了将受到影响的函数方法,并估算了这些方法的成本增加。

Toni的分析显示,在最近的交易中,若执行 EIP-7623,将有 3.02%的交易受到影响。他的 网站 也展示了哪些函数方法会实际受到影响,以及这些方法的价格将增加多少。

在受到 EIP-7623 影响的函数中,最常用的是 addSequencerL2BatchFromOrigin(),通常用于在以太坊上排序 rollup 交易。另一个受影响的方法是 commitBatches(),常用于 rollup 交易。预计这两个函数的费用将大幅增加,使用这些方法时总体 gas 成本预计将增加约 150%。

然而,rollups 可以利用 blobs 进行数据发布,许多 rollups(如 Arbitrum One 和 Base) 已经这样做。因此,使用 blobs 进行数据发布的 rollups 不太可能受到 EIP-7623 施加的增加成本的严重影响。

对区块大小的影响

EIP-7623 增加了对高量 calldata 使用的交易的 gas 成本。这意味着,过度使用 calldata 的垃圾邮件攻击将需要约三倍的 gas 成本,从而有效将最大区块大小从 2.54 MB 降低到约 0.72 MB。

因此,以太坊网络将更好地应对大量区块持续传播的最坏情况。

最大可能区块大小的减少为每个区块增加包含的 blobs 数量提供了机会。目前,最大 blobs 数量为 6,每个大小为 128 KiB。如果采纳 EIP-7623 并保持相同的最大区块大小,可能将最大 blobs 数量提高到约 18,这意味着 rollups 的最大 TPS 增加了 3 倍。

这个计算涉及一些简化,因为 blobs 和块的传播方法有所不同。然而,主要的好处是执行层和数据可用性层之间的分离加大。由于 blob gas 和执行 gas 拥有独立的费用市场,因此一个市场的扰动不会直接影响到另一个市场。这种分离简化了实现资本效率,因为现在更容易控制以太坊网络在单个区块内可以处理的目标和最大资源。

考虑事项

虽然 EIP-7623 提供了显著优势,但它可能会对小型 rollups 造成影响,因为它需要使用 blobs 而不是 calldata。对于需求较低的 rollups,较大的 128 KiB 的 blob 大小可能需要它们等待更长时间才能填满完整的 blob。这种情况增加了 blob 共享协议 的需求,允许多个 rollups 共享大型 blob 空间,以实现更好的成本效率。

尽管 blob 基础费用目前非常低,使得 blobs 成为一种廉价的 DA 空间,但 需求的突然上升 可能会对这些 rollups 造成显著负担。如果每个区块中 blobs 的数量未能相应增加,EIP-7623 可能会导致提交 DA 交易的 rollups 之间的竞争加剧,因为 DA 的总容量整体在下降。因此,需要评估是否应该同时增加 blobs 的数量以适应这一变化。

另一个考虑因素是决定影响哪些交易的标准阈值。在区块大小和用户体验之间存在权衡。

例如,设定阈值过于激进可能严重减少最大区块大小,但许多交易可能需要为调用 calldata 支付更多的 gas。虽然最大区块大小的变化明显且生动,但很难估计和量化,要求较高的 gas 成本对于 DA 目的交易将对以太坊产生多大的影响。这个阈值只能通过社会协商设定。

此外,标准高度取决于其他由 EVM 操作或 gas 限制设置的参数。例如,如果以太坊未来将区块 gas 限制提高到 3 亿,则 EIP-7623 的阈值也应作出相应的修改,以维持最大区块大小。

结论

EIP-7623 是一项以太坊改进提案,旨在通过调整 calldata 成本来减少最大区块大小,特别针对 DA 目的交易。这一调整可能使非 blob DA 交易的成本提高多达 300%,而大多数日常用户交易则不受影响。

在这篇文章中,我们探讨了该提案背后的动机、其影响、受到影响的交易类型以及可能产生的担忧。

我希望这篇文章能帮助你更好地了解这一最新提案,并提供对其内容的详细见解。如果你有兴趣并想了解更多,你可以继续关注 Toni Wahrstätter 的分析和解释,并参与以太坊魔术师论坛的 公开讨论

  • 原文链接: research.2077.xyz/eip-76...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
2077 Research
2077 Research
https://research.2077.xyz