View Single Post
Old 2019-07-02, 05:11   #199
SethTro
 
SethTro's Avatar
 
"Seth"
Apr 2019

18110 Posts
Default

Quote:
Originally Posted by SethTro View Post
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 Proof-of-work function (instead producing very large modulos instead of small)
https://github.com/sethtroisi/mfaktc...helper.cu#L244

The end result is on TF-NF 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)
SethTro is offline   Reply With Quote