Alert Source Discuss
⚠️ Draft Informational

EIP-7783: 添加受控 Gas Limit 增加策略

添加一个受控的 gas limit 增加策略。

Authors Giulio Rebuffo (@Giulio2002)
Created 2024-10-06
Discussion Link https://ethereum-magicians.org/t/eip-7783-add-controlled-gas-limit-increase-strategy/21282

本提案描述了在客户端中引入受控的 gas limit 增加策略,以确定特定区块的 gas limit 并设置为默认值,同时保留将来将其更改为固定值的可能性。

摘要

本 EIP 提议引入一种新的 gas limit 管理机制,该机制随时间自动增加区块 gas limit。增量增长由固定速率控制,确保可预测的网络扩展,同时防止区块大小突然激增。此策略旨在用作默认设置,并可选择在需要时切换到固定 gas limit(或不同的参数)。

动机

可预测的 Gas Limit 增长

  • 当前问题:
    • 以太坊网络面临日益增长的需求,但对 gas limit 的更改通常由矿工或验证者根据他们的偏好手动调整,这可能导致不可预测的区块大小和网络性能问题。
  • 变更需求:
    • 有系统且可预测的 gas limit 增加将有助于扩展网络,同时使生态系统有时间适应更大的区块大小,而无需依赖网络参与者的临时决策。

具有停用保护的渐进式增加

  • 受控增长:
    • 本 EIP 提议在指定的时间内逐步增加 gas limit,而不是突然或不可预测的变化,从而确保平稳过渡到更高的交易吞吐量,同时仍将 gas limit 的治理权掌握在社区手中。
  • 自动停用:
    • 一个安全停用区块将在指定时间后停止增加,防止 gas Limit 无限增长,并允许社区重新评估网络的需求。

规范

有不同的方法可以实现受控的 gas limit 增加策略。以下是可以使用的三种可能的策略:

线性 Gas Limit 增加策略

添加一个新的“Gas Limit”选择策略,该策略接收区块号 N 并输出该区块的 Gas Limit GL。该策略如下:

  • 区块 t 处的 gas limit GL_t 计算如下:
def compute_gas_limit(blockNum: int, blockNumStart: int, initialGasLimit: int, r: int, gasLimitCap: int) -> int:
  if blockNum < blockNumStart:
    return initialGasLimit
  else:
    return min(gasLimitCap, initialGasLimit + r * (blockNum - blockNumStart))

其中:

  • blockNum 是正在计算 gas limit 的区块号。
  • blockNumStart 是 gas limit 增加开始的区块号。
  • initialGasLimit 是区块 blockNumStart 处的初始 gas limit。
  • r 是每个区块 gas limit 增加的速率。
  • gasLimitCap 是可以达到的最大 gas limit。

如果我们将 blockNumStart 设置为当前区块号,initialGasLimit 设置为当前 gas limit (30_000_000),r 设置为 6,gasLimitCap 设置为 60_000_000,则 gas limit 将在两年内每个区块增加 6 gas,在 $\approx$ 2 年结束时达到 3000 万 gas。 compute_gas_limit 的结果将是提案者为区块 blockNum 设定的 gas limit 目标。这些都不是在协议级别强制执行的,提案者仍然需要遵循与 gas limit 相关的协议规则。

阶梯式线性 Gas Limit 增加策略

添加一个新的“Gas Limit”选择策略,该策略接收区块号 N 并输出该区块的 Gas Limit GL。该策略如下:

  • 区块 t 处的 gas limit GL_t 计算如下:
def compute_gas_limit(blockNum: int, blockNumStart: int, r: int, step_blocks_interval: int, gasLimitCap: int) -> int:
  if blockNum < blockNumStart:
    return initialGasLimit
  else:
    return min(gasLimitCap, initialGasLimit + r * ((blockNum - blockNumStart) // step_blocks_interval))

其中:

  • blockNum 是正在计算 gas limit 的区块号。
  • blockNumStart 是 gas limit 增加开始的区块号。
  • initialGasLimit 是区块 blockNumStart 处的初始 gas limit。
  • step_blocks_interval 是 gas limit 增加后的区块数(冷却期)。
  • r 是每个步骤 gas limit 增加的速率。
  • gasLimitCap 是可以达到的最大 gas limit。

此策略具有三个主要优点:

  • 它在每个步骤中提供更大、更可见和更明显的指标变化。
  • 它允许在冷却期内收集更稳定的指标。
  • 它使社区有更多时间评估 gas limit 增加的影响并采取相应措施。

指数 Gas Limit 增加策略

添加一个新的“Gas Limit”选择策略,该策略接收区块号 N 并输出该区块的 Gas Limit GL。该策略如下:

  • 区块 t 处的 gas limit GL_t 计算如下:
def compute_gas_limit(blockNum: int, blockNumStart: int, doubling_blocks_interval: int) -> int:
  if blockNum < blockNumStart:
    return initialGasLimit
  else:
    return min(gasLimitCap, initialGasLimit * (2 ** ((blockNum - blockNumStart) / doubling_interval)))

其中:

  • blockNum 是正在计算 gas limit 的区块号。
  • blockNumStart 是 gas limit 增加开始的区块号。
  • initialGasLimit 是区块 blockNumStart 处的初始 gas limit。
  • doubling_blocks_interval 是 gas limit 加倍后的区块数。

原理

可预测的增长

  • 系统调整:
    • 逐步增加避免了 gas limit 的突然激增,这可能会破坏网络的稳定性。相反,它提供了一个平稳的过渡,使生态系统有时间适应更大的区块大小。

具有停用区块的受控限制

  • 自动保护:
    • 包含停用区块可确保 gas limit 不会无限增加,从而防止对计划外增长的网络性能产生潜在的负面影响。
  • 社区共识:
    • 停用区块仅用作社区评估 gas limit 增加影响的检查点,但是,在两年内,社区可以随时决定停止增加,也可以在需要时切换到固定 gas limit。

向后兼容性

不需要硬分叉

安全考虑

  • 受控的 gas limit 增加策略旨在防止可能导致网络不稳定或安全漏洞的突然变化。
  • 事实上,验证者可以在发生 DOS 攻击或其他问题时重新调整 gas limit,这使得网络比以悬崖式的方式手动增加 gas limit 更安全。

版权

版权及相关权利通过 CC0 1.0 Universal 放弃。

Citation

Please cite this document as:

Giulio Rebuffo (@Giulio2002), "EIP-7783: 添加受控 Gas Limit 增加策略 [DRAFT]," Ethereum Improvement Proposals, no. 7783, October 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7783.