EIP-8037 的失效模式和状态气体扩展

本文为机器翻译
展示原文

本文回顾了EIP-8037中当用户不愿将50%的预算用于状态创建时出现的两种平衡失效模式,并提出了相应的状态gas扩容措施。极端情况下,如果用户继续像现在这样,每消耗一个常规gas单位就创建相同数量的状态字节,而以太坊将gas上限提高10倍,那么在平衡状态下,常规区块空间的使用率将约为6.2%。这将使通过ePBS和BAL实现的大部分扩容收益付诸东流。如果需求未能实现50/50的支出分配,可以采取两种直接调整措施:(1)采用EIP-8075定价机制,该机制会自动扩展和收缩状态gas上限;或者(2)手动扩展/收缩状态gas上限,可以通过常规硬分叉或“仅状态gas参数”(SGPO)硬分叉来实现。

故障模式

以太坊正致力于扩展 Layer 1,其中最受瞩目的EIP-7732 (ePBS) 和EIP-7928 (BAL) 计划纳入 Glamsterdam 版本。如果不调整状态创建的 gas 成本,状态的增长很可能与 gas 上限的提升大致同步。因此,EIP-8037 大幅提高了状态创建的 gas 成本。这一变化引发的一个担忧( 1 , 2 , 3 )是,用于状态创建的总 gas 消耗比例可能会上升,从而挤占常规 gas 的使用。例如,假设 ePBS 和 BAL 加上计算重新定价机制,允许 gas 上限为 6 亿,这是本文讨论数值的中点。在当前基于EIP-8011计量规则的 EIP-8037 规范下,如果用户对状态 gas 成本的增加不敏感,并且像现在一样创建状态并保持与消耗的常规 gas 比例相同,那么在均衡状态下,常规区块空间的使用率将仅为 6.2% 左右。 ePBS、BAL 和计算重新定价带来的扩展性收益将基本丧失。

当然,我们或许希望当状态创建成本增加时,用户每消耗一个常规 gas 单位所创建的状态字节数会减少,但状态创建需求的价格弹性未知,而且似乎无法可靠地预测。例如,如果用户每消耗一个常规 gas 单位所创建的状态字节数减半,情况会有所改善,The Blockgas 限额的 12.3% 可以被利用。理想情况下,用户每消耗一个常规 gas 单位所创建的状态字节数会比现在减少 8.1 倍。在这种情况下,状态 gas 和常规 gas 的利用率可以达到 50/50(或者更实际一些,如果 EIP-8011 定价采用 max 操作符,则可能更接近 40/40 )。如果状态创建的相对消耗量下降幅度超过这个范围,则会产生相反的效果,用户每年创建的状态数将低于预期的 100 GiB。

图 1 概述了 EIP-8011 定价机制下可能出现的两种平衡失效模式:状态字节创建量过少或常规 gas 消耗量过少。当前设计在用户愿意将预算的 50% 用于常规 gas、50% 用于状态 gas 的情况下达到最优,而与两者之间的相对价格无关。否则,在平衡状态下,其中一方的消耗量将会超过另一方。

图 1
图 1 1442×1178 84.4 KB

图 1. EIP-8037 中应用的 EIP-8011 定价机制的两种失效模式。如果状态创建的需求相对低于研究人员的预测,则均衡状态下创建的状态过少(其价格过高,无法满足需求)。如果状态创建的需求相对高于研究人员的预测,则均衡状态下消耗的普通天然气过少(其价格过高,无法满足需求)。

避免失败

更深层次的问题在于,EIP-8011定价机制无法追踪状态随时间的变化(或者更广义地说,无法追踪任何反映状态操作和非状态操作之间需求平衡的值)。因此,它无法调整状态gas成本,使状态资源和常规资源的需求都达到目标水平。最终,在均衡状态下,状态资源或所有其他资源都可能严重未得到充分利用。有两种方法可以缓解这个问题:

  1. 使用头部变量跟踪状态随时间的变化,并自动调整状态 gas 和常规 gas 之间的平衡,如 EIP-8075 中所述;或者
  2. 在观察到分布不平衡后,手动重新调整状态气体和常规气体之间的平衡,可能仅使用状态气体(或状态增长)参数进行硬分叉。

(1)通过 EIP-8075 避免故障模式

将 EIP-8075 定价机制应用于 EIP-8037 可以以一种合理的方式解决该问题。在 EIP-8075 机制下,状态创建的 gas 成本会随需求变化而调整,从而确保随着时间的推移创建所需数量的状态字节。状态 gas 的目标值和上限会随着 gas 成本自动扩展和收缩(因为定价机制是基于状态字节运行的)。计量 gas 的计算方法是常规 gas 消耗量与归一化状态 gas 消耗量的平均值。这使得常规 gas 的消耗量能够随时间推移保持在目标水平,同时协议也能保证创建目标数量的状态字节。

图 2
图 2 2002×1178 171 KB

图 2. EIP-8075 会根据需求自动调整 gas 成本,以确保长期达到目标状态字节的创建量。为此,EIP 会调整 gas 目标值和限制,同时调整 gas 成本,从而消耗目标数量的状态字节。

(2)手动避免常规/SGPO 硬分叉中的故障模式

第二种方案是借鉴 EIP-8075 的思路,但手动进行调整。理想情况下,状态气目标值和限值可以像 EIP-8075 那样自由伸缩(图 2),从而使计量方程能够同时响应常规气和状态气。如果采用 SGPO 硬分叉的方式实现,则可以引入并启动stateSchedule

