forked from DecentralizedClimateFoundation/DCIPs
79 lines
3.6 KiB
Markdown
79 lines
3.6 KiB
Markdown
---
|
|
eip: 3300
|
|
title: Phase out refunds
|
|
author: William Morriss (@wjmelements)
|
|
discussions-to: https://ethereum-magicians.org/t/eip-3300-phase-out-refunds/5434
|
|
status: Stagnant
|
|
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](../LICENSE.md).
|