EIP-1234 Difficulty bomb delay and block reward adjustment (Constantinople Difficulty Bomb Delay and Block Reward Adjustment)
Final · Consensus & staking · EIP status Final · created 2018-07-19
A change that delays the difficulty bomb's effect by about 12 months and lowers the block reward to 2 ETH in exchange. It proposes including this in the Constantinople hard fork, the second stage of Metropolis.
Why it is needed
Ethereum has a mechanism called the difficulty bomb. It is code that automatically raises mining difficulty over time, gradually slowing down block production, also known as the ice age. It is meant to pressure the network toward moving to proof-of-stake, but as development of the transition project, Casper, fell behind, the bomb alone started kicking in first. As a result, average block time has been creeping up little by little. For roughly the next 12 months, proof-of-work mining needs to be able to produce a block every 15 seconds, so the bomb must be delayed. However, delaying the bomb alone would suddenly increase miner revenue, so block rewards are reduced at the same time to offset the delay effect and keep the system in roughly the same state as before. Reducing rewards also lowers the chance of a miner-led chain split ahead of the move to proof-of-stake.
What changes
Today
- As the difficulty bomb gradually accelerates, average block time keeps increasing
- Block rewards and uncle/nephew rewards stay at their pre-adjustment levels
- Leaving the bomb alone makes mining progressively harder, making it difficult to maintain 15-second blocks
After EIP-1234
- A fake block number is fed into the difficulty calculation so the bomb appears to kick in about 5 million blocks later
- Block rewards drop to the 2 ETH baseline, and uncle/nephew rewards are adjusted accordingly using the same formula
- Average block time of 15 seconds is maintained for about 12 months
Who is affected
- Miners: Block rewards are reduced to a 2 ETH baseline, but the difficulty bomb is delayed, allowing blocks to be mined at roughly 15-second intervals for about 12 more months.
- Users: Because the slowdown in block production is avoided, transaction processing speed stays at its current level.
- Client teams: The difficulty calculation formula and the block/uncle/nephew reward logic need to be changed to key off the Constantinople fork block number.
In depth
Mitigating the difficulty bomb with a fake block number
In calc_difficulty, which computes difficulty, the block.number used in the exponentially growing ice age term is replaced with a fake value. The formula is fake_block_number = max(0, block.number - 5_000_000) if block.number >= CNSTNTNPL_FORK_BLKNUM else block.number. After the fork block (CNSTNTNPL_FORK_BLKNUM), the bomb term is computed using the actual number minus 5 million, so from a client's perspective the bomb appears to kick in about 5 million blocks later than set at the Homestead fork.
Adjusting the block reward to 2 ETH
To keep ether issuance constant, the block reward is changed to new_block_reward. new_block_reward = 2_000_000_000_000_000_000 if block.number >= CNSTNTNPL_FORK_BLKNUM else block.reward, and this value is 2E18 wei, i.e., 2 ETH. It applies from the fork block onward, and before that the existing reward is used as is.
Uncle/nephew rewards follow the same formula
When an uncle is included in a block after the fork and block.number - uncle.number = k, the uncle reward is new_uncle_reward = (8 - k) * new_block_reward / 8. The nephew reward received by the miner who included the uncle is new_nephew_reward = new_block_reward / 32. Both formulas are exactly the ones used before Constantinople; only the base value changes to new_block_reward.
Why rewards are reduced at the same time
Delaying the ice age alone would have the effect of suddenly increasing miner rewards. Reducing block rewards by an offsetting amount keeps the system in the same general state as before. The original text also explains that reducing rewards as Ethereum approaches proof-of-stake lowers the likelihood of a miner-led chain split.
Calculating the delay period and alternatives
This change delays the ice age by 29,000,000 seconds, about 12 months. After that, the chain reaches 30-second block times again in the winter of 2019. As an alternative, a proposal to add a special rule to the difficulty calculation that effectively freezes difficulty between block ranges was suggested, and the original text notes it produces a similar result. This was discussed at All Core Devs meeting #42 and subsequent meetings, and was accepted at Constantinople session #1.
Backwards compatibility and fork inclusion
Because this EIP changes the difficulty calculation and the block/uncle/nephew reward structure, it is not backwards compatible. It must therefore be included in a scheduled hard fork that applies uniformly at a fixed block number, and the original text proposes including it in Constantinople, the second hard fork of Metropolis. The implementation logic is no different from EIP-649, and a Parity-Ethereum implementation is available in pull request parity-ethereum#9187. This EIP's status is Final.