⚠️ Draft
Standards Track: Core
EIP-7778: 不含退款的区块 Gas 限制计算
EIP-7778: 不含退款的区块 Gas 限制计算
通过从区块 Gas 计算中排除退款来防止绕过区块 Gas 限制
Authors | Ben Adams (@benaadams), Toni Wahrstätter (@nerolation) |
---|---|
Created | 2024-10-01 |
Discussion Link | https://ethereum-magicians.org/t/eip-7778-prevent-block-gas-smuggling/21234 |
摘要
此 EIP 修改了区块 gas 计算机制,以防止绕过区块 gas 限制。它建议 gas 退款,特别是那些来自将存储槽设置为零的 SSTORE 操作的退款,不应减少计入区块 gas 限制的 gas,同时仍然适用于用户的交易 gas 成本。
动机
目前,来自清除存储槽(设置为零)等操作的 gas 退款,既减少了用户的交易 gas 成本,也减少了计入区块 gas 限制的 gas。这在执行的计算工作量与区块中计算的 gas 之间造成了差异。
示例:区块 20878522
显示净使用量为 28.5 MGas,但包含 4.01 MGas 的退款,使总使用量达到 32.51 MGas——超过区块 gas 限制 2.51 MGas。
这种机制可以被利用,在一个区块中执行比 gas 限制本意允许的更多的操作,可能导致:
- 由于超大区块导致的网络不稳定
- 拒绝服务向量
- 计算负载超过预期的区块 gas 限制
规范
Gas 计算变更
- 用户 Gas 成本(不变):
- 用户继续收到符合条件的 операций 的 gas 退款(例如,将存储设置为零)
- 交易 gas 成本保持不变:
tx.gas_used = gas_used - gas_refund
- 区块 Gas 计算(已修改):
- 在计算用于强制执行区块 gas 限制的 gas 时,不减去退款
- 区块 gas 计算变为:
block.gas_used += gas_used
(不减去退款) - 反映实际减少的计算工作量的存储折扣(例如,热存储访问,恢复到原始值)仍然适用于区块 gas 计算
区块 Gas 限制实施
- 所有交易使用的未退还 gas 总和不得超过区块 gas 限制
- 这确保了区块 gas 限制准确反映了计算和存储工作负载
理由
使 Gas 限制与计算工作量对齐
- 区块 gas 限制旨在约束每个区块的计算负载
- 引入 gas 退款是为了激励“清理”状态,而不是允许超过计算限制
- 通过从区块 gas 计算中排除退款,我们确保区块 gas 限制有效地约束计算负载
保持用户激励
- 用户仍然收到 gas 退款,从而保持了高效状态管理的激励措施
- 仅更改区块级别约束的计算方式,而不更改单个用户的经济模型
向后兼容性
- 此更改不向后兼容,需要硬分叉
- 单个交易的用户和开发者体验保持不变
- 只有区块生产者需要调整其交易选择算法,以适应新的 gas 计算规则
测试用例
- SSTORE 操作:
- 将存储设置为零:用户收到退款,但区块 gas 计算使用全部成本
- 验证包含许多存储清除操作的区块仍然遵守 gas 限制
- 区块 Gas 限制边缘情况:
- 构建具有不同数量的可退款操作的区块
- 确保区块无法通过退款机制超过 gas 限制
- 交易 Gas 与区块 Gas:
- 验证用户的交易成本保持不变
- 确认区块 gas 计算正确地排除了退款
安全注意事项
- 消除了利用 gas 退款来超过区块计算限制的潜在拒绝服务向量
- 通过对计算工作量实施更严格的限制,提高了区块处理时间的可预测性
- 阻止矿工/验证者包含集体包含比预期更多计算工作量的交易
版权
版权及相关权利通过 CC0 1.0 Universal 放弃。
Citation
Please cite this document as:
Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), "EIP-7778: 不含退款的区块 Gas 限制计算 [DRAFT]," Ethereum Improvement Proposals, no. 7778, October 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7778.