Всем привет. Я тут что-то заигрался стратегиями на Primedice.com.
![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif)
Во первых, что первое бросается в глаза, это странные числа, которые они пишут в графе Payout.
![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fwww.picshare.ru%2Fuploads%2F150324%2F1sNyGw585o.jpg&t=665&c=F_uWmGWZQYULww)
То есть в payout в знаке до запятой всегда указано больше на единицу, чем должно быть. Ошибка или я чего-то не догоняю?
И про контроль честности. Они типа пишут:
To create a roll number, Primedice uses a multi-step process to create a roll number 0-99.99. Both client and server seeds and a nonce are combined with hmac-sha512(server_seed, client_seed-nonce) which will generate a hex string. The nonce is the # of bets you made with the current seed pair. First five characters are taken from the hex string to create a roll number that is 0-1,048,575. If the roll number is over 999,999, the proccess is repeated with the next five characters skipping the previous set. This is done until a number less than 1,000,000 is achieved. In the astronomically unlikely event that all possible 5 character combinations are greater, 99.99 is used as the roll number. The resulting number 0-999,999 is applied a modulus of 10^4, to obtain a roll number 0-9999, and divided by 10^2 to result a 0-99.99 number.
То есть я так понял, что случайным образом генерируются два ключа. Мне известен один и хеш второго. Из них мы получаем псевдослучайные числа. Я не могу их все заранее посчитать, так как у меня нет второго ключа, но могу потом проверить результат, получив его и убедившись, что это именно он благодаря имеющемуся у меня хешу.
Сервер знает оба числа и может просчитать всё заранее, но не может изменить эту последовательность, так как я потом могу это проверить.
Вроде, подвоха нигде нет? Ну, если не считать, что едва ли кто заморачивается с такой проверкой. )
Так вот о проверке. Там же указан код, который позволяет произвести такую проверку:
//the seed pair itself
var clientSeed = "your client seed"; //dont forget to exclude the dash and the nonce!
var serverSeed = "your server seed";
//bet made with seed pair (excluding current bet)
var nonce = 0;
//crypto lib for hmac function
var crypto = require('crypto');
var roll = function(key, text) {
//create HMAC using server seed as key and client seed as message
var hash = crypto.createHmac('sha512', key).update(text).digest('hex');
var index = 0;
var lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16);
//keep grabbing characters from the hash while greater than
while (lucky >= Math.pow(10, 6)) {
index++;
lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16);
//if we reach the end of the hash, just default to highest number
if (index * 5 + 5 > 128) {
lucky = 99.99;
break;
}
}
lucky %= Math.pow(10, 4);
lucky /= Math.pow(10, 2);
return lucky;
}
console.log(roll(serverSeed, clientSeed+'-'+nonce));
Подскажите, пожалуйста, как этот скрипт использовать? Кому и как его скормить?