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

After EIP-649

Who is affected

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.

Original EIP · ← EIPs