Генерация результата игровых режимов
В игровых режимах Wheel, Double — результат каждого раунда генерируется на клиентах четырех разных и независимых устройств, которые участвуют в конкретном раунде. К ним относится игровой сервер и три игрока, которые первыми сделали ставку.
В момент начала раунда игра объединяет серверный сид и клиентские сиды первых 3 игроков. Объединенные сиды генерируют SHA256 хеш, а сформированный хеш уже определяет исход конкретного раунда.
Для участия в формировании результата раунда, Вам необходимо находиться в числе первых трех игроков, которые делают ставку в конкретном раунде.
В игровом режиме Jackpot — система случайным образом генерируются соль (32 случайных символа) и число от 0 до 1. Они складываются между собой и хешируются с помощью sha256, хэш доступен всем игрокам на странице игры до совершения ставки.
Каждому игроку выдается 1 билет за каждые $0.01 (1 цент). В конце игры выбирается выигрышный билет по формуле: банк * 100 * число раунда. Тот, у кого был данный билет — побеждает.
В истории игры Вы можете увидеть соль, с помощью которой была произведена генерация, и убедиться в неизменности хэша. Расшифровать хэш можно на любом сайте-генераторе SHA256.
Server Seed
Серверный сид генерируется нашей системой в виде случайной строки из 44 символов. Мы предоставляем зашифрованный хэш сгенерированного числа до начала раунда, его значение находится на странице игры. Запишите хэш прежде чем вы сделаете ставку, так Вы убедитесь в неизменности значения и сможете сделать расчёт результата после окончания раунда.
После игры Вы можете убедиться в честности раунда, сверив хеш серверного сида.
Client Seed
Клиентский сид генерируется на устройстве каждого пользователя игры и может быть заменен на персональный (любой набор символов на усмотрение пользователя). Клиентский сид используется для обеспечения полностью случайной генерации результата.
Этот механизм предоставляет прозрачность и честность генерации результата игры. В случае отсутствия клиентских сидов при формировании конечного хеша - на формирование результата игры влиял бы только серверный сид.
Wheel
Каждый цвет колеса привязан к номеру сектора. Номера секторов не отображены в игровом модуле, но, их можно сверить на этой странице.
Синий цвет (2x) - 2; 4; 6; 8; 10; 12; 14; 16; 18; 20; 22; 24; 26; 28; 30; 32; 34; 36; 38; 40; 42; 44; 46; 48; 50; 52
Зеленый цвет (3x) - 3; 5; 7; 13; 15; 17; 23; 25; 27; 29; 31; 37; 39; 41; 47; 49; 51
Фиолетовый цвет (4x) - 1; 9; 11; 19; 21; 33; 35; 43; 45; 53
Золотой цвет (35x) - 0
Выигрышный номер сектора рассчитывается с помощью участвующих в раунде игроков по формуле:
const sha256 = /* any javascript sha256 library */;
const concatenatedString = serverSeed + userSeedOne + userSeedTwo + userSeedThree;
const hash = sha256(concatenatedString).toString();
const hex = hash.substring(0, 8);
const dec = parseInt(hex, 16);
const number = Math.floor((dec / 16 ** 8) * 54);
console.log(number);
Double
Каждый цвет на барабане привязан к номеру сектора:
Красный цвет (2х) - 1; 3; 4; 5; 6; 7
Зеленый цвет (14х) - 0
Фиолетовый цвет (7х) - 2, 10
Черный цвет (2х) - 8; 9; 11; 12; 13; 14
Выигрышный номер сектора рассчитывается с помощью участвующих в раунде игроков по формуле:
const sha256 = /* any javascript sha256 library */;
const concatenatedString = serverSeed + userSeedOne + userSeedTwo + userSeedThree;
const hash = sha256(concatenatedString).toString();
const hex = hash.substring(0, 8);
const dec = parseInt(hex, 16);
const number = Math.floor((dec / 16 ** 8) * 15);
console.log(number);
Jackpot
Число раунда, с помощью которого в дальнейшем выбирается выигрышный билет, генерируется по формуле:
const sha256 = /* any javascript sha256 library */;
const gameBankUsd = 100; /* or any real game bank */
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
function dec2hex(dec) {
return dec.toString(16).padStart(2, '0');
}
function genSalt(len) {
const arr = new Uint8Array((len || 40) / 2);
window.crypto.getRandomValues(arr);
return Array.from(arr, dec2hex).join('');
}
const roundNumber = getRandomArbitrary(0, 1000000000) / 1000000000;
const salt = genSalt(32);
const string = roundNumber +'+'+ salt;
const hash = sha256(string);
const winTicket = Math.floor(Number(gameBankUsd) * 100 * Number(roundNumber));
console.log(hash, winTicket);