Розробка системи рейкбеку крипто-казино
Рейкбек (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)
Рейкбек vs Кешбек: різниця
| Параметр | Рейкбек | Кешбек |
|---|---|---|
| База розрахунку | Теоретичний edge казино | Реальні втрати |
| Залежить від результату | Ні (платиться завжди) | Так (тільки при програші) |
| Розмір при програші | Зазвичай менший | Більший |
| Передбачуваність | Висока | Середня |
| Застосовність | Покер, high-volume | Усі типи ігор |
Рейкбек переважний для професіональних гравців з великим обсягом та стабільними результатами. Кешбек — для казуальних гравців, які цінують захист від великих втрат.
Комбінація обох механізмів — стандарт для повноцінної програми лояльності крипто-казино.







