-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
EIP-1227: Defuse Difficulty Bomb and Reset Block Reward #1235
Merged
Arachnid
merged 6 commits into
ethereum:master
from
SmeargleUsedFly:bomb_has_been_defused
Jul 19, 2018
Merged
Changes from 4 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
ae16104
Add EIP draft.
SmeargleUsedFly d2110a6
Rename file.
SmeargleUsedFly a487b5e
Update eip-1235.md
Arachnid 4f976da
Rename eip-1235.md to eip-1227.md
Arachnid 1c0bca4
Merge branch 'master' into bomb_has_been_defused
Arachnid a14405c
Remove superflous motivation, make it more concrete.
SmeargleUsedFly File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
--- | ||
eip: 1227 | ||
title: Defuse Difficulty Bomb and Reset Block Reward | ||
author: SmeargleUsedFly (@SmeargleUsedFly) | ||
discussions-to: https://github.com/ethereum/EIPs/issues/1227 | ||
status: Draft | ||
type: Standards Track | ||
category: Core | ||
created: 2018-07-18 | ||
requires: 649 | ||
--- | ||
|
||
## Simple Summary | ||
This EIP proposes to permanently disable the "difficulty bomb" and reset the block reward to pre-Byzantium levels. | ||
|
||
## Abstract | ||
Starting with `FORK_BLKNUM` the client will calculate the difficulty without the additional exponential component. Furthermore, block rewards will be adjusted to a base of 5 ETH, uncle and nephew rewards will be adjusted accordingly. | ||
|
||
## Motivation | ||
Nick Johnson, the [de facto lead EIP editor](https://gitter.im/ethereum/AllCoreDevs?at=5b4e00d6fd1b3474a69834bc), has [stated unambiguously](https://old.reddit.com/r/ethereum/comments/8zk7l0/changes_are_being_made_to_the_eip_process_which/e2jl29o/) that the Ethereum user community's opinion on changes to the protocol may only be announced by running/not running node client software. This is also reflected in EIP [#1](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md), which includes no mention of community input over the EIP process. However, due to the "difficulty bomb" (also known as the "ice age"), introduced in EIP [#2](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md), an artificial exponential increase in difficulty until chain freeze, users may find it much more challenging to exercise one of those choices than the other—namely, remaining on the unforked chain after a controversial hard-fork. | ||
|
||
This situation has in fact already been observed: during the Byzantium hard-fork users were given the "choice" of following the upgraded side of the chain or remaining on the original chain, the latter already experiencing block times greater than 30 seconds. In reality one will find that organizing a disperse and decentralized set of individuals to keep the original, soon-to-be-dead chain alive under such conditions impossible. This is exacerbated when a controversial change, such as EIP [#649](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-649.md), is merged in so close to the hard-fork date, as users cannot be organized to take an educated stance for or against the change on such short notice. | ||
|
||
Ultimately, the difficulty bomb serves but a single purpose: make it more difficult to keep the original chain alive after a hard-fork. This is unacceptable if the only way the community can make their voice heard is running/not running client software, and not through the EIP process, since they effectively have no choice and therefore no power. This EIP proposes to completely eliminate the difficulty bomb, returning some measure of power over Ethereum's governance process to the users, to the community. | ||
|
||
Given the controversy surrounding the directly relevant EIP [#649](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-649.md), the issuance should also be reset to pre-Byzantium levels. It may be reduced again at a later time via a new hard-fork, only this time users would actually have a meaningful choice in accepting the change or not. Note: the issuance reduction is not the focus of this proposal, and is optional; the defusing of the difficulty bomb is of primary concern. | ||
|
||
## Specification | ||
#### Remove Exponential Component of Difficulty Adjustment | ||
For the purposes of `calc_difficulty`, simply remove the exponential difficulty adjustment component, `epsilon`, i.e. the `int(2**((block.number // 100000) - 2))`. | ||
|
||
#### Reset Block, Uncle, and Nephew rewards | ||
To ensure a constant Ether issuance, adjust the block reward to `new_block_reward`, where | ||
|
||
new_block_reward = 5_000_000_000_000_000_000 if block.number >= FORK_BLKNUM else block.reward | ||
|
||
(5E18 wei, or 5,000,000,000,000,000,000 wei, or 5 ETH). | ||
|
||
Analogue, if an uncle is included in a block for `block.number >= FORK_BLKNUM` such that `block.number - uncle.number = k`, the uncle reward is | ||
|
||
new_uncle_reward = (8 - k) * new_block_reward / 8 | ||
|
||
This is the existing pre-Byzantium formula for uncle rewards, simply adjusted with `new_block_reward`. | ||
|
||
The nephew reward for `block.number >= FORK_BLKNUM` is | ||
|
||
new_nephew_reward = new_block_reward / 32 | ||
|
||
This is the existing pre-Byzantium formula for nephew rewards, simply adjusted with `new_block_reward`. | ||
|
||
## Rationale | ||
This will permanently, without further changes, disable the "ice age." It will also reset the block reward to pre-Byzantium levels. Both of these changes are specified similarly to EIP [#649](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-649.md), so they should require only minimal changes from client developers. | ||
|
||
## Backwards Compatibility | ||
This EIP is not forward compatible and introduces backwards incompatibilities in the difficulty calculation, as well as the block, uncle and nephew reward structure. However, it may be controversial in nature among different sections of the userbase—the very problem this EIP is made to address. Therefore, it should not be included in a scheduled hardfork at a certain block number. It is suggested to implement this EIP in an isolated hard-fork before the second of the two Metropolis hard-forks. | ||
|
||
## Test Cases | ||
Forthcoming. | ||
|
||
## Implementation | ||
Forthcoming. | ||
|
||
## Copyright | ||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What purpose does this section serve in the EIP? It doesn't appear to be relevant to the technical merits of the proposal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It serves the purpose of framing the motivation for the EIP. What specific part of that paragraph is of concern? If it's the beginning, it should be noted that it is not intended as a sleight, but as a statement of fact on the current state of affairs. I'm a little confused on the expression "technical merits": what exactly do you mean by this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An EIP is accepted if it's technically sound. The motivation should describe why it's being written and why it should be implemented, but I don't think what I say in a Reddit post has any relevance to that at all. What's more, the actual content here - about EIP governance - has no impact on whether this EIP is sound either.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated wording in a14405c