EIP-649 Metropolis difficulty bomb delay and block reward reduction
Final · Consensus & staking · EIP status Final · created 2017-06-21
Starting from the Byzantium fork, this delays the activation of the difficulty bomb by about a year and a half, and lowers the block reward to 3 ETH so that issuance does not increase. Uncle and nephew rewards are adjusted by the same proportion.
Why it is needed
Ethereum has a mechanism called the difficulty bomb. It exponentially raises the mining difficulty over time, progressively lengthening the average block time; it is also called the ice age. As this bomb gradually activated, block production was already slowing down. The problem was that development of Casper, the planned transition to proof-of-stake, had been delayed. If the bomb were left as is, it would become difficult to maintain 15-second blocks through proof-of-work mining. So the proposal is to delay the bomb by about a year and a half to keep mining viable. However, delaying the bomb alone would mean a sudden increase in miner rewards. To offset this, the block reward is lowered to 3 ETH, keeping the system in a state similar to before. The reward reduction also lowers the likelihood of a miner-led chain split as the move to proof-of-stake approaches.
What changes
Today
- The difficulty bomb gradually activates, progressively lengthening the average block time
- The actual block number is used as-is in the difficulty calculation
- Uncle and nephew rewards are also calculated based on the existing block reward
After EIP-649
- The difficulty calculation uses a fake block number with 3 million subtracted, delaying the bomb's activation by about 1.4 years
- The block reward becomes 3 ETH
- The uncle reward becomes (8 - k) x 3 ETH / 8, and the nephew reward becomes 3 ETH / 32, both reduced accordingly
- The schedule is pushed back so that block times return to around 30 seconds only by late 2018
Who is affected
- Miners: Delaying the difficulty bomb allows roughly another year and a half of 15-second block mining, in exchange for the per-block reward being reduced to 3 ETH.
- Users: The ice age that slows block times is postponed, keeping the network's speed stable.
- Client teams: Because the difficulty calculation and reward structure change, the implementation must be reflected in time for the Byzantium hard fork.
- The whole network: The reward reduction offsets the increased issuance that would result from delaying the bomb, keeping total ether issuance at roughly the same level as before.
In depth
Easing difficulty with a fake block number
In the exponential ice age term of calc_difficulty, block.number is replaced with the following formula: fake_block_number = max(0, block.number - 3_000_000) if block.number >= BYZANTIUM_FORK_BLKNUM else block.number. That is, after the Byzantium fork, clients calculate difficulty as though they were 3 million blocks earlier than they actually are. This has the effect of delaying the bomb adjustment by about 3 million blocks relative to the schedule set at the Homestead fork.
Adjusting the block reward to 3 ETH
To keep ether issuance steady, the block reward is changed to new_block_reward. new_block_reward = 3_000_000_000_000_000_000 if block.number >= BYZANTIUM_FORK_BLKNUM else block.reward, i.e. 3E18 wei (3 ETH). The motivation is that delaying the bomb alone would cause blocks to be produced more frequently and issuance to rise, so the reward reduction offsets this, keeping the system in a generally similar state to before.
Preserving the uncle and nephew reward formulas
In a block that includes an uncle, where block.number - uncle.number = k, new_uncle_reward = (8 - k) * new_block_reward / 8. The nephew reward received by the miner of the block that included the uncle is new_nephew_reward = new_block_reward / 32. Both formulas are unchanged from the ones used before Metropolis; only the underlying block reward has changed to 3 ETH.
Calculating the delay effect and comparing alternatives
This change delays the ice age by 42,000,000 seconds, about 1.4 years. As a result, the chain will not return to 30-second block times until late 2018. As an alternative, it was proposed to add a special rule to the difficulty calculation that effectively freezes difficulty over a specific range of blocks; the source notes the outcome would have been similar.
Backward compatibility and fork placement
This EIP changes the difficulty calculation and the block, uncle, and nephew reward structure, making it incompatible with the previous rules. It must therefore be activated via a hard fork scheduled at a specific block number, and it was proposed for inclusion in Byzantium, the first of the two Metropolis hard forks. Test cases are at ethereum/tests #269.
Consensus process and replacement of EIP-186
This proposal was discussed at All Core Devs Meetings #09, #12, #13, and #14, and consensus on the specification was reached at Meeting #19. At Meetings #20 and #21 it was decided to replace the existing issuance-reduction proposal, EIP #186, by combining the difficulty bomb delay and block reward reduction into this one, and it was accepted at Meeting #22.
Implementation status and finalized state
Geth #15028, Parity #5855, EthereumJ #927, Cpp-Ethereum #4050, and PyEthereum #383 have implemented EIP-649, and it has been reflected in the Yellow Paper as #333. There are also implementations in Eth-Isabelle #459 and Py-EVM #123. The status of this EIP is Final, meaning the specification is settled and will not change further.