Grin’s dual PoW system present miners with a choice: should they mine the GPU oriented Cuckaroo29, or the ASIC oriented Cuckatoo31+?
First of all, let’s assume you want to mean mine with a GPU. CPUs kind of suck at the whole Cuckoo Cycle family, and lean mining is inherently very inefficient on all types of DRAM.
The two PoWs have rather different memory requirements.
The current cuckaroo_cuda_29 grin-miner plugin requires close to 5.5 GB, while both cuckatoo_mean_gtx_cuda_31 and cuckatoo_mean_rtx_cuda_31 require close to 11 GB.
So if your GPU has under 5.5 GB then your only choice is to wait
for a 3rd party miner that has even lower memory requirements. It appears possible to get under 4 GB by computing all siphashes twice, but I have no plans yet to implement that myself.
If you have at least 5.5 GB but less than 10.5 GB then the choice is simple: use cuckaroo_cuda_29, or C29 for short.
If you have at least or close to 11 GB, then you have a real choice.
First, your choice between cuckatoo_mean_gtx_cuda_31 and cuckatoo_mean_rtx_cuda_31 depends on whether you have a Pascal based GTX card like the 1080 Ti, or a Turing based RTX card like the 2080 Ti. Let’s call that the C31 miner. The + in Cuckatoo31+ signifies that you could also mine C32 or C33 or …, each of which doubles the memory requirement of the previous one. Those miners have yet to be implemented though, so we’ll ignore them for now.
Assuming you want to maximize your chances of an acceptable solution,
the choice between C31 and C29 depends on 3 factors:
your graph-rate on C31, denoted GPS31
your graph-rate on C29, denoted GPS29
the secondary scale, or as I like to call it, ar_scale (for asic resistant)
Your solution rate at mining C31 is going to be GPS31 / 42 solutions per second, since the probability of a random graph having a 42-cycle is 1/42. The probability of a C31 solution being accepted is
weight(31) / difficulty. To be precise, the cyclehash of the solution, viewed as a fraction in [0,1) has to be below weight(31) / difficulty. So your reward rate will be
(GPS31 / 42) * weight(31) / difficulty.
Similarly, your reward rate for mining C29 will be
(GPS29 / 42) * ar_scale / difficulty.
This is where the variable header field ar_scale comes in. Higher values make it easier to get C29 solutions accepted, while smaller values make it harder. It starts out at weight(29) in genesis, and is then adjusted every block to try move the balance between C29 and C31 rewards toward the goal balance at that height. E,g, 90%-10% at launch 45%-55% after 1 year, and 0%-100% after 2 years. If the total C29 hashpower is 9x that of the C31 hashpower, then we expect ar_scale to remain close to weight(29). But the C29 hashpower could easily be more than 10x the C31 hashpower, which would cause ar_scale to drop. That makes mining C31 more attractive. Eventually we expect C31 ASICs to show up and tip the balance in hashpower. Once they push ar_scale to values well above weight(29), all GPUs will be better off mining C29. But at least they only compete against other GPUs there. C31 ASICs won’t be able to take away any of the prescribed C29 rewards.
Putting everything together, we see that C31 mining is preferred when
(GPS31 / 42) * weight(31) > (GPS29 / 42) * ar_scale,
or in other words, when
ar_scale < weight(31) * GPS31 / GPS29.
Relevant weight values are weight(31) = 31 * 2^8 = 7936
and weight(29) = 29 * 2^6 = 1856.
The value weight(31) actually starts changing after one year, to force a migration to Cuckatoo32+. Over the course of 31 weeks it will linearly drop from 31 * 2^8 to 0 * 2^8. So remember that as you make the choice next year…
Also see the related post https://www.grin-forum.org/t/on-dual-pow-graph-rates-gps-and-difficulty