Bitcoin Forum

Local => Кодеры => Topic started by: Gargamel on March 24, 2015, 01:40:07 PM



Title: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: Gargamel on March 24, 2015, 01:40:07 PM
Всем привет. Я тут что-то заигрался стратегиями на Primedice.com. :)

Во первых, что первое бросается в глаза, это странные числа, которые они пишут в графе Payout.

http://www.picshare.ru/uploads/150324/1zLhnzVSZr.jpg http://www.picshare.ru/uploads/150324/1sNyGw585o.jpg

То есть в payout в знаке до запятой всегда указано больше на единицу, чем должно быть. Ошибка или я чего-то не догоняю?

И про контроль честности. Они типа пишут:

Quote
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.

То есть я так понял, что случайным образом генерируются два ключа. Мне известен один и хеш второго. Из них мы получаем псевдослучайные числа. Я не могу их все заранее посчитать, так как у меня нет второго ключа, но могу потом проверить результат, получив его и убедившись, что это именно он благодаря имеющемуся у меня хешу.

Сервер знает оба числа и может просчитать всё заранее, но не может изменить эту последовательность, так как я потом могу это проверить.

Вроде, подвоха нигде нет? Ну, если не считать, что едва ли кто заморачивается с такой проверкой. )

Так вот о проверке. Там же указан код, который позволяет произвести такую проверку:

Code:
 //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));


Подскажите, пожалуйста, как этот скрипт использовать? Кому и как его скормить?


Title: Re: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: svetoch on March 24, 2015, 04:34:15 PM


То есть в payout в знаке до запятой всегда указано больше на единицу. Ошибка или я чего-то не догоняю?


естественно больше единицы. иначе при каждой ставке ты проигрывал бы больше чем выигрывал. конкретный пример:
ставка 100 сатоши. пейаут 1,010 (шанс 98%)
при таких условиях ты выигрываешь 101 сатошу. 100 тебе возвращается ставка + 1 чистый выигрыш.
если бы пейаут был просто 0,010 ты соответственно выигрывал 1 сатошу, но 100 с тебя уже списали на саму ставку. то есть при этом ты полюбому проиграл 99 сатоши. про проверку точно не знаю. но как вариант это код на С. вставляй, компилируй, проверяй


Title: Re: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: Gargamel on March 24, 2015, 05:49:28 PM
Конкретные примеры приведены на рисунках выше. Правильное значение в первом случае - это 3.950x (а не 4.950x), а во втором - 0.42x (а не 1.42x). При высоких шансах ты всегда выигрываешь меньше своей ставки.

А код - это сценарий JavaScript. Просто я не знаю, где и как его выполнить.


Title: Re: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: A-Bolt on March 24, 2015, 08:25:36 PM
То есть в payout в знаке до запятой всегда указано больше на единицу, чем должно быть. Ошибка или я чего-то не догоняю?

Code:
Profit = Payout - Bet
0.00000395 = 0.00000495 - 0.00000100

Так понятнее?

Quote
Подскажите, пожалуйста, как этот скрипт использовать? Кому и как его скормить?

Здесь (https://en.wikipedia.org/wiki/Node.js) есть список IDE для node.js


Title: Re: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: Gargamel on March 25, 2015, 02:56:10 AM
Quote

Code:
Profit = Payout - Bet
0.00000395 = 0.00000495 - 0.00000100

Так понятнее?


Да! Спасибо! Значит всё-таки не догонял.. )

Quote
Здесь (https://en.wikipedia.org/wiki/Node.js) есть список IDE для node.js

Спасибо большое!


Title: Re: Primedice. Графа Payout - баг или фича? И о контроле честнос
Post by: Gargamel on March 26, 2015, 05:29:43 PM
Поставил в винде Node.js (отсюда: http://nodejs.org/download/). Пытаюсь скормить скрипт, говорит:

Quote
Строка:   9
Символ:   13
Ошибка:   Предполагается наличие объекта
Код:   800A138F

Это соответственно где
Code:
var crypto = require('crypto');

То есть, я так понял, нужна библиотека, которой по умолчанию нет. Причём, вроде, вот эта: https://nodejs.org/api/crypto.html.

Но я не понимаю, как её подключить. Не подскажете?