Background
Currently, when mining, a block’s difficulty can only be adjusted for 99 buckets, or 16.5 minutes. This results in a maximum adjustment per block of around 5% (4.834%). (You can play with the numbers in this fiddle: Edit fiddle - JSFiddle - Code Playground).
The issues here are 2 fold:
- The blockchain is susceptible to a Denial Of Service attack where someone temporarily bumps the difficulty very high, then turns off their miners. This results in the blockchain not moving for a potentially very long time time. While this is not trivial to do on mainnet, it is a possibility. It has happened on testnet several times and requires manual intervention to bring down the difficulty. If it happened on mainnet, it’s possible that it would require a hardfork to fix as the amount of hashpower required to fix could be too much to gather.
- We are getting ready to adjust the hashing algorithm which is substantially slower than the current Blake3 implementation. This would lead to significant interruption to the blockchain during the transition.
Goals
- Allow a smoother transition to the new hashing algorithm
- Mitigate the DoS vulnerability
Difficulty Difference
Lollidieb mentioned that from his machines he’s seeing change from 10,000 Mh (blake3) → 40 Mh (FishHash). About a 250x difference
Implementation
Adjust the max number of buckets from 99 to 999?
- The exact number can be tweaked, but the idea is the same regardless.
- The exact number should probably be determined after we have an idea of how big of hashpower adjustment we will have during the hashing algorithm switch
Open Questions
- How does this affect overall spikiness of difficulty, and what ramifications does this have on normal operation
- 109 blocks (out of 375k) have a difference of greater than 990 seconds, meaning these blocks may have had a larger difficulty swing under this new change. However, a vast majority of them are close to the limit so the difference would’ve been minimal.
- It’s also worth noting that a substantial number of these blocks occurred in a short period of time - around blocks 315-375k.