Генератор случайных чисел основан на теории игр и блокчейн-технологии SmartHoldem.
Если вы узнаете номер по завершении игры, вернётесь в прошлое и выберите выигрышный номер. Результат игры изменится и выигрышный номер станет другим.
С помощью RNG возможно получить настоящие случайные числа, независимые от времени и знаний результата в будущем.
Придумаем простые правила лотереи: номера билетов от 0 до 99, номер билета можно приобрести 1 раз, розыгрыш происходит каждые 2880 блоков
До начала розыгрыша лотереи, Дарья приобрела билет с номером 14, Василий приобрел билет с номером 21
Каждый участник лотереи совершил платежную транзакцию в блокчейне SmartHoldem с номером билета в примечании, подписанную уникальной крипто-подписью.
Транзакции добавлены в блок, блок получил уникальный хэш состоящий из транзакций, хэша предыдущего блока и других данных.
Каждый 8 секунд создается новый уникальный блок. Пример хэша блока: bd082c73...960fbda8
Розыгрыш назначен через 2880 блоков.
К примеру блок на котором должен состояться розыгрыш лотереи d2c6f1ab...cae17f0e
Нам необходимо вычислить выигрышный номер на основе 16-ричного хэша блока
Т.к. для нас достаточно значений от 0 до 99, возьмем из хэша блока крайние значения:
0xF,0x0,0xE и преобразуем каждое в в десятичную систему исчисления 0xf="15" + 0x0 = "0", 0xe = "14" = 15014 и получим выигрышное число = 14
В этом случает победитель лотереи Дарья.
Предположим у Василия машина времени и он знает выигрышное число 14, возвращается в прошлое и первым покупает билет.
Дарья покупает другой билет, т.к. по нашим правилам номер уникален и имеет 1 владельца.
“Результатом будет совершенно иной хэш разыгрываемого блока, т.к. все хэши транзакций и блоков изменятся”
Таким образом мы получаем:
В процессе ожидания разыгрываемого блока другие пользователи совершают свои случайные транзакции не связанные с лотереей, но влияя на конечный хэш дерева Меркла.
Возможно усложнить алгоритм к примеру конкатенацией имени делегата подписавшего блок (каждый раунд делегаты назначаются pRNG) + хэш блока, получая из них новый хэш. Вы сами создаёте правила генерации чисел.
Если нам необходимо получить диапазон чисел к примеру от 0 до 51, тогда мы возьмем последние 2 знака из преобразованного хэша, мы знаем, последние 2 знака в конечном виде могут принимать значения от 0 до 99
а в результате получаем число > 51, например 92, мы просто используем разность с условием, т.е. результат 92 - 51 = 41
На данный момент значения по умолчанию: 0..9, 0..99, 0..999 итд