{ "stateSchedule" : { "gloas" : { "target" : 107374182400 , "scale" : 100 } } , "gloasTime" : "TBD" }

scale参数允许状态 gas 限制相对于The Blockgas 限制进行扩展或收缩,而target参数设置满负荷运行时状态的年度增长率。state_gas_limit state_gas_limit计算公式为state_gas_limit = gas_limit * stateSchedule.scale // 100cost_per_state_byte计算方法是将以下表达式中的gas_limit替换为state_gas_limit

cost_per_state_byte = state_gas_limit * 7200 * 365 // (stateSchedule.target * 2 )

当计量函数F最终应用时(其中F可以是max此处讨论的任何其他函数),其应用方式与 EIP-8075 中应用于归一化状态气体计量值的方式相同: F(regular_gas, state_gas * 100 // stateSchedule.scale) 。由于需求弹性未知,单次手动修正可能无法达到完美效果。因此,如果均衡状态下常规气体的消耗量过低,为了保持比例关系,略微“超调”似乎是合理的。此外,还可以通过设定高于 0.5 的状态气体目标比例来实现更普遍的“超调”,如本文所述。

需要注意的是, scale参数是引入SGPO硬分叉的关键依据。如果没有scale参数,以太坊可能会进入图1所示的故障模式2,从而失去ePBS和BAL带来的部分扩容收益。虽然调整target增长的能力也值得欢迎,但仅凭这一点并不足以构成实现复杂性的理由。换句话说, target增长和scale都可以在常规硬分叉中设置和调整,只有缺少scale参数才可能需要SGPO硬分叉。

程式化的平衡

通过关注两种资源之间的相对需求弹性,可以初步分析 EIP-8037 中 EIP-8011 定价下的均衡结果(如这里这里所示,关于需求弹性的一般性论述也可在此处找到)。

Gas 费用固定,两种资源的基准费用相同。在实施 EIP-8037 之前,70% 的 Gas 用于按常规 Gas 收费的操作, G_1= 0.7,30 % 的 Gas 用于状态创建 G_2 = 0.3 如果任何给定的 Gas 限额下,常规 Gas 和状态 Gas 的需求在 EIP-8037 规定的固定 Gas 费用下达到平衡,使得用户在两者上花费的 Gas 量相等,则该机制将按预期完美运行。此时,两种资源的 Gas 花费比例r/ r为 1。

r = \frac{G'_1}{G'_2} = 1.
r = G′1G′2 = 1.

假设状态创建的 gas 成本增加p倍, d表示在给定成本增加的情况下,用户愿意每消耗一个常规 gas 单位而创建的状态字节数减少的倍数。那么消耗的常规 gas 和状态 gas 之间的新比例为:

r = \frac{G_1}{G_2(p/d)} = \frac{G_1 d}{G_2 p}。
r = G 1 G 2 ( p / d ) = G 1 d G 2 p

在平衡状态下,使用最大函数(如 EIP-8037 中)并忽略区块变异性如何降低平衡比例,计量维度(常规气体和状态气体中较大的那个)将位于目标位置。然后,用户将按气体限制的比例G^*_1 = \min(0.5, 0.5r) G 1 = min ( 0.5 , 0.5 r )消耗常规气体,按气体限制的比例G^*_2 = \min(0.5, 0.5/r) G 2 = min ( 0.5 , 0.5 / r )消耗状态气体。

在 6000 万 gas 的情况下,EIP-8037 基准成本增加分别为:存储槽位 1.17 倍,账户 3.29 倍,代码 3.67 倍。基于当前增长轨迹(存储快照、账户快照、合约代码),从区块 17,165,429 到区块 21,000,000,这三个指标的 gas 成本加权平均增幅约为 1.89 倍。我们已充分认识到当前加权平均值的不确定性。

研究由 BAL、ePBS 和重新定价机制促成的 10 倍扩展,根据 EIP-8037 规范,加权平均 Gas 成本增幅将为 18.9 倍。因此,设定p=18.9 假设用户不改变其当前的用气模式( d=1 该比率为

r=0.7/(0.3 \times 18.9)=0.123。
r = 0.7 / ( 0.3 × 18.9 ) = 0.123。

用户届时将仅按一定比例消耗普通汽油

G^*_1 = 0.5 \times 0.123 = 0.062
G 1 = 0.5 × 0.123 = 0.062

在平衡状态下,gas 限制为G^*_1 = 0.123 G 1 = 0.123 。通过恢复平衡( r=1 r = 1 )可以实现每单位常规 gas 状态字节消耗的最优减少,这意味着:

d^* = \frac{G_2p}{G_1} = \frac{0.3\cdot 18.9}{0.7} = 8.1.
d = G 2 p G 1 = 0.3 18.9 0.7 = 8.1。

展望未来

随着以太坊规模的不断扩大,预测平衡 gas 支出的状态 gas 成本的难度也随之增加,最坏情况的严重程度也随之加剧。例如,在 L1 扩容至 30 倍时,如果用户不改变每次常规 gas 使用的状态字节创建量,则均衡状态下常规 gas 的使用率仅为 2.1%(但此时高昂的 gas 成本应该会促使用户大幅调整其创建的状态量)。理想情况下,在达到 30 倍扩容时,应该已经部署了更全面的解决方案。这样的解决方案包括像EIP-7999中描述的那样,建立一个完整的多维费用市场,以及通过工程手段更好地处理状态增长(例如,可能使部分状态过期)。


来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论