EIP-3756 解读:为以太坊区块 Gas Limit 设定协议内上限(30,000,000)
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
导读
EIP-3756(Gas Limit Cap)是一项提交于 2021 年、面向以太坊共识层(Core 类别)的标准轨道提案:它建议在协议层面直接设定区块gas_limit的硬性上限为 30,000,000,凡是gas_limit超过该值的区块一律视为无效。本文以 EIPS/eip-3756.md 为骨架,结合本仓库中 EIP-7783、EIP-7790、EIP-7825、EIP-1559 等关联提案,系统讲解该提案的动机、规范、设计权衡与安全考量,帮助你理解"谁来控制区块大小"这一以太坊治理与扩容议题中的关键一环。
提案概览
该文档的元信息(Preamble)记录了提案的基本身份:
| 字段 | 值 |
|---|---|
| EIP 编号 | 3756 |
| 标题 | Gas Limit Cap(Gas Limit 上限) |
| 描述 | Set an in-protocol cap for the gas limit |
| 作者 | lightclient (@lightclient) |
| 状态 | Stagnant(停滞) |
| 类型 | Standards Track(标准轨道) |
| 类别 | Core(核心,需共识分叉) |
| 创建日期 | 2021-08-21 |
按照 EIP-1 的流程定义,Core 类别意味着该改动需要一次网络升级(consensus fork)才能生效;而Stagnant状态表示提案在 Draft/Review/Last Call 阶段超过 6 个月无进展后被算法性地标记为停滞,作者或 EIP 编辑可以将其重新激活回 Draft 状态。当前仓库中该提案处于停滞状态,说明它未被纳入任何已确定的主网升级,属于"已归档但可复活"的候选设计。
摘要:一行话的规范
提案的 Abstract 非常简洁:
为 gas limit 设定一个协议内上限:30,000,000。
即:自某个分叉区块N起,任何gas_limit大于30,000,000的区块被视为无效区块。这是整份 EIP 的技术核心——一个共识级的区块有效性约束,不依赖矿工或验证者自律,而是由协议直接拒绝违规区块。
动机:高 Gas Limit 带来的双重压力
提案指出,过高的 gas limit 会给网络带来两类压力:
- 良性情形下的不可持续增长:更大的区块意味着状态(state)与历史数据(history)的增长速度超过网络可持续承载的能力。区块越大,全节点存储、同步、执行的开销越高,去中心化程度随之下降。
- 恶意情形下的攻击放大:过高的 gas limit 会放大某些拒绝服务(Denial-of-Service)攻击造成的破坏。攻击者可以把更多恶意/重计算交易塞进单个区块,使受害节点在单个区块内承受远超预期的处理负担。
这一动机与仓库中其他提案相互印证:例如 EIP-2045 明确指出,提高区块 gas limit 会成比例地加快状态增长,除非同时等比例上调SSTORE、CREATE等状态膨胀操作码的费用——这正是 EIP-3756 所担忧的"良性情形"的量化版本。
规范:最小化的共识改动
规范部分只有一句话,这是以太坊 Core EIP 中罕见的极简设计:
自分叉区块
N起,gas_limit大于30,000,000的区块视为无效。
实现层面的含义非常直接:
- 客户端在区块验证逻辑中新增一条硬性检查:
if block.gas_limit > 30_000_000: reject; - 分叉区块
N需要在实际激活时确定(提案中未定死,属于 TBD 项); - 该检查属于区块有效性(block validity)判定,而不是交易有效性判定——它约束的是出块方提交的区块头,而不是单笔交易。
参考同类提案的写法,EIP-7783 在描述"受控 gas limit 增长策略"时,将当时主网的当前 gas limit 记为30_000_000("initialGasLimit to the current gas limit (30_000_000)"),这印证了 EIP-3756 选值的历史背景:30M 是 2021 年前后以太坊主网的实际运行水位,将其固化为上限相当于"以现状为天花板"。
理由(Rationale):为什么这样设计
为什么要给 Gas Limit 设上限
提案的核心论据是治理与安全主权的归属问题:
- 当前 gas limit 由区块提议者(block proposer)控制,他们理论上可以把 gas limit 调到任意他们想要的值;
- 这给了提议者绕开 EIP 流程和 All Core Devs(核心开发者)会议共识的能力——他们可以单方面做出影响网络安全性与去中心化的协议级决定;
- 通过协议内硬上限,把"区块大小能膨胀到什么程度"这一安全关键参数从提议者手中收回,交还给社区协商流程。
换言之,EIP-3756 不是要取消提议者调节区块大小的能力,而是要剥夺他们无限上调的能力。这一立场与后续提案一脉相承:EIP-7783 批评"gas limit 常由矿工/验证者按个人偏好手动调整,导致区块大小与网络性能不可预测",EIP-7790 则为受控增长设定了60_000_000的上限,明确"防止 gas limit 无限增长、避免网络被超大区块压垮"——两者都延续了 EIP-3756 提出的"上限必须存在"这一核心思想。
为什么不是固定 Gas Limit
提案特别强调保留提议者下调gas limit 的能力:
- 如果网络变得不稳定,或正遭受特定类型的攻击,提议者需要能快速把 gas limit 降下来;
- 因此本提案只约束上限(
30,000,000以上无效),低于30,000,000 的任意值仍然合法。
这是"上限(cap)"与"固定值(fixed value)"的关键区别:cap 是单向约束,保留了系统的弹性伸缩能力;fixed value 则是双向锁死,会剥夺网络在压力下的自救手段。这一设计在 EIP-1559 的框架下也自洽——EIP-1559 将区块 gas target 设定为block_gas_limit / elasticity_multiplier,并依据上一区块的实际用量上下调节 base fee,区块 gas limit 本身仍是一个可被协议内规则约束的独立参数。
与生态中相关提案的关系
EIP-3756 虽然停滞,但它提出的"gas limit 上限"概念在后续提案中被反复继承与细化:
| 关联提案 | 关系 | 状态 |
|---|---|---|
| EIP-7783(受控 gas limit 增长策略) | 提出线性/阶梯式自动上调 gas limit,同样以30_000_000为主网现状、并引入gasLimitCap上限参数 | Stagnant |
| EIP-7790(EIP-7783 的参数化) | 为受控增长指定具体参数,gas limit cap 为60_000_000,并同样强调防止网络被超大区块压垮 | Stagnant |
| EIP-7825(交易级 gas limit 上限) | 把"上限"思想从区块级延伸到单笔交易的 gas limit(主网示例为2^24 = 16,777,216) | 进行中 |
| EIP-2045(燃料成本与容量) | 论证提高 gas limit 与状态增长、操作码定价之间的耦合关系,是 EIP-3756 动机的量化支撑 | Draft |
| EIP-1559(费用市场) | 定义了区块 gas target 与弹性系数,gas limit 仍是区块有效性中的独立参数 | Final |
从这些提案可以看出,围绕"区块/交易 gas limit 到底该由谁、以何种规则决定",社区逐步形成了"协议内上限 + 受控增长 + 交易级上限"的组合方案,而 EIP-3756 正是这一思路最早的简洁表达之一。
向后兼容性、测试与安全考量
向后兼容性
提案原文声明"无向后兼容问题(No backwards compatibility issues)"。原因在于:30,000,000 是当时主网的实际 gas limit 水平,规范只拒绝高于该值的区块,而历史区块与现有交易格式均不受影响。不过需要说明,任何 Core 类共识改动实际激活时都需要客户端升级与网络协调(fork),这一点可以从 EIP-1 对 Core EIP 需经 All Core Devs 流程并取得实施支持的描述中确认。
测试用例
原文档标注为TBD(待定)。从规范的可测试性出发,可以推断理想的测试覆盖包括:
- 构造
gas_limit恰为30,000,000的区块——应为合法; - 构造
gas_limit为30,000,001的区块——应被拒绝; - 分叉区块
N前后的行为差异(N之前不受限,N之后受限); - 确认低于上限的区块(例如紧急下调场景)不受影响。
需要注意的是,这些测试细节是本文基于规范语义的推演,原提案尚未提供具体测试向量。
安全考量
原文档标注"无安全考量(No security considerations)"。结合动机与理由可以理解其立场:该改动降低了由 gas limit 无上限膨胀带来的 DoS 放大与状态增长风险,同时通过保留下调能力避免削弱网络应对攻击的灵活性,因此作者认为不引入新的安全面。当然,停滞状态的提案未经过完整的社区安全评审,这一点应在引用时如实说明。
如何继续深入
- 阅读提案原文:EIPS/eip-3756.md;
- 了解 Core EIP 的流程与状态定义:EIPS/eip-1.md;
- 对比受控增长与上限思路:EIPS/eip-7783.md、EIPS/eip-7790.md;
- 了解交易级 gas limit 上限的最新演进:EIPS/eip-7825.md;
- 结合费用市场机制理解 gas limit 的角色:EIPS/eip-1559.md。
总结
EIP-3756 是一份极简但立意明确的 Core 提案:用一行协议规则,把区块 gas limit 的膨胀空间锁死在 30,000,000 之内,同时保留提议者向下调节的灵活性。它提出的"协议内上限"理念,在此后的受控增长(EIP-7783/7790)与交易级上限(EIP-7825)提案中持续回响。尽管该提案目前处于 Stagnant 状态、未被纳入任何已确定升级,但它清晰呈现了"区块大小上限"这一参数在以太坊治理、安全与扩容三角中的核心位置,是理解以太坊 gas 机制演进的重要历史节点。
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考