На этой странице
Игровой автомат (зашифрованный)
На этой странице
Введение
На этой странице объясняется принцип работы конкретного игрового автомата, основанного на зашифрованном процессе честной игры. В конечном итоге, результат во всех игровых автоматах определяется случайными числами. В случае зашифрованных игр случайные числа основаны на длинной последовательности случайных символов.
Казино, где доказуемая честность
Анализ
В случае с игровым автоматом на Crypto.Games, он довольно прост. Это пятибарабанный однолинейный игровой автомат. Игрок должен сделать ставку в 10 кредитов. Стоимость 10 кредитов определяется игроком. На каждом барабане восемь разных символов: яблоко, банан, вишня, виноград, клубника, апельсин, биткоин и персик. Результат каждого барабана не зависит от других барабанов.
Ниже представлена таблица выплат для игрового автомата Crypto.Games. Положение символов не имеет значения. Например, если игрок получает два символа биткоина, он получит выплату независимо от их расположения на линии выплат. Все выигрыши рассчитываются по принципу «за один». В случае четырех одинаковых фруктов и одного биткоина, я предполагаю, что игрок получает выплату только за больший выигрыш, чем четыре одинаковых символа, хотя в справочном файле игры эта ситуация не рассматривается.
Таблица выплат
| Событие | Платит |
|---|---|
| Пять биткоинов | 10000 |
| Пять одинаковых | 1500 |
| Четыре биткоина | 700 |
| Четыре одинаковых | 100 |
| Три биткоина | 70 |
| Два биткоина | 25 |
| Один биткоин | 11 |
Анализ игры
Я думаю, что, согласно задумке Crypto.Games, каждый символ должен иметь равный вес или шанс выпадения. Если бы это было так, то в следующей таблице представлен мой анализ. Столбец возврата равен (выигрыш)*(вероятность)/10. Деление на 10 необходимо, потому что игрок должен поставить десять кредитов. В нижней правой ячейке показан возврат в размере 98,03%.
Таблица возврата — Равновесие
| Событие | Платит | Комбинации | Вероятность | Возвращаться |
|---|---|---|---|---|
| Пять биткоинов | 10 000 | 1 | 0.000031 | 0.030518 |
| Пять одинаковых | 1500 | 7 | 0.000214 | 0.032043 |
| Четыре биткоина | 700 | 35 | 0.001068 | 0.074768 |
| Четыре одинаковых | 100 | 245 | 0.007477 | 0.074768 |
| Три биткоина | 70 | 490 | 0.014954 | 0.104675 |
| Два биткоина | 25 | 3430 | 0.104675 | 0.261688 |
| Один биткоин | 11 | 11,970 | 0.365295 | 0.401825 |
| Неудачник | - | 16,590 | 0.506287 | 0.000000 |
| Общий | 32,768 | 1.000000 | 0.980286 |
Однако, согласно принципам честной игры, некоторые символы имеют больший вес, чем другие. В частности, яблоко, банан, вишня, виноград и клубника имеют вес 26, а апельсин, биткоин и персик — 25. Вероятность остановки барабана на любом заданном символе пропорциональна его весу. Большая часть выигрыша в игре приходится на символы биткоина. Поскольку вес биткоина составляет 25, а средний вес равен 25,625, вероятность остановки барабана на биткоине составляет чуть менее 1 к 8. Это снижает процент выигрыша, как показано в следующей таблице. В нижней правой ячейке показан процент выигрыша в 95,06%.
Таблица возврата — Неравномерное взвешивание
| Событие | Платит | Комбинации | Вероятность | Возвращаться |
|---|---|---|---|---|
| Пять биткоинов | 10 000 | 9 765 625 | 0.000027 | 0.026973 |
| Пять одинаковых | 1500 | 78,938,130 | 0.000218 | 0.032705 |
| Четыре биткоина | 700 | 351,562,500 | 0.000971 | 0.067972 |
| Четыре одинаковых | 100 | 2 748 092 600 | 0.007590 | 0.075904 |
| Три биткоина | 70 | 5 062 500 000 | 0.013983 | 0.097880 |
| Два биткоина | 25 | 36 450 000 000 | 0.100677 | 0.251691 |
| Один биткоин | 11 | 130,836,733,750 | 0.361377 | 0.397515 |
| Неудачник | - | 186,513,035,520 | 0.515157 | 0.000000 |
| Общий | 362,050,628,125 | 1.000000 | 0.950639 |
Честная игра
Ниже описан процесс, который Crypto.Games использует для определения точки остановки каждого барабана. Предполагается, что читатель знаком с основами хеширования и шестнадцатеричной системы счисления. Если нет, я подробно рассказываю об этом на своей странице, посвященной игре в кости (зашифрованная версия) .
- Объедините начальные значения сервера и клиента, сначала начальное значение сервера.
- Возьмите хеш SHA-512 из шага 1.
- Начиная с левой стороны, возьмите два символа из хеша, полученного на шаге 2.
- Преобразуйте два символа из шага 3 из шестнадцатеричной системы счисления в десятичную.
- Возьмите последнюю цифру результата шага 4.
- Если результатом шага 5 являются числа от 1 до 8, то сопоставьте их с символом следующим образом:
- 1 = Яблоко
- 2 = Банан
- 3 = Вишня
- 4 = Виноград
- 5 = Клубника
- 6 = Апельсин
- 7 = Биткоин
- 8 = Персик
- Если на шаге 6 значение находилось в диапазоне от 1 до 8, то назначьте этот символ барабану, начиная с левого.
- Независимо от того, был ли найден символ или нет, продвиньтесь на две позиции в хешрейте и вернитесь к шагу 3, пока не будет найдено пять чисел в диапазоне от 1 до 8 (по одному на каждый барабан).
Пример
Ниже показано, как работает этот процесс на примере одной раздачи.
На изображении выше, взятом из панели Provably Fair, я выбрал свой собственный Client Seed. Затем я скопировал и вставил в другое место Server Seed и Hash Client Seed, обозначив их как "Next server seed SHA256". В данном случае это:
Начальное значение параметра клиента: sdf96dsf9876s9dd78f6 Хэш начального значения следующего сервера: bdfa300164ebbd77ce9a3c3c58863688c4537df91173088915afdd4c9b6b302c
Я заключил пари и сыграл. Мой результат, слева направо, был вишня-яблоко-банан-клубника-банан, и я проиграл.
Я возвращаюсь к панели Provably Fair, чтобы убедиться, что результат был предопределен, как только я выбрала исходное значение для своего клиента. Вот шаги, которые я предпринимаю:
- Сначала я обращаю внимание на последний сид сервера, который, по их словам, был следующим:
ylVWazQHJxoG9TAcLmDj1n6q1UkJgyFW4oTJhUhL
Я пропустил это через программу хеширования SHA-256 . Хэш этого сид-фразы выглядит так:
bdfa300164ebbd77ce9a3c3c58863688c4537df91173088915afdd4c9b6b302c
Это совпадает с хешем начального значения следующего сервера, который мне был предоставлен до того, как я сделал ставку, поэтому я могу быть уверен, что исход был предопределен после того, как я выбрал начальное значение клиента, но до того, как сделал ставку.
Однако меня интересует, почему получился результат «вишня-яблоко-банан-клубника-банан». Вот как это проверить:
- Объедините начальные значения сервера и клиента в указанном порядке, чтобы получить ylVWazQHJxoG9TAcLmDj1n6q1UkJgyFW4oTJhUhLsdf96dsf9876s9dd78f6.
- Возьмите хеш SHA-512 из шага 1, чтобы получить 3F8CEF835C55B60C8682C580C1A0C6DCA5013F4614A82A6797273495CCE46418EA044CCD964B83D0765C9CE6A174F93E20DB56E118CF8AE82B2D0864FC09B066.
- Возьмите первые два символа, 3F, и переведите их из шестнадцатеричной системы счисления в десятичную: 3*16 + 15 = 48 + 15 = 63.
- Возьмем последнюю цифру числа 63, которая равна 3. Поскольку она находится в диапазоне от 1 до 8, сопоставим ее с символом в соответствии с приведенными выше инструкциями по честной игре. В данном случае, 3 соответствует вишне.
- Переместите два символа в хеш-таблице из шага 2, которые соответствуют 8C.
- Переведите число 8C из шестнадцатеричной системы в десятичную: 8*16 + 12 = 140.
- Последняя цифра числа 140 — 0, которая ни с чем не связана, поэтому пропускаем 8C.
- Переместите два символа из шага 2 в хеш-таблицу, которые являются символами EF.
- Переведите EF из шестнадцатеричной системы счисления в десятичную: 14*16 + 15 = 239.
- Последняя цифра числа 239 — 9, которая ни с чем не связана, поэтому пропускаем EF.
- Переместите два символа в хеш-таблице из шага 2, которые равны 83.
- Переведите EF из шестнадцатеричной системы счисления в десятичную: 8*16 + 3 = 131.
- Возьмите последнюю цифру числа 131, которая равна 1. Поскольку 1 находится в диапазоне от 1 до 8, сопоставьте её с символом в соответствии с приведенными выше инструкциями по честной игре. В данном случае 1 соответствует яблоку.
- Переместите два символа в хеш-таблице из шага 2, которые равны 5C.
- Переведите 5C из шестнадцатеричной системы в десятичную: 5*16 + 12 = 92.
- Возьмем последнюю цифру числа 92, которая равна 2. Поскольку 2 находится в диапазоне от 1 до 8, сопоставим ее с символом в соответствии с приведенными выше инструкциями по честной игре. В данном случае 2 соответствует банану.
- Переместите два символа в хеш-таблице из шага 2, то есть 55.
- Переведите число 55 из шестнадцатеричной системы в десятичную: 5*16 + 5 = 85.
- Возьмите последнюю цифру числа 85, которая равна 5. Поскольку 5 находится в диапазоне от 1 до 8, сопоставьте её с символом в соответствии с приведенными выше инструкциями по честной игре. В данном случае 5 соответствует клубнике.
- Переместите два символа в хеш-таблице из шага 2, которые соответствуют символу B6.
- Преобразуйте число B6 из шестнадцатеричной системы счисления в десятичную: 11*16 + 6 = 182.
- Возьмите последнюю цифру числа 182, которая равна 2. Поскольку 2 находится в диапазоне от 1 до 8, сопоставьте её с символом в соответствии с приведенными выше инструкциями по честной игре. В данном случае 2 соответствует банану.
- Было найдено пять символов, поэтому игроку на центральной линии выплат отображаются вишня, яблоко, банан, клубника и еще один банан в качестве результата его ставки.
Кодекс честной игры
Если вам кажется, что это слишком много шагов, то я с вами соглашусь. Поэтому я написал программу на PHP , которая сделает это за вас. Просто перейдите по этой ссылке и следуйте этим инструкциям:
- Введите начальное значение сервера (Server Seed) в строке 4.
- Введите начальные данные клиента в строку 5.
- Введите хеш-значение начального значения следующего сервера в строке 6.
- Нажмите «Выполнить».
Проверка начального значения сервера и результат ставки будут отображены в поле «Результаты» ниже.
Я также храню копию кода, которую вы можете увидеть, нажав на кнопку спойлера ниже.
[спойлер]
// Конвертация игрового автомата для Crypto.Games $server_seed = "ylVWazQHJxoG9TAcLmDj1n6q1UkJgyFW4oTJhUhL"; $client_seed = "sdf96dsf9876s9dd78f6"; $next_server_seed_hash = "bdfa300164ebbd77ce9a3c3c58863688c4537df91173088915afdd4c9b6b302c"; $reel_strip_array=array("Error","Apple","Banana","Cherry","Grapes","Strawberry","Orange","Coin","Peach"); $win_array=array(10000,1500,700,100,70,25,11,0); $server_seed_hash=hash('sha256', $server_seed); если ($server_seed_hash==$next_server_seed_hash) { echo "Совпадение начального значения сервера.\n"; } еще { echo "НЕСООТВЕТСТВИЕ СЕМЕННЫХ ЗНАЧЕНИЙ СЕРВЕРА!\n"; echo "Серверный начальный параметр =\t$server_seed\n"; echo "Хэш начального значения сервера =\t$server_seed_hash\n"; echo "Предполагаемый следующий хеш=\t$next_server_seed_hash\n"; } $reels_found=0; $position=0; $combined_seed = $server_seed.$client_seed; echo "Объединенное начальное значение = $combined_seed\n"; $combined_hash = hash('sha512', $combined_seed); echo "Хэш объединенного начального значения = $combined_hash\n"; делать { $first_two=substr($combined_hash,$position,2); $hex_to_dec=hexdec($first_two)%10; если (($hex_to_dec>=1)&&($hex_to_dec<=8)) { $reels_array[$reels_found] = $hex_to_dec; $reels_found++; echo "Reel $reels_found =\t$reel_strip_array[$hex_to_dec]\n"; } $position+=2; если ($position==128) { echo "Ошибка -- В хеше больше нет места."\n"; $reels_found=5; } } while ($reels_found<5); $coins=0; for ($i=0; $i<=4; $i++) { if ($reels_array[$i]==7) { $coins++; } } if ($coins==5) { $win=0; } elseif ( ($reels_array[0]==$reels_array[1]) && ($reels_array[0]==$reels_array[2]) && ($reels_array[0]==$reels_array[3]) && ($reels_array[0]==$reels_array[4])) { $win=1; } // пять одинаковых elseif ($coins==4) { $win=2; } elseif ((($reels_array[0]==$reels_array[1]) && ($reels_array[0]==$reels_array[2]) && ($reels_array[0]==$reels_array[3])) || (($reels_array[0]==$reels_array[1]) && ($reels_array[0]==$reels_array[2]) && ($reels_array[0]==$reels_array[4])) || (($reels_array[0]==$reels_array[1]) && ($reels_array[0]==$reels_array[3]) && ($reels_array[0]==$reels_array[4])) || (($reels_array[0]==$reels_array[2]) && ($reels_array[0]==$reels_array[3]) && ($reels_array[0]==$reels_array[4])) || (($reels_array[1]==$reels_array[2]) && ($reels_array[1]==$reels_array[3]) && ($reels_array[1]==$reels_array[4]))) { $win=3; } // четыре одинаковых elseif ($coins==3) { $win=4; } elseif ($coins==2) { $win=5; } elseif ($coins==1) { $win=6; } else { $win=7; } echo "Win =\t$win_array[$win]\n" // Процедура // 1. Переместите "позиция" на 0 и "найденные барабаны" на 0. // 2. Подключите сервер и клиент Начальное значение и начальное значение сервера, в указанном порядке. // 3. Сгенерируйте хеш SHA-512 строки из шага 2. // 4. Преобразуйте первые два символа, начиная с «позиции» хеша из шага 3, из шестнадцатеричного в десятичное число. // 5. Возьмите конечную цифру из шага 4. // 6. Если результат шага 5 равен 1–8, сопоставьте его с символом в соответствии с таблицей ниже и увеличьте «найденные барабаны» на 1. // 7. Если найдено пять барабанов, остановитесь, в противном случае увеличьте «позицию» на 1 и вернитесь к шагу 4. // 8. После того, как найдено пять барабанов, отобразите их слева направо в порядке, в котором они были найдены в хеше. // 9. Карта символов: // 1 = Яблоко // 2 = Банан // 3 = Вишня // 4 = Виноград // 5 = Клубника // 6 = Апельсин // 7 = Монета // 8 = Персик ?>[/спойлер]


