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 |
Table of Contents
本提案描述了在客户端中引入受控的 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 limitGL_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 limitGL_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 limitGL_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.