Dazino Lab — демонстрационный браузерный проект с двумя играми на виртуальный баланс:
- классический слот 5×3 с двадцатью постоянными линиями;
- ABYSS — crash-механика с погружением батискафа, ручным и автоматическим выводом.
Главный принцип проекта: браузер отвечает только за интерфейс и анимацию, а результат, баланс и выплаты рассчитываются на сервере.
Проект не принимает реальные ставки и не предназначен для использования в качестве реального казино.
- пять независимых барабанов и три видимые строки;
- двадцать фиксированных линий;
- выплаты слева направо от первого барабана;
- символ WILD;
- плавный разгон, вращение и каскадная остановка барабанов;
- теоретический RTP
96.0034375%; - воспроизводимый результат через
server seed,client seedиnonce.
- серверная точка аварии, определяемая до начала раунда;
- ручной вывод и автовывод;
- восстановление активного раунда после перезагрузки страницы;
- история последних результатов;
- целевой RTP модели
97%; - отдельная проверяемая последовательность seed.
- регистрация и авторизация;
- Argon2id для хранения паролей;
- серверные bearer-сессии;
- общий виртуальный баланс между играми;
- защита от повторного списания через UUID запроса;
- SQLite для локального запуска;
- Docker Compose;
- автоматические тесты и GitHub Actions.
flowchart LR
B[Браузер] -->|HTTP API| F[FastAPI]
F --> A[Авторизация]
F --> S[Игровое ядро Slot]
F --> C[Игровое ядро ABYSS]
A --> D[(SQLite)]
S --> D
C --> D
Результаты игр не рассчитываются во frontend. Клиент получает готовую серверную матрицу слота или состояние раунда ABYSS и только воспроизводит их визуально.
.
├── backend/
│ ├── abyss/ # Математика и сервисы ABYSS
│ ├── game/ # Математика и генерация Slot 5×3
│ ├── routes/ # HTTP-маршруты по областям
│ ├── tests/ # Автоматические тесты
│ ├── tools/ # Проверка RTP и воспроизведение результатов
│ ├── main.py # Сборка FastAPI-приложения
│ ├── models.py # SQLAlchemy-модели
│ └── settings.py # Настройки окружения
├── frontend/
│ ├── icons/
│ ├── js/
│ ├── index.html
│ └── styles.css
├── docs/ # Описание математических моделей
├── .github/workflows/ # CI
├── Dockerfile
├── docker-compose.yml
├── setup.ps1
├── test.ps1
└── start.ps1
Требуется Python 3.12.
Set-ExecutionPolicy -Scope Process Bypass
.\setup.ps1
.\test.ps1
.\start.ps1После запуска приложение будет доступно по адресу:
http://127.0.0.1:8000
Интерактивная документация API:
http://127.0.0.1:8000/docs
Скрипты самостоятельно используют .venv; активировать виртуальное окружение вручную не требуется.
Copy-Item .env.example .env
docker compose up --build -dОстановка:
docker compose downУдаление контейнеров вместе с локальной базой:
docker compose down -v| Переменная | Значение по умолчанию | Назначение |
|---|---|---|
APP_PORT |
8000 |
Порт Docker Compose на компьютере |
APP_ENV |
development локально |
Режим запуска |
APP_NAME |
Dazino Lab API |
Название API |
DATABASE_URL |
SQLite в backend/slot_v2.db |
Подключение к базе данных |
SESSION_LIFETIME_DAYS |
7 |
Срок действия сессии |
INITIAL_BALANCE |
100.00 |
Начальный виртуальный баланс |
CORS_ORIGINS |
пусто | Разрешённые внешние origin через запятую |
Пример временной настройки для PowerShell:
$env:INITIAL_BALANCE = "500.00"
.\start.ps1Точный RTP слота:
.\.venv\Scripts\python.exe backend\tools\calculate_rtp.pyПроверка конкретного вращения:
.\.venv\Scripts\python.exe backend\tools\verify_spin.py --helpПроверка раунда ABYSS:
.\.venv\Scripts\python.exe backend\tools\verify_abyss_round.py --help.\test.ps1Тестами покрыты:
- регистрация, вход и сессии;
- идемпотентность игровых запросов;
- выигрышные линии и WILD;
- точный расчёт RTP слота;
- ручной и автоматический вывод ABYSS;
- восстановление активного раунда;
- скрытие закрытого server seed;
- выдача frontend-файлов через FastAPI.
Сейчас база данных создаётся через SQLAlchemy.create_all. Для долгоживущего production-развёртывания следующим техническим шагом должны стать Alembic и PostgreSQL. Текущая версия рассчитана на локальную демонстрацию, портфолио и изучение серверной игровой логики.

