# The difficulty bomb postponed: how to make a decision?

This article is an exercise to predict the impact of EIP 4345. This EIP proposes to postpone the difficulty bomb in December 2021. Our goal is to see if we can help determine when and how much to postpone, so that the difficulty bomb is expected to explode again in May 2022.

## Pre-knowledge

I have written many articles on this topic before:

1. About the method of difficulty calculation: It’s Not the Difficult (Chinese translation)
2. On how to postpone the difficulty bomb: A Method to Diffuse the Difficulty Bomb
3. Some older articles can be found here and here

The calculation of the difficulty bomb consists of two parts: Part A is used to adjust the difficulty and smooth the fluctuation of the block generation time; Part B is the difficulty bomb body (see the first article above for detailed explanation).

The adjustment of Part A occurs block by block, and the block generation time is guaranteed to fluctuate around 13.5 seconds. The adjustment effect of this part is very good, if there is no difficulty bomb, the block generation time will remain almost constant. We are interested in Part B.

The bomb in part B is a step function, and the value doubles every 100,000 blocks. Before it “explodes”, everyone will not notice it, but once it starts to explode, the value will rise very fast (same as 2^n.

The value of the bomb depends on `fake_period`(pseudo-period number, expressed as in the equation `n_sub_p`). `fake_period`The value of is completely dependent on the value of `fake_block`(pseudo block number); this value is in turn determined by the block number ( `real_block`value) and `offset`(delay amount) of the current block .

## Notice

I am alone. I wrote this article with an increasingly exhausted heart and using publicly available data. Everything I have said here can be discussed, but I am not prepared to take any responsibility for this. Please treat and use everything in this article with suspicion and caution.

## Actual data vs. theoretical data

I am an engineer, not a mathematician, so I am more interested in actual data than in mathematical predictions. In the following, I will predict how the data will change. My forecast is based on the above formula, but only simple and straightforward Excel spreadsheets are used.

My discussion is based on three simple observations:

1. Part A works very well, making the block time stable at an average of 13.3.
2. Part B also works very well. It is independent of Part A and will only increase the block time.
3. If we ignore the bomb part, our prediction will be conservative.

In other words, if our forecast ignores the effect of the bomb, our forecast will be “earlier” than the actual time. In this case, even if our prediction is wrong, there will be extra buffer time.

The first table uses the current block number (1339 1127 at the time of writing), and calculates the time of the block height of 1400 0000 according to the time of 13.3 seconds per block:

Looking closer, we found that the average block generation time has been increasing since the block number 1,200,000 (although it has decreased in August and September). Of course, as the bomb explodes, the average block time will increase faster and faster.

Again, in order to be conservative, we choose a block generation time of 13.3 seconds to predict the specific time of future block mining, and we temporarily ignore the effect of the difficulty bomb. When the difficulty bomb explodes, the average block time increases; therefore, the result of ignoring the difficulty bomb is that our predicted time will be earlier than the actual mining time. (According to our example, the block 1400 0000 will be mined “no earlier than” January 10, 2022.)

## When to fork

The first question we considered was, “When should we fork?”

In my opinion, the answer depends entirely on the `fake_period`value. You can ask: “Which block number should we fork at? 1370 0050, 1380 0050 or 13900 0050?” (add a 50 to make sure there is no off-by-one error-why is this important , Is left as an exercise for the reader-should the calculation of the formula use the greater than sign, or use the greater than or equal sign?)

The following table shows the `fake_block`calculation.

Here we juxtapose the prediction of the specific time at which each block will be dug, and the calculation of the pseudo-block number (subtract the offset from the true block number to obtain the pseudo-block number, and derive the pseudo-period No).

The pseudo-period number is exactly what we are interested in, because the value of the difficulty bomb depends entirely on the value of the pseudo-period number. Judging from my previous work, we believe that the effect of the difficulty bomb will begin to appear when the pseudo-period number reaches between 41 and 42, and it was not obvious before that. In other words, when the pseudo-period number becomes 41, the effect of part B will overwhelm the effect of part A.

I don’t want to explain here why the effect of the difficulty bomb will not show up before the pseudo-period number reaches 41. What I want to say is that the bomb will only increase the block time, and if there is no bomb, part A will keep the block time around 13.3 seconds. In other words, the average block generation time will be higher than 13.3 seconds. If it is too low (the block generation speed is too fast), Part A will adjust the difficulty and bring the block generation time back — more bluntly — — This is how Part A works.

Given the above analysis, I suggest to fork at any time later than 1380 0000 block. It’s about mid-December. I would recommend targeting a specific block number (not a date), such as block number 1385 0000. The “pain point” (that is, when the block production time is significantly slowed down) will come about mid-January. So this goal also has room for fault tolerance.

## How many pseudo-blocks should we postpone?

Another question we need to consider is, “How many pseudo-blocks do we need to offset?”

As mentioned above, the offset determines the pseudo-block number, which in turn determines the pseudo-period number, and thus the value of the bomb. So, in the following, we will focus on the offset and see what we can learn.

### EIP 4354 proposed value

First, let’s take a look at the offset proposed by this EIP. Here we generate a simple chart based on the average block time of 13.3 seconds. Similarly, we ignore the impact of the bomb, because we know that the bomb will only increase the block time, so the actual occurrence time of the corresponding block number is later than our prediction. We will arrange for “Arrow Glacier” (codename of the next fork) to occur in block 1380 0050, and use this EIP proposed offset of 1050 0000.

This picture seems to indicate that if we set an offset of 1050 0000 (as recommended by this EIP), the difficulty bomb will start to explode as early as mid-April (that is, when the pseudo-period number reaches 41 again). By mid-May, the block will start to slow down significantly (the pseudo-period number reaches 43).

The largest pseudo-period number we have encountered before is 43, before the “Byzantine” fork. The increase in block time is noticeable-reaching the level of a few seconds.

### Advance or postpone the time of the fork

For the sake of entertainment, I am going to see what the impact will be if we advance or postpone the time of the fork.

The table below shows the estimated results-to my surprise-the time of the fork has no effect on the final result. However, I thought about it a bit and felt that it made sense. Because the only amount that determines the pseudo-period number is the offset. Except for making the block production slower before the current fork, postponing the time of the fork has no effect on the time of the next difficulty bomb explosion (that is, between April and May).

As you can see from the picture above, whether we implement the “Arrow Glacier” hard fork sooner or later, as long as we use an offset of 1050 0000, it will have no effect on the timing of the next difficulty bomb explosion.

### How much should we shift?

This question depends on how much pressure you want to put on Ethereum core developers in May . If you want to put a lot of pressure on them—the whole world will complain about the slower rate of Ethereum block production in May—then set the offset to be smaller. If you just want to push them lightly—similar to “We’d better act now, but not particularly in a hurry”—then support a larger offset.

If you use an offset of 1050 0000, you may be putting a lot of pressure on them. You can expect to see a significant slowdown in block production at the end of April (the one that is one second slower). However, the trouble with difficulty bombs is that once they start to explode, they will not give people a chance to breathe.

From “obvious (slow)” to “very significant”, to “irritating”, to “what the hell” to “Ethereum to die”, it only takes 4 to 6 weeks. I’m not talking nonsense, because the cycle of every 100,000 block will get longer and longer (because every time a cycle passes, the bomb value will double and the block generation time will increase very fast), and as long as it starts to explode, it will explode Getting faster and faster. For details, see my article on the explosion before the fork of “Byzantium” above. The difficulty bomb came very slowly, but after the explosion, it was a different scene.

In the last table, I recommend an offset of 1070 0000. I also suggest to fork after block 1380 0050. This will give us time to rest now and push the expected time for the next explosion to mid-May. This is a conservative estimate, but it is also a realistic consideration.

Conclusion : Need to set an offset greater than 1050 0000.

## Summarize

1. Decide how much pressure you want to put on the core developers. If you want to push them hard, set the offset to 1050 0000; if you want to let yourself go, please set it to 1070 0000. If it fluctuates, you can take a value between the two.
2. The “when” decision to activate the fork has no effect on the timing of the next explosion (that is, it does not matter whether the bomb will explode in May). This decision only affects how long the block generation time will be before the “Arrow Glacier” hard fork . This is because only the offset will affect the pseudo-period number, and only the pseudo-period number will affect the value of the difficulty bomb.

## Support our work

TrueBlocks is a project fully supported by our personal funds. A small amount of bonuses come from the Ethereum Fund (2018), Consensys (2019), Moloch DAO (2021) and the recent Filecoin/IPFS (2021).

If you like this article, or want to support our work, please see our GitCoin homepage: https://gitcoin.co/grants/184/trueblocks. Please donate to the next round of matching. We will get additional benefits from greater matching rewards. Even a small amount can have a big effect.