I really don't mind if the top paying number is unreachable or not, they give FREE bitcoins/doge coins and that is something they don't have to do. But I'm very happy they do!!!
But I love to tinker, so i make a script to test this out...
a fast run will print something like this...
{"9999" [{"Client": "Bb2X2OHbnoDdYxnJ", "Server": "OrGqUxpBuKFg", "nonce": "2014"}]
{"9999" [{"Client": "EROQqsMbdG6OeKp", "Server": "JDz5mY6qcmLi", "nonce": "3821"}]
{"9999" [{"Client": "R3ZVaapxrpNFtlWK", "Server": "nZELaYrdcaEu", "nonce": "4360"}]
{"9999" [{"Client": "sb73Ls2O9kYIkZOB", "Server": "NViuHQev34p", "nonce": "8525"}]
Tried 10000 times... 10k never found.
if fast is set to 0 it returns every number rolled...
so, this isn't their script so I can't get the last roll number to work from their site, this is just to see if it's even possible to get 10,000 to roll...
and out of the insane number of times I've run this, I've never gotten 10,000... but from my code block above, 9999 is found often!
I don't normally like to share code, but it's been 10 years since the last time I've shared... open source made me bitter lol. but this is easy code nothing to it...
As I was saying this isn't like their code, there is something different in they way they hash the 2 seeds together, but this uses all the info available to just try and see if rolling 10k is possible.
info known:
- player seed is 16 char long, code converted from JS example.
- last roll server seed was 12 char long, going with that.
- the nonce seems to progress with the number of rolls.
- the number to round by is 429496.7295
- they use hash sha512
- seeds or in this order nonce:seed:nonce
- they take the first 8 chars from the hash and convert hexdec
-
EDIT: I found my error in the code, it now finds 10,000... lol
$fast = 1; // 1 = only print if 9999 or 10000 hits, 0 = prints a wall of numbers rolled
$tries = 10000; // will work at 20000 if $fast is set to 1, the wall can time out
$c=1;// Iteration count
do {
$nonce = $c;
$s_seed = server_string(); // 12 char server seed string
$c_seed = client_string(); // 16 char client seed string
$rnd = 429496.7295; // number provided to round by
$nhash = hash_hmac('sha512',"$nonce:$s_seed:$nonce","$nonce:$c_seed:$nonce",false); // hash server and client seeds
$result = hexdec(mb_substr($nhash, 0, 8 ))/$rnd; // get first 8 chars and hex to dec
$result = ceil($result);
if ($fast == 0) {
switch (true) {
case ($result == 10000) : $txtcol = '#DBA901'; break;
case is_between($result, 0, 9885) : $txtcol = '#58D3F7'; break;
case is_between($result, 9886, 9985) : $txtcol = '#0000FF'; break;
case is_between($result, 9986, 9993) : $txtcol = '#DF01D7'; break;
case is_between($result, 9994, 9997) : $txtcol = '#000000'; break;
case is_between($result, 9998, 9999) : $txtcol = '#FE2E2E'; break;
}
echo '', str_pad($result, 5, 0, STR_PAD_LEFT), ' ';
if ($c % 20 == 0) echo '
';
} else {
if (is_between($result, 9998, 9999)) { echo '{"9999" [{"Client": "', $c_seed, '", "Server": "', $s_seed, '", "nonce": "', $c, '"}]
'; }
if ($result == 10000) { echo '{"10000" [{"Client": "', $c_seed, '", "Server": "', $s_seed, '", "nonce": "', $c, '"}]
'; $c=$tries; }
}
$c++;
} while ($c <= $tries);
function is_between($in, $min, $max) {
return ($in >= $min && $in <= $max);
}
function make_rand($l,$h) {
mt_srand(make_seed());
return mt_rand($l,$h);
}
function make_seed() {
list($usec,$sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 65536);
}
//convert from javascript example posted in forum
function client_string () {
$charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$strlen = strlen($charSet);
$ranStr = null;
for ($i = 0; $i < 16; $i++)
{
mt_srand(make_seed());
$ranStr[] = substr($charSet, mt_rand(0, strlen($charSet)), 1);
}
return implode($ranStr,'');
}
function server_string () {
$charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$strlen = strlen($charSet);
$ranStr = null;
for ($i = 0; $i < 12; $i++)
{
mt_srand(make_seed());
$ranStr[] = substr($charSet, mt_rand(0, strlen($charSet)), 1);
}
return implode($ranStr,'');
}
?>
I still don't care if 10000 can never be rolled, or is extremely rare, the chance of rolling 9999.5 should be in there! I don't even see why the faucets need to prove they are fair, they are handing out free bitcoins!!!
{"9999" [{"Client": "yBJCif46twMVNqVF", "Server": "VBdykfilZuHA", "nonce": "5621"}]
{"9999" [{"Client": "SgpGWZN7WH9tDUPa", "Server": "0axDh7i3YIPk", "nonce": "6195"}]
{"9999" [{"Client": "WDSZNtGRNNYWtjCF", "Server": "dugXiwEuaKTb", "nonce": "6501"}]
{"10000" [{"Client": "HEfA59fGNw8ykriA", "Server": "t2BhGDCyaJG3", "nonce": "9791"}]
EDIT: I forgot to say, freebitco.in and the dogecoin actually pay! I haven't withdrawn my doge coins, but if they paid the bitcoins i'm sure they will pay the doge coins too! some faucets just don't pay, they are there for fun/annoyance lol