kekoser, 8 октября 2026 - 22:19

Naganbot – бот для русской рулетки с проверяемой случайностью от drand

Naganbot – бот для русской рулетки с проверяемой случайностью от drand

Обзор проекта

Naganbot – это открытый бот, реализующий игру в русскую рулетку. Проект размещён на GitHub и распространяется под открытой лицензией.

Требования

  • Docker и docker‑compose.
  • База данных PostgreSQL версии 18 или MySQL 8/MariaDB 11.

Установка и настройка

Для начала необходимо подготовить файл переменных окружения. Скопируйте шаблон .env.dist в .env и отредактируйте параметры в соответствии с вашей инфраструктурой:

cp .env.dist .env

Описание каждой переменной содержится в комментариях внутри файла.

Дальше следует собрать или загрузить готовые Docker‑образы. Для этого доступны два make‑скрипта:

  • make container-build – собрать образ из исходного кода.
  • make container-pull – скачать готовый образ из реестра.

Механизм случайности

Для генерации исходных случайных данных Naganbot использует drand – децентрализованный публичный рандом‑бейкон, поддерживаемый Cloudflare, Protocol Labs и другими участниками. Бот обращается к сети quicknet, где новые раунды публикуются каждые 3 секунды.

Полученный от drand случайный набор байтов подписан криптографически. После получения бот формирует хеш SHA‑256, объединяя полученный набор с идентификатором игры (game_id), и использует полученный хеш для определения исхода:

  • Первые 4 байта (hash[0:4]) берутся как 32‑битное целое число, берётся остаток от деления на 100. Если результат меньше 3, тип пули считается атомной, иначе – свинцовой.
  • Байты с 5‑го по 12‑й (hash[4:12]) интерпретируются как 64‑битное целое, берётся остаток от деления на количество игроков N. Полученный индекс определяет жертву, за исключением атомной пули, при которой все игроки «умирают».

Для каждой партии сохраняется ссылка на использованный drand‑бейн, которую можно открыть через эндпоинт /ngjoined.

Проверка результатов

После завершения игры в ответе от /ngjoined отображается ссылка‑доказательство. Чтобы вручную убедиться в корректности результата, выполните следующие шаги:

  1. Откройте ссылку‑доказательство и запомните шестнадцатеричное значение случайности (randomness) и параметр game[id].
  2. Переведите randomness из hex в массив байтов.
  3. Посчитайте SHA‑256 от randomness_bytes + game_id_string.
  4. Примените те же правила разбора хеша: первые 4 байта → %100 → тип пули, байты 4‑12 → %N → индекс жертвы.

Поскольку значение случайности генерируется сетью drand до отправки запроса боту, сам бот не может изменить результат игры.

Запуск

Для запуска готовой конфигурации достаточно выполнить команду:

make start

Эта команда поднимет необходимые контейнеры, и бот начнёт обслуживать запросы.

Заключение

Naganbot сочетает простую игру в русскую рулетку с публично‑проверяемой случайностью, что позволяет пользователям убедиться в честности результата без дополнительного доверия к серверу.

Источник: GitHub - taranovegor/naganbot: Try your luck at Russian roulette

0
0 понравилось
0 не понравилось
+
–
0
Обсудить →

Добавить комментарий
Если нужно ответить кому-то конкретно,
лучше нажать на «Ответить» под его комментарием


Реклама
240x400