EIPs/EIPS/eip-3978.md
Anton Bukov 2a0973b6aa
[DRAFT] EIP-3978: Introduce gas refunds on reverts (#3978)
* Introduce gas refunds on reverts

* Update EIPS/eip-3978.md

Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>

* Fixes

* Update EIPS/eip-3978.md

Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>

* Fix narrative

* Update EIPS/eip-3978.md

Co-authored-by: Micah Zoltu <micah@zoltu.net>

* Update EIPS/eip-3978.md

Co-authored-by: Micah Zoltu <micah@zoltu.net>

Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Micah Zoltu <micah@zoltu.net>
2021-09-24 13:32:52 +00:00

1.7 KiB
Raw Blame History

eip title description author discussions-to status type category created
3978 Gas refunds on reverts Do not erase gas refunds on transaction subcall reverts, due users pay a lot of gas for storage non-modification. Anton Bukov (@k06a), Mikhail Melnik (@ZumZoom) https://ethereum-magicians.org/t/eip-3978-gas-refunds-on-reverts/7071/ Draft Standards Track Core 2021-09-16

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 and related rights waived via CC0.