Quote:
Originally Posted by SethTro
I read about 80% of this thread and tried to follow all the math based suggestions.
@Preda's posts, especially 58 and 122, are great.
https://www.mersenneforum.org/showpo...7&postcount=58
https://www.mersenneforum.org/showpo...&postcount=122
I had the same ideas after reading the initial idea by Robert Gerbicz
https://www.mersenneforum.org/showpo...7&postcount=30
I have another adapting that I believe can solve one of the listed drawbacks
We can also adapt a solution used by bitcoin mining pools (where they similarly miners to have success mining (e.g. "see a factor") only rarely).
Instead of giving binary all or nothing credit (and hoping it averages over a long period of timing) give credit proportional to the smallness of min(x) or min(bitrev(x). Now each result earns between 1/32 and ~4 credit on each submission. This function is much less noisy than the binary 0/1 reward so even when turning in a bunch of no factor found results you would still expect to receive, on average, full credit (I can write a simulator if people want graphs).
Now hypothetical cheater would get credit exactly equal to the work done on average. It doesn't stop them lying about the work done (that can maybe be detected later with static user analysis) but they're reward is now verifiable linked to the work they performed

I wrote up a 80% of the code needed for this
https://github.com/sethtroisi/mfaktc/tree/master
mod_simple_96_and_check_big_factor96 doesn't calculate the modulo so it uses a slightly different Proofofwork function (instead producing very large modulos instead of small)
https://github.com/sethtroisi/mfaktc...helper.cu#L244
The end result is on TFNF results you get a little extra line like this
Code:
M59068201 proof_k(17257705361971287559): 30 bits [TF:60:64:mfaktc 0.21 75bit_mul32_gs]
M59068201 proof_k(1759939290551364353): 31 bits [TF:60:64:mfaktc 0.21 75bit_mul32_gs]
M59068201 proof_k(1297657372566442343): 31 bits [TF:60:64:mfaktc 0.21 75bit_mul32_gs]
M59068201 proof_k(8940824503190951977): 29 bits [TF:60:64:mfaktc 0.21 75bit_mul32_gs]
[Mon Jul 1 21:59:54 2019]
no factor for M59068201 from 2^60 to 2^64 [mfaktc 0.21 75bit_mul32_gs]
You can then verify that pow(2, 59068201, 8940824503190951977) = 422536362 which is 29 bits meaning ~34 leading zeros bits. so it takes around ~1e11 test to find this (which is handily just about 2^64 / 59068201)