EIP-8358 Net Gas Metering for Account Changes

Discussion topic for EIP-8358 Net Gas Metering for Account Changes

EIP PR: Add EIP: Net Gas Metering for Account Changes by rakita · Pull Request #12058 · ethereum/EIPs · GitHub

Update Log

  • 2026-08-05: initial draft

Abstraction:

This EIP introduces net gas metering for account changes, mirroring the scheme EIP-2200 established for storage.
An account counts as changed once its balance or nonce differs from its value at the start of the transaction.
The value transfer cost of CALL and CALLCODECALL_VALUE, defined by EIP-8038 as ACCOUNT_WRITE + CALL_STIPEND — is replaced by CALL_VALUE_BASE_GAS, itemized as the stipend plus the EIP-7708 transfer log and consumed in full when charged, plus CLEAN_BALANCE_CHANGE_GAS for each modified account whose balance or nonce has not yet changed in the transaction; already-changed accounts add nothing.
When a transfer returns an account to its original balance while its nonce is unchanged, BALANCE_RESET_REFUND is added to the refund counter, a value-bearing call runs its callee with at least CALL_STIPEND gas. transfer between two unmodified accounts costs 8000 gas, matching the current effective cost; a transfer between two already-modified accounts costs only the base of 4000 gas.

The gas for a single transfer on the updated account remains higher than the WARM_ACCESS + TRANSFER_LOG_COST expectation.

You have a stipend that you can’t ignore, stipend is part of base cost of transfer.

So I introduced a stipend gas limit floor, to enforce that a minimum of gas is sent to subcall. In essence, if gas_limit is higher than stipend, base cost is warm_access+log_cost

And you need to take account of both caller and callee getting changed

In spec, you charge CALL_VALUE_BASE_GAS = 4000, but it is not clarified whether the remainder of this stipend is returned to the caller. I would expect the charge to be WARM_ACCESS + TRANSFER_LOG_COST + STIPEND for updated account, with the unused portion of the stipend returned to the caller.