EIPs/EIPS/eip-3978.md

50 lines
1.7 KiB
Markdown
Raw Normal View History

---
eip: 3978
title: Gas refunds on reverts
description: Do not erase gas refunds on transaction subcall reverts, due users pay a lot of gas for storage non-modification.
author: Anton Bukov (@k06a), Mikhail Melnik (@ZumZoom)
discussions-to: https://ethereum-magicians.org/t/eip-3978-gas-refunds-on-reverts/7071/
status: Draft
type: Standards Track
category: Core
created: 2021-09-16
---
## Abstract
Since [EIP-3298](./eip-3298.md) gas refunds works for storage restores only inside the same transaction. For example [ERC-20](./eip-20.md) `approve` + `transferFrom` flow between 2 smart contracts according to [EIP-2200](./eip-2200.md) and [EIP-2929](./eip-2929.md) 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](https://creativecommons.org/publicdomain/zero/1.0/).