A major motivation for memory hard PoWs is to limit performance by the memory IO bottleneck.
If the memory requirements are set too low, as for instance in the case of Litecoin’s scrypt, then the resulting single-chip ASICs are not meaningfully different from pure computational ones like Bitcoin’s sha256. The same destiny befell Zcash’ Equihash, although they missed the opportunity to set much larger memory requirements at launch. Only ethash has so far succesfully resisted single chip ASICs.
Since the amount of memory that can economically be fit on a single chip grows over time, as one of many illustrations of Moore’s law, it behooves a memory hard PoW to also have increasing memory requirements.
Ethereum’s ethash PoW recognized this in having a linearly growing dataset (growing by 8 MB every 125 hours; see appendix J of https://ethereum.github.io/yellowpaper/paper.pdf).
I propose to have a similar linear increase in memory requirements for Grin’s long term PoW, Cuckatoo Cycle.
Specifically, after 2^k years, we will phase out the use of cuckatoo32+k. So cuckatoo32 will be phased out after 1 year, cuckatoo33 after 2 years, cuckatoo34 after 4 years, etc.
That means we’ll be mining cuckatoo42, using 1TB, in only 2^(41-32) = 512 years. Mark your calendars!
I additionally propose the following mechanism for phase out:
Each size cuckatooN has a natural scaling factor of 2^(N+1) * N.
Upon phaseout, the latter factor N will be reduced by 1 every week, until it reaches 0.
For instance, cuckatoo32 difficulty scaling will linearly decrease over 32 weeks, or between 7 and 8 months.
This fixed upgrade schedule relieves us of the need to try identify single chip miners and hardfork away from them. We would instead trust that any advantage of single chip designs is shortlived.
Furthermore, we will be able to tell after the fact, by seeing how much hashpower resides in a size that’s being phased out.