Система верификации игроков крипто-казино: модульная архитектура
Спроектировать систему верификации для крипто-казино — это найти баланс между анонимностью Web3 и требованиями регуляторов. Крипто-казино работают под двойным давлением: пользователи ценят приватность, а лицензирующие органы и платёжные партнёры требуют KYC, AML и проверку возраста. Это не просто юридическая формальность — архитектура должна обеспечивать compliance, не отпугивая аудиторию. Наш подход — модульная tiered-система, которая адаптируется под лицензию и регион. За 5+ лет в блокчейн-разработке мы реализовали более 30 KYC-решений под ключ для крипто-проектов, включая казино и обменники.
Как работает tiered-верификация? — разработка системы верификации
Не все игроки требуют одинаковой проверки. Tiered approach — стандарт для gambling:
| Уровень | Лимит | Требования | Время проверки |
|---|---|---|---|
| Tier 0 | до $500/мес | Email + wallet + auto AML | Мгновенно |
| Tier 1 | до $5,000/мес | Имя, дата рождения, страна | 1-2 мин |
| Tier 2 | до $50,000/мес | Government ID + liveness | 5-10 мин |
| Tier 3 | > $50,000/мес | Source of Funds, PEP | 1-2 дня |
Tier 0 (минимальный): электронная почта, подключение кошелька и автоматический AML-скрининг адреса через Chainalysis или Elliptic. Никаких документов, ответ моментальный. Tier 1 (базовый): имя, дата рождения, страна проживания. Автоматическая проверка по sanctions lists. Подтверждение аккаунта по email или SMS. Tier 2 (расширенный): government ID (паспорт, права), liveness check, адрес проживания. Используем Sumsub, Onfido или аналог. Tier 3 (enhanced due diligence): Source of Funds, Source of Wealth, расширенный PEP/Sanctions check, ручная проверка compliance-офицером.
Пример настройки уровней
В конфигурации задаются лимиты и требования для каждого tier. Например, для Tier 0 лимит по депозиту — 0.1 BTC/мес, для Tier 1 — 1 BTC. Уровни автоматически повышаются при достижении лимита.Какие AML-инструменты использовать?
Для казино критично: деньги из darknet markets или stolen funds — прямая ответственность платформы. Сравнение провайдеров:
| Провайдер | Тип мониторинга | Скорость | Кастомизация |
|---|---|---|---|
| Chainalysis KYT | Ончейн-транзакции | Реал-тайм | Высокая |
| Elliptic | Ончейн + офчейн | Реал-тайм | Средняя |
| Парсер OFAC | Статичные списки | Ежедневно | Полная |
Согласно Chainalysis KYT документации, категории риска включают darknet market, stolen funds, ransomware, sanctions. Для таких адресов — reject депозита и заморозка аккаунта. Grey zone (gambling, P2P exchange, mixing) требуют ручного review. Отдельно проверяем wallet-адреса в OFAC SDN List через Chainalysis или собственный парсер — список обновляется ежедневно.
Sumsub обрабатывает запросы в 3 раза быстрее, чем ручная верификация, а Chainalysis KYT выявляет подозрительные транзакции на 95% точнее статического OFAC-скрининга.
Интеграция Chainalysis KYT (Know Your Transaction)
async function screenAddress(address: string, asset: string): Promise<RiskScore> { const response = await chainalysisClient.post('/v1/users', { userId: address, }); const transferResponse = await chainalysisClient.post('/v1/transfers', { network: asset, asset: asset, transferReference: address, direction: 'received', }); return { riskScore: transferResponse.data.riskScore, cluster: transferResponse.data.cluster?.name, category: transferResponse.data.cluster?.category, }; } Как интегрировать KYC-провайдера?
Sumsub — стандартный выбор для gambling
Sumsub предоставляет WebSDK для встроенного flow. Генерация токена на бэкенде:
async function getSumsubToken(applicantId: string): Promise<string> { const timestamp = Math.floor(Date.now() / 1000); const method = 'POST'; const url = `/resources/accessTokens?userId=${applicantId}&levelName=basic-kyc-level`; const signature = crypto .createHmac('sha256', SUMSUB_SECRET_KEY) .update(timestamp + method + url) .digest('hex'); const response = await axios.post( `https://api.sumsub.com${url}`, {}, { headers: { 'X-App-Token': SUMSUB_APP_TOKEN, 'X-App-Access-Sig': signature, 'X-App-Access-Ts': timestamp, } } ); return response.data.token; } // Frontend инициализация import SumsubWebSdk from "@sumsub/websdk"; const sdk = SumsubWebSdk.init( accessToken, () => refreshToken(), { lang: "ru", onMessage: (type, payload) => { if (type === "idCheck.onApplicantStatusChanged") { if (payload.reviewResult?.reviewAnswer === "GREEN") { handleKYCApproved(payload.applicantId); } } }, onError: (error) => console.error("Sumsub error:", error), } ); sdk.launch("#sumsub-container"); Важный момент — проверка подписи webhook, чтобы не принять поддельный callback:
function verifySumsubWebhook(req: Request): boolean { const signature = req.headers['x-payload-digest']; const secret = process.env.SUMSUB_WEBHOOK_SECRET; const expectedSignature = crypto .createHmac('sha256', secret) .update(req.rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expectedSignature) ); } async function handleSumsubWebhook(payload: SumsubWebhookPayload) { const { applicantId, reviewResult, type } = payload; if (type === "applicantReviewed") { if (reviewResult.reviewAnswer === "GREEN") { await db.updateUserKYCStatus(applicantId, "APPROVED", reviewResult.reviewRejectType); await updateUserTier(applicantId); } else if (reviewResult.reviewAnswer === "RED") { await db.updateUserKYCStatus(applicantId, "REJECTED", reviewResult.moderationComment); await notifyUser(applicantId, "kyc_rejected"); } } } Верификация возраста без документов
Для рынков, где документальный KYC неприемлем, используем Yoti Age Verification. Пользователь получает signed age token; казино видит только "старше 18". AgeID (UK стандарт) — аналогичный подход. Интеграция через OAuth 2.0: Yoti выступает identity provider.
Геоблокировка и IP-верификация
KYC не заменяет геоблокировку. Обязательные проверки:
async function checkPlayerEligibility(ip: string, walletAddress: string): Promise<EligibilityResult> { const geoResult = await maxmindClient.country(ip); const country = geoResult.country.isoCode; if (BLOCKED_COUNTRIES.includes(country)) { return { allowed: false, reason: 'geo_blocked', country }; } const ipRisk = await ipqualityscore.check(ip); if (ipRisk.vpn || ipRisk.proxy || ipRisk.tor) { return { allowed: false, reason: 'vpn_detected' }; } return { allowed: true, country }; } Списки заблокированных стран определяются лицензией: Кюрасао, Мальта, Эстония — каждая со своим списком restricted jurisdictions.
Почему необходима ответственная игра?
Лицензированные казино обязаны реализовать функции responsible gambling:
- self-exclusion (блок от 1 дня до перманентного)
- deposit limits (дневные/недельные/месячные — уменьшение мгновенно, увеличение через cooling-off 24-72 часа)
- reality check (уведомление о времени и потерях)
- cooling-off period (временная пауза)
Эти меры не только соответствуют требованиям регуляторов, но и снижают риски негативного пользовательского опыта. Автоматизация ответственной игры — обязательный элемент compliance.
Процесс работы
- Аналитика: изучение требований лицензии и выбор провайдеров.
- Проектирование: архитектура KYC/AML, схема потоков.
- Интеграция: подключение Sumsub, Chainalysis, MaxMind, Yoti.
- Тестирование: регресс и нагрузка.
- Деплой и обучение compliance-команды.
Сроки
| Компонент | Срок |
|---|---|
| KYC tier system + Sumsub | 2-3 нед |
| AML screening + webhook | 1-2 нед |
| Геоблокировка + IP | 1 нед |
| Responsible gambling | 1-2 нед |
| Admin dashboard | 1-2 нед |
Полная compliance система — 6-10 недель. Экономия на автоматизации достигает 60% по сравнению с ручной верификацией. Стоимость рассчитывается индивидуально в зависимости от набора провайдеров и сложности интеграции.
Что входит в работу
- Архитектурная документация
- Интеграция провайдеров (Sumsub, Chainalysis, Yoti, MaxMind)
- Написание смарт-контрактов (при необходимости)
- Нагрузочное тестирование
- Обучение compliance-команды
- Поддержка на запуске
Получите оценку вашего проекта — свяжитесь с нами. Мы поможем подобрать провайдеров и оптимизировать бюджет. Закажите разработку системы верификации под ключ — обсудите детали с нашими инженерами.







