EIP-3554 Difficulty bomb delayed to December 2021 (Difficulty Bomb Delay to December 2021)
Final · Consensus & staking · EIP status Final · created 2021-05-06
A change that postpones the effect of the difficulty bomb so it appears in the first week of December 2021. Clients are made to compute difficulty using a fake block number, with 9,700,000 subtracted, instead of the real block number.
Why it is needed
Ethereum's difficulty formula contains a term, known as the difficulty bomb, that grows exponentially as the block number increases. Once this term starts to grow, the time to produce a block gets longer and longer, making the network inconvenient to use. At the time of this proposal in May 2021, the goal was to finish the Shanghai upgrade or the Merge before December 2021. So the timing was adjusted so that the bomb's effect appears in the first week of December 2021, and the plan was to delay the bomb again or remove it altogether at that point. The design sets the effect so that it starts to become visible but is not yet urgent, leaving room to respond if needed.
What changes
Today
- The real block number is used as is in the difficulty calculation
- The bomb's effect could appear before the Shanghai upgrade or the Merge is ready
After EIP-3554
- From FORK_BLOCK_NUMBER onward, the bomb term is calculated with a fake block number, the real number minus 9,700,000
- According to the projection, the bomb's effect starts with a 0.1 second block time delay in the first week of December 2021 and reaches about a 1 second delay by the end of the month
Who is affected
- Users: Users do not experience the inconvenience of slower block production and delayed transaction confirmation before December 2021
- Miners: They produce blocks as usual, without difficulty rising sharply because of the bomb
- Client teams: They apply the fix that substitutes a fake block number for the block number in the bomb term of the difficulty formula
- Core developers: They buy time to ship the Shanghai upgrade or the Merge before December 2021
In depth
Fake block number formula
From FORK_BLOCK_NUMBER, when calculating the exponential ice age term in calc_difficulty, fake_block_number = max(0, block.number - 9_700_000) is used instead of block.number. Before FORK_BLOCK_NUMBER, block.number is used as before. max(0, ...) prevents the case where the subtracted value becomes negative. It does not change the whole difficulty formula. It is a minimal fix that changes only the block number fed into the bomb term.
The projection script that set the delay size
The source uses the predict_diff_bomb_effect function to project, as a ratio, the effect on block time several months out. The values used in the final projection are current_blknum = 12382958, current_difficulty = 7393633000000000, block_adjustment = 9700000, and months = 6. The number of blocks per month is set as (86400 * 30) // 13.3, and the bomb term is calculated as 2 ** ((future_blknum - block_adjustment) // 100000 - 2). According to this projection, block time increases by 0.1 seconds in the first week of December 2021 and by 1 second at the end of December. The effect starts to show, giving a reason to respond, but it is not urgent, leaving room to work around it if needed.
Why December 2021
Because the goal was for the Shanghai upgrade or the Merge to happen before December 2021. At that point the bomb can be adjusted again or removed altogether. In other words, this EIP does not end the bomb problem. It is a delay proposal that fixes the next decision point at December 2021.
Backward compatibility
There are no known backward compatibility issues. Only the block number used in the difficulty calculation changes, so existing transactions and contract behavior are unaffected.
Security considerations
If the difficulty effect is mispredicted, block times could be longer than expected until the next hard fork ships. If difficulty fluctuates widely, this projection could be badly off, and gradual block time changes from long-term difficulty adjustment also affect the timing of the bomb epoch. However, the source assesses this as a network usability issue that is unlikely to lead to a security problem.
Status and proposal info
This EIP is a Core standard whose status is finalized as Final. James Hancock proposed it on May 6, 2021. Like earlier bomb delays, it is a short specification that contains only the fake block number approach.