EIP3978 - Gas refunds on reverts
# Abstract
Since EIP-3298 gas refunds works for storage restores only inside the same transaction. For example ERC-20 approve
+ transferFrom
flow between 2 smart contracts according to EIP-2200 and EIP-2929 will cost nearly to 21600
gas with gas refund counter 20000
. But in case of reverting this subcall (containing both approve
and transferForm
) gas refund will be erased, while smart contract storage will remain unmodified. I think it should keep storage access costs, but still refund modification costs.
# Motivation
Сurrent full cancelling of gas refunds on internal reverts is too unfair. Users pay for non-modification same cost as for modification.
# Specification
Let's count all SSTORE gas costs within every subcall, excluding access costs. And on reverting any subcall let's not erase refund counter, but:
tx.gas_refund_counter = tx.gas_refund_counter - call.gas_refund_counter + MIN(call.gas_refund_counter, call.all_sstores_gas_cost)
# Rationale
TBD
# Backwards Compatibility
No known backward incompatibilities.
# Test Cases
TBD
# Reference Implementation
TBD
# Security Considerations
TBD
# Copyright
Copyright and related rights waived via CC0 (opens new window).