mirror of
https://github.com/status-im/EIPs.git
synced 2025-02-22 11:48:19 +00:00
EIP-3300: Phase Out Refunds (#3300)
* wip phase out refunds * update create date and eip number * discussions-to * rename file to eip# * fix discussions-to url error from Travis * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * Update EIPS/eip-3300.md Co-authored-by: Micah Zoltu <micah@zoltu.net> * initial clarification * specify 1283 behavior * specify negative refund removal * start specifying activation costs and then simplify by disregarding them * cleanup activation cost specifications Co-authored-by: Micah Zoltu <micah@zoltu.net>
This commit is contained in:
parent
f1ded2aa9b
commit
e37dc7d141
78
EIPS/eip-3300.md
Normal file
78
EIPS/eip-3300.md
Normal file
@ -0,0 +1,78 @@
|
||||
---
|
||||
eip: 3300
|
||||
title: Phase out refunds
|
||||
author: William Morriss (@wjmelements)
|
||||
discussions-to: https://ethereum-magicians.org/t/eip-3300-phase-out-refunds/5434
|
||||
status: Draft
|
||||
type: Standards Track
|
||||
category: Core
|
||||
created: 2020-02-26
|
||||
---
|
||||
|
||||
## Simple Summary
|
||||
Phases out the `SSTORE` and `SELFDESTRUCT` gas refunds.
|
||||
|
||||
## Abstract
|
||||
This EIP would define a block when the `SSTORE` and `SELFDESTRUCT` refunds would begin to diminish.
|
||||
The refund would step linearly downward, eroding the implicit value of such refunds at an accelerating pace.
|
||||
|
||||
## Motivation
|
||||
Refunds increase block elasticity, so the block gas target can exceed the number established by miners by up to 2x.
|
||||
This can cause hesitancy for miners to increase the block gas target.
|
||||
|
||||
Refunds, tokenized or not, are valuable to their holders, especially during congestion.
|
||||
If refunds must be removed, a gradual change in their value would be less-disruptive to the gas market than sudden abolition.
|
||||
Refund consumption would proceed, especially during periods of congestion, and the refunds would be cleaned up from the state.
|
||||
Refund creation, driven by demand, would naturally diminish as the efficiency of the refunds fall.
|
||||
As the refund value approaches the activation cost, the implicit value of the refunds will approach zero, but in periods of congestion they will be cleaned up.
|
||||
|
||||
This change is less work for the protocol developers than compensation and cleanup, while likely still achieving cleanup.
|
||||
|
||||
|
||||
## Specification
|
||||
Parameters:
|
||||
* `FORK_BLOCK_NUM`: EIP-3300 activation block
|
||||
* `REFUND_DECAY_STEP`: 1 gas
|
||||
* `REFUND_DECAY_FREQUENCY`: 100 blocks
|
||||
|
||||
Computed:
|
||||
* `REFUND_DECAY`: `REFUND_DECAY_STEP * ceil((block.number + 1 - FORK_BLOCK_NUM) / REFUND_DECAY_FREQUENCY)`
|
||||
|
||||
|
||||
On the block this EIP activates, and again every `REFUND_DECAY_FREQUENCY` blocks, all gas refunds, including `SELFDESTRUCT` and `SSTORE` would diminish by `REFUND_DECAY_STEP`, until 0.
|
||||
The current difference is called the `REFUND_DECAY`, which shall be subtracted from each gas refund.
|
||||
|
||||
For gas-cost regimes with refund removals that cancel prior refunds, the invariant that the refund counter cannot go negative will be preserved by diminishing the magnitude of those removals by `REFUND_DECAY`, until 0.
|
||||
|
||||
|
||||
### EIP-2929
|
||||
The refunds as of EIP-2929 are as follows:
|
||||
|
||||
* 24000 for SELFDESTRUCT
|
||||
* `SSTORE_RESET_GAS - SLOAD_GAS` (5000 - 100)
|
||||
* `SSTORE_SET_GAS - SLOAD_GAS` (20000 - 100)
|
||||
* `SSTORE_SET_GAS - SLOAD_GAS` (20000 - 100)
|
||||
* `SSTORE_CLEARS_SCHEDULE` (15000)
|
||||
|
||||
|
||||
Each of these refunds would be decreased by the current `REFUND_DECAY`.
|
||||
|
||||
There is also a case where `SSTORE_CLEARS_SCHEDULE` is removed from the refund counter.
|
||||
That removal will also diminish by `REFUND_DECAY_STEP` until 0, maintaining the non-negative refund counter invariant.
|
||||
|
||||
|
||||
## Rationale
|
||||
Persisted refunds would become worthless before they fall below their activation cost.
|
||||
Once the refunds are worthless, they can be removed by another hard fork without waiting for 0.
|
||||
The rate of diminishing specified would currently require (24000-5000) * 100 = 1,900,000 blocks for `SELFDESTRUCT` and (15000-5000) * 100 = 1,000,000 blocks for `SSTORE`.
|
||||
This timeframe is currently about a year, which should be enough flexibility for the remaining refunds to be consumed.
|
||||
|
||||
|
||||
## Backwards Compatibility
|
||||
This proposal breaks gas refunds, which contribute to block elasticity.
|
||||
The effect of this will be increased gas price volatility: higher highs and lower lows.
|
||||
|
||||
Because the refund counter is separate from the gas counter, the block-to-block gas changes will not break `eth_estimateGas`.
|
||||
|
||||
## Copyright
|
||||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
|
Loading…
x
Reference in New Issue
Block a user