Алгоритм рандомайзера в лотереях Chainik Недавно chainik.io з | Monster News
Алгоритм рандомайзера в лотереях Chainik
Недавно chainik.io запустил функционал лотерей, которые работают на блокчейне Minter, являются абсолютно не прогнозируемыми (заранее узнать результат невозможно), но проверяемыми постфактум и полностью прозрачными.
Как это работает:
— Выбор адреса-победителя происходит среди провайдеров ликвидности конкретного пула. Для этого необходимы все блоки полных суток (время по UTC)
— Для начала нобходимо выбрать блок, который будет являться снэпшотом. В этом блоке будут зафиксированы адреса провайдеров (с заранее настроеным Топ'ом и исключениями, которые видны в параметрах лотереи) и их балансы LP-токенов (ликвидность). Для этого берем первый и последний блок суток (время по UTC), между ними производим расчеты на основе хэшей и выбираем рандомный блок. В формуле участвуют также:
• адрес лотереи (для уникализации, ведь в одном пуле может быть несколько лотерей, нужно чтобы у них были разные результаты)
• ID LP-токена пула
• разделитель (любое число, в данном случае 1234567890)
— Далее нужно определиться с тем, как выбрать победителя. Для этого просуммируем LP-токены всех провайдеров пула на выбранный ранее блок (например, сумма = 100) и случайно выберем порог в пределах этой суммы LP-токенов (например, 57), который будет являться маркером победителя
— Миксуем адреса провайдеров по формуле и от 0 начинаем прибавлять их количество LP-токенов. Например: 0 + 1.2 + 0.7 + 0.004 + 13.27 ... Таким образом добираемся до полученного ранее порога 57. Тот адрес, чьи LP-токены приведут к превышению этого порога (57) – будет являться победителем лотереи текущего дня
— Последним этапом расчитывается приз победителя на основе настроек лотереи:
• процент от пула
• фиксированный
• процент от ликвидности адреса-победителя, но не более выбранного процента пула
Проверить победителя любой лотереи:
Страница лотереи -> Блок History -> Ссылка в дате
На проверочной странице находятся все необходимые данные и формулы (пример). Воспроизвести расчеты и убедиться в их правильности можно самостоятельно, для этого просто возьмите данные из ноды Minter.
Сам алгоритм был разработан @ALEXEYXL (владелец Monster Node), за что ему большое спасибо, это отличный способ получить случайное значение в полностью проверяемой системе (блокчейн).
Свою лотерею в Chainik может запустить любой желаюший, подробности читайте в этом посте.