Розробка реферальної програми крипто-казино
Реферальна програма перетворює існуючих гравців на канал привернення нових. У крипто-казино це особливо ефективно: крипто-спільнота активна в соціальних мережах та месенджерах, а довіра рекомендаціям від реальних користувачів вищої реклами.
Моделі реферальних програм
CPA (Cost per Acquisition) — фіксована виплата за кожного приведеного гравця, який зробив депозит. Просто для користувача, зрозумілий результат.
Revenue Share — % від втрат (GGR) приведених гравців. Пасивний дохід, стимулює приводити якісних активних гравців.
Hybrid — комбінація CPA + Rev Share. CPA виплачується негайно, rev share — постійно.
Tier-based — якщо приведений гравець сам когось приводить, верхній рівень теж отримує %.
Технічна реалізація
class ReferralService:
async def generate_referral_code(self, user_id: str) -> str:
"""Генеруємо унікальний реферальний код"""
# Короткий код на основі user_id + випадкового суфікса
code = base62_encode(int(user_id.replace('-', ''), 16) % 1_000_000_000)
code = code[:8].upper()
# Перевіряємо унікальність
while await self.ref_repo.code_exists(code):
code = generate_random_code(8)
await self.ref_repo.save_code(user_id, code)
return code
async def register_referral(self, new_user_id: str, referral_code: str):
"""Прив'язуємо нового користувача до рефереру"""
referrer = await self.ref_repo.get_by_code(referral_code)
if not referrer:
return # Невалідний код, мовчки ігноруємо
if referrer.user_id == new_user_id:
return # Не можна рефернцювати самого себе
# Перевіряємо self-referral через device fingerprint / IP
if await self.is_same_user_likely(referrer.user_id, new_user_id):
await self.flag_suspicious(referrer.user_id, new_user_id, "POSSIBLE_SELF_REFERRAL")
return
await self.ref_repo.save_referral(
referrer_id=referrer.user_id,
referred_id=new_user_id,
code_used=referral_code,
)
async def on_qualifying_deposit(self, user_id: str, deposit_amount: Decimal):
"""Викликається коли реферал робить перший депозит"""
referral = await self.ref_repo.get_referral(referred_id=user_id)
if not referral or referral.cpa_paid:
return
program = await self.get_active_program()
# Перевіряємо мінімальний депозит для CPA
if deposit_amount < program.min_deposit_for_cpa:
return
# Нараховуємо CPA
await self.pay_cpa(
referrer_id=referral.referrer_id,
referred_id=user_id,
amount=program.cpa_amount,
deposit_amount=deposit_amount,
)
await self.ref_repo.mark_cpa_paid(referral.id)
async def calculate_monthly_rev_share(self):
"""Щомісячний розрахунок revenue share"""
program = await self.get_active_program()
month_start = get_last_month_start()
month_end = get_last_month_end()
referrers = await self.ref_repo.get_active_referrers()
for referrer_id in referrers:
referred_users = await self.ref_repo.get_referred_users(referrer_id)
total_ggr = Decimal(0)
for referred_id in referred_users:
user_ggr = await self.bet_repo.get_ggr(
user_id=referred_id,
from_time=month_start,
to_time=month_end,
)
total_ggr += user_ggr
if total_ggr <= 0:
continue # Нема прибутку казино від цих гравців
rev_share = total_ggr * Decimal(str(program.rev_share_pct / 100))
# Застосовуємо negative carryover (спірна точка в індустрії)
if program.negative_carryover:
# Якщо в попередньому місяці був негативний GGR — переносимо збиток
prev_balance = await self.revshare_repo.get_balance(referrer_id)
if prev_balance < 0:
rev_share = rev_share + prev_balance
if rev_share < 0:
await self.revshare_repo.update_balance(referrer_id, rev_share)
continue
if rev_share > 0:
await self.pay_rev_share(referrer_id, rev_share, month_start)
Афіліет-панель
Рефереру потрібен дашборд:
Мої рефералі: 47 гравців
Конверсія: 23% (з 204 кліків → 47 депозитів)
Заробив всього: 0.85 BTC
Цей місяць:
Нові гравці: 8
CPA: 0.04 BTC
Revenue Share: 0.023 BTC
Всього: 0.063 BTC
Топ гравці (анонімно):
Гравець #A1: 0.008 BTC GGR
Гравець #B3: 0.006 BTC GGR
...
Деталі активності конкретних гравців приховані (конфіденційність), але афіліет бачить агреговані дані.
Fraud Prevention
Referral fraud — поширена проблема: створення фіктивних аккаунтів для CPA виплат.
- Device fingerprint — один пристрій, кілька аккаунтів
- IP restrictions — ліміт нових аккаунтів з однієї IP
- Wagering threshold — CPA виплачується не за депозит, а за досягнення WR
- Delayed payouts — виплата через 30 днів після депозиту
- Manual review — аномально висока конверсія (> 50%) потребує перевірки







