Dynamic PoW works great but does not discourage spamming. My aim would be that at times of network saturation we invalidate all blocks with pre-computed PoW, especially if they were fabricated en-masse with the intent of spamming. Again, the solution should be simple and not time-based.
Here's the idea: why don't we changing the base the PoW dynamically along with the difficulty?
( H is the hashing function, b is the base of PoW calculation )
- At base difficulty:
H (nonce || b ) ≥ threshold
- At 'n' x difficulty:
H (nonce || n x Blake2b(b) ) ≥ thresholdwhere
n x Blake2b(b)means that 'b' should be hashed 'n' times
Advantages: at times of network saturation not only PoW-generation takes longer but all pre-computed PoW's are rendered invalid.
Disadvantages: PoW-validation takes slightly longer. Services would have to recalculate PoW with increasing difficulty but they would have to do it anyway.
This proposal is fitting to the "exploring ideas of limiting pre-computing of work" by @zach-atx
Ok, now let me know why this is stupid - I might have missed something crucial.