Разработка системы рейкбэка крипто-казино
Рейкбэк (rakeback) — возврат части комиссии (рейка), которую казино берёт с каждой ставки. В покере это буквальный рейк с каждой раздачи; в казино — эквивалент, рассчитанный от теоретического edge казино. Для высокообъёмных игроков рейкбэк существенно влияет на итоговую доходность.
Как рассчитывается рейкбэк
Poker Rake — прямо и понятно: казино берёт 5% от каждого пота (с кэпом). Рейкбэк 30% = игрок получает обратно 30% от уплаченного рейка.
Casino Rakeback — в слотах и настольных играх "рейк" = теоретический house edge × сумма ставок. Если слот имеет RTP 96%, то house edge = 4%. Ставка $100 → теоретический рейк казино = $4. Рейкбэк 20% = $0.80 возврата.
class RakebackCalculator:
# Теоретический house edge по категориям игр
HOUSE_EDGE = {
"slots": 0.04, # 4% (100 - 96% RTP)
"blackjack": 0.005, # 0.5% при оптимальной стратегии
"roulette_euro": 0.027, # 2.7%
"roulette_american": 0.053,
"baccarat": 0.012,
"poker_casino": 0.03,
"crash": 0.01, # зависит от конкретной игры
}
def calculate_theoretical_rake(self, bet: Bet, game_category: str) -> Decimal:
edge = self.HOUSE_EDGE.get(game_category, 0.03)
return bet.amount * Decimal(str(edge))
async def calculate_rakeback_for_period(
self,
user_id: str,
from_time: datetime,
to_time: datetime,
rakeback_pct: float,
) -> Decimal:
bets = await self.bet_repo.get_settled_bets(user_id, from_time, to_time)
total_theoretical_rake = Decimal(0)
for bet in bets:
category = await self.game_repo.get_category(bet.game_id)
theoretical_rake = self.calculate_theoretical_rake(bet, category)
total_theoretical_rake += theoretical_rake
return total_theoretical_rake * Decimal(str(rakeback_pct / 100))
Периодичность начисления
Instant Rakeback — начисляется после каждой ставки. Лучший UX, но высокая нагрузка на систему. Реализуется через batch processing каждые N минут.
Daily Rakeback — начисляется раз в день. Баланс между UX и производительностью.
Weekly Rakeback — стандарт для большинства казино.
class InstantRakebackProcessor:
BATCH_INTERVAL = 60 # секунд
MIN_RAKEBACK = Decimal("0.001") # минимальная сумма для начисления
async def process_batch(self):
"""Обрабатываем накопленный рейкбэк каждую минуту"""
pending = await self.rakeback_repo.get_pending_amounts()
for user_id, pending_amount in pending.items():
if pending_amount < self.MIN_RAKEBACK:
continue
user = await self.user_repo.get(user_id)
rakeback_pct = VIP_CONFIGS[user.vip_level].rakeback_pct
rakeback_amount = pending_amount * Decimal(str(rakeback_pct / 100))
async with self.db.transaction():
await self.balance_service.credit(
user_id=user_id,
amount=rakeback_amount,
currency="BTC", # или нативная валюта ставок
type="RAKEBACK",
reference=f"RB:{datetime.utcnow().strftime('%Y%m%d%H%M')}",
)
await self.rakeback_repo.clear_pending(user_id, pending_amount)
Rakeback vs Cashback: в чём разница
| Параметр | Rakeback | Cashback |
|---|---|---|
| База расчёта | Теоретический edge казино | Реальные потери |
| Зависит от результата | Нет (платится всегда) | Да (только при проигрыше) |
| Размер при проигрыше | Обычно меньше | Больше |
| Предсказуемость | Высокая | Средняя |
| Применимость | Poker, high-volume | Все типы игр |
Рейкбэк предпочтителен для профессиональных игроков с высоким объёмом и стабильными результатами. Кэшбэк — для казуальных игроков, которые ценят защиту от больших потерь.
Комбинация обоих механизмов — стандарт для полноценной лояльностной программы крипто-казино.







