Как устроен лидерборд и античит-фильтры
Лидерборд — это «витрина честности» турнира. Он переводит поток игровых событий в прозрачные позиции игроков и делает соревнование понятным и мотивирующим. Рядом с ним живёт античит-слой, который защищает от дубликатов событий, ботов, мультиаккаунтов и прочих абьюзов — без вмешательства в RTP и RNG. Ниже — полный разбор архитектуры, правил и практик.
1) Архитектура лидерборда: от события до позиции
Путь данных: Event Ingest → Scoring Engine → Leaderboard Aggregator → Cache → UI/Comms → Rewards/Claim.
Event Ingest (идемпотентный приём):- Каждому спину/ставке присваивается `event_uuid`.
- Повторы отбрасываются (дедупликация по UUID, источнику, времени).
- Реплей и ретраи безопасны («at-least once» на транспорте, «exactly once» в начислениях).
- Версионируемые правила: `rule_set_id`, feature-flags по гео/дивизионам.
- Анти-pay-to-win: лог-нормализация (напр., `Score = round(100log2(Win/Bet+1))`), зачёт лучших N.
- Исключения: бонусные средства с коэффициентом ≤ 0.5 или `0`, капы на очки за спин/день.
- Горячая агрегация (in-memory / stream) для top-K; холодные почасовые снепшоты для бэкапа.
- Шардирование по дивизионам/регионам; поддержка командного режима (Sum Top-M вкладов/день).
- Обновления позиции и очков в ≤ 200–300 мс (p95).
- Push/in-app нуджи: «+40 очков», «осталось 2 попытки из 20», «ты обогнал N игроков».
- Автовыдача по закрытию, окно claim ≤ 72 ч, ре-трай доставки, журнал операций для аудита.
2) Модель данных и состояния
Идентификаторы: `player_id` (внутренний), `device_id` (фингерпринт), `session_id`, `event_uuid`, `rule_set_id`, `division_id`.
Состояния игрока: best-N результаты/день, текущий счёт, лучший множитель, время достижения итогового счёта, вклад в команду.
Тай-брейки (иерархия): 1) раньше достиг; 2) большее разнообразие контента; 3) детерминированная жеребьёвка (seed от `player_id` + `tournament_id`).
3) Античит-слой: что фильтруем и как
3.1. Идемпотентность и дедупликация
Отбрасываем дубликаты `event_uuid`, а также «похожие» события по (player, time, bet, game) в узком окне.
Защита от «дважды посчитали»: начисление очков как транзакция с записью «видели/начислили».
3.2. Поведенческая биометрия и граф связей
Фичи: интервалы между событиями, распределение ставок, последовательности провайдеров, скорость переключений.
Граф-анализ: общие устройства/IP/платежи, кластеры взаимосвязанных аккаунтов.
Use-cases: фарм мультиаккаунтами, «паровозы» в командных ивентах, синхронные «подборки» множителей.
3.3. Боты и автоматизация
Сигналы: неестественно равномерные интервалы, супер-человеческая скорость, отсутствие «шума» в паттернах кликов.
Меры: human-in-the-loop челленджи (капчи/мини-квесты) в финальные минуты спринтов; мягкий локальный бан до разбора.
3.4. Анти-циклинг и капы
Кеп попыток: засчитываются только N лучших за период (например, 20/день).
Квоты на контент: ограничение на вклад одного слота/провайдера/сутки, бонус за первых M уникальных провайдеров.
Кап очков за спин/день: отсечка джекпот-экстримов, если лог-кривой недостаточно.
3.5. Бонусные средства и фриспины
Правила: коэффициент < 1 или полное исключение из очков; прозрачное раскрытие в T&C.
Фриспины как приз: считаются отдельно или понижающим коэффициентом; нельзя «стекать» с базовой формулой.
3.6. Гео/регуляторика
Учитываем гео-ограничения, возраст, лицензии. Очки начисляются только в рамках добровольных лимитов игрока (RG).
4) Честность формулы и дивизионы
Нормализация по ставке: множитель (`Win/Bet`) + лог-кривая.
Лучшие N vs сумма: убирает pay-to-grind.
Дивизионы: по среднему бету/MMR/региону; командный зачёт — Sum Top-M вкладов/день.
Прозрачность формулы: кратко в UI, подробно в T&C с примерами.
5) UX-паттерны: как показывать лидерборд
Центр турнира: правило победы, таймер, ваш счёт, оставшиеся попытки, прогресс до награды.
Статусы и маркеры: «в зачёте»/«незачёт» попыток, «лучший спин дня», «бонус за провайдера №3».
Топ-таблицы: общий топ-100 + «ваша позиция» + «топ дня»; для кланов — вклад и суммарный прогресс.
Доступность (A11y): контраст, крупные цифры, фокус-стейты, озвучивание прогресса; управление с клавиатуры.
Локализация: таймеры в локальной таймзоне, тексты на языке региона.
6) SRE-практики и операционные SLA
Цели: UI-лаг ≤ 300 мс (p95); аптайм ≥ 99.9%; время выдачи призов ≤ 10 мин (p95).
Мониторинг: скорость событий/мин, рост лагов, «пилообразность» топ-K, процент дубликатов, error budget.
Алерты и стоп-кнопка: авто-деградация (снижаем N лучших, отключаем тяжелые виджеты), фолбэк на почасовые снепшоты.
Аудит: неизменяемый журнал: версия правил, начисления, изменения позиций, выдачи, инциденты.
Post-mortem: RCA через 24–48 ч, список action items.
7) Типовые векторы атаки и контрмеры
8) Метрики качества лидерборда и античита
Справедливость: корреляция счёта со ставкой (должна быть слабой), дисперсия очков по квинтилям, ширина выплат.
Играбельность: среднее засчитанных попыток/игрок/день, доля игроков с ≥1 засчитанным спином, повторные участия.
Качество опыта: жалобы/10k, claim-rate ≤ 72 ч, время от события до UI.
Безопасность: доля отбракованных событий, число заблокированных кластеров, ложноположительные (FPR) и ложоотрицательные (FNR).
RG: саморегуляции, срабатывания лимитов, time-on-device (guardrails).
Бизнес: ARPDAU/ARPPU, LTV-uplift участников vs контроль (кохортно).
9) Правила и T&C (шаблонные пункты)
Формула очков: (пример) `Score = round(100log2(Win/Bet+1))`; зачёт `N=20` лучших попыток/день.
Бонусные средства: `coef_bonus ≤ 0.5` или исключены.
Капы: `Cap_per_spin`, `Cap_per_day`, квоты на провайдера/слот.
Тай-брейк: раннее достижение → разнообразие → seed-жеребьёвка.
RG: очки только в рамках добровольных лимитов; канал помощи.
Античит: дедупликация, поведенческий анализ, холды призов до проверок; основания дисквалификации.
Сроки: дедлайны в UTC, claim ≤ 72 часа; апелляция результатов — до X часов.
10) Чеклист запуска лидерборда
Правила и экономика
- Формула, N лучших, капы, бонус за разнообразие.
- Дивизионы и критерии входа; командный Sum Top-M (если нужно).
- RewardRate, ширина выплат, вейджеры, сроки claim.
Техника и SRE
- Идемпотентный Ingest, дедупликация, снепшоты.
- SLA до UI ≤ 300 мс, Health/Status API, стоп-кнопка.
- Аудит логов, версионирование правил.
Античит и RG
- Поведенческий скоринг, граф связей, анти-бот.
- Квоты/кулдауны, холды призов, KYC/AML.
- RG-лимиты, напоминания о паузах, нейтральный копирайт.
UX и Коммуникации
- Центр турнира, микро-фидбек, A11y, локализация.
- Краткие правила в 1 экран + полные T&C.
- Пост-ивент: баннеры, хайлайты, персональная статистика.
11) Примеры конфигураций
Спринт 20 минут
Кеп попыток `N=15`, итог — медиана топ-3 пятиминуток.
Анти-бот челлендж в последние 3 минуты.
Тай-брейк: раннее достижение → разнообразие.
Недельный марафон
Очки по множителю, зачёт `N=20`/день, бонус за 3 уникальных провайдера/день (+50 очков).
Кап per spin = 700, per day = 3 000 (пример).
Командный модуль: Sum Top-10 вкладов/день.
Сезон 6 недель
Недельные чекпоинты + финальный рейд-ивент.
Статусы (косметика/баннер) для топ-5% — без денежного преимущества.
12) Типичные ошибки и как их избежать
1. Сумма всех попыток без нормализации → pay-to-grind. Решение: лучшие N + лог-кривая.
2. Нет идемпотентности → «двойные очки». Решение: UUID + журнал начислений.
3. Медленный фидбек → потеря драйва. Решение: горячая агрегация, кэш, SLA ≤ 300 мс.
4. Скрытые условия → жалобы. Решение: краткие правила + полные T&C рядом.
5. Слабый античит → боты и мультиакки. Решение: поведенческий скоринг, граф связей, холды призов.
6. Игнор RG/A11y → риски и отток. Решение: лимиты, напоминания, доступность.
7. FX/таймзоны → споры по дедлайнам. Решение: UTC как истина, локализация на клиенте, FX-буфер.
Сильный лидерборд — это сочетание честной формулы, быстрой real-time агрегации и жёсткого античит-пояса, встроенного в RG и комплаенс. Держите события идемпотентными, счёт — нормализованным и ограниченным по объёму, интерфейс — прозрачным и доступным, а операции — наблюдаемыми и аудируемыми. Тогда лидерборд станет не только драйвером вовлечённости и Retention, но и надёжной опорой доверия к турнирам и вашему продукту.