You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EIP-3529后清除存储变量是否已无意义?实测存疑

EIP-3529后存储操作Gas退款测试分析

测试合约

针对EIP-3529实施后Gas退款减少的情况,编写了以下Solidity合约进行测试:

// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.23;

contract GasStorage {

    event GasLeft(uint256 gasLeft);

    uint256[] private arr;
    // 初始值设为uint256最大值或0
    uint256 val1 = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;

    constructor() { }

    function gasGasGas() external {
        emit GasLeft(gasleft());

        // 模拟高Gas消耗操作
        for (uint256 i = 0; i < 10; i++) {
            arr.push(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        }

        // 以下为四种存储变更操作的测试分支(每次测试仅启用其中一种)
        // 无操作
        // 设置为零:val1 = 0;
        // 设置为非零值:val1 = 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef;
        // 设置为最大值:val1 = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;

        emit GasLeft(gasleft());
    }
}

测试结果

测试基于Hardhat及Hardhat Network,所有存储变更操作均产生Gas消耗,未出现Gas减少或零消耗的情况:

当val1初始值为0x0时

  • 无操作:总Gas消耗246898
  • 设置为非零值:269004(较无操作场景+22106)
  • 设置为最大值:269004(较无操作场景+22106)
  • 设置为零:249104(较无操作场景+2206)

当val1初始值为uint256最大值时

  • 无操作:总Gas消耗246898
  • 设置为非零值:251904(较无操作场景+5006)
  • 设置为最大值:249104(较无操作场景+2206)
  • 设置为零:251904(较无操作场景+5006)

疑问与困惑

测试中发现,即使将最大值存储清零仍会消耗Gas。已知EIP-3529的核心目标是阻止Gas代币通过存储滥用获取退款,但目前测试结果显示清理存储完全不值得——未发现任何接近零Gas的清理场景。是否在测试逻辑或对EIP-3529的理解上存在遗漏?

注:测试中加入arr循环是为了模拟高Gas消耗,原以为需要满足退款覆盖交易20%的要求,现在对此必要性存疑。

内容的提问来源于stack exchange,提问作者jsonDoge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:57:06