Криптоплатежи и стейблкоины: особенности on-chain/off-chain
Полный текст статьи
1) Зачем криптоплатежи платформе
Доступ к глобальным рынкам: меньше зависимостей от классических PSP, быстрые трансграничные переводы.
Меньше трения: круглосуточные расчёты, предсказуемые комиссии в ряде сетей.
Стейблкоины: снижение волатильности против нативных монет (ETH/BTC).
Риски: санкции/AML, утеря ключей, фрод в ончейн-мире, технические форки/заторы сетей.
2) Модели приёма: on-chain vs off-chain
On-chain (нативный приём в сети)
Что это: платформа или её провайдер генерирует адрес/мемо, ждёт ончейн-подтверждения и кредитует кошелёк игрока.
Плюсы: прозрачность (блокчейн-след), независимость от единого кастодиана, контроль правил.
Минусы: непредсказуемые задержки, комиссии (газ), сложный комплаенс, ключевая безопасность.
Off-chain (через кастоди/процессор)
Что это: провайдер (VAS P/биржа/процессор) принимает крипто на своих кошельках и выдаёт офчейн-кредит в ваш внутренний Ledger через API.
Плюсы: скорость (почти мгновенно), фиксированные сборы, сокращение ончейн-рисков.
Минусы: зависимость от провайдера, риски кастоди, KYC/Travel Rule на стороне провайдера, возможные лимиты/«чёрные окна».
Гибрид: мелкие депозиты — офчейн, крупные/VIP — ончейн напрямую в «тёплый» кошелёк.
3) Стейблкоины: какие и в чём разница
FIAT-backed (USDT, USDC, EURC): обеспечены резервами эмитента, могут иметь функции «blacklist/freeze».
Крипто-залоговые (DAI): обеспечены залогом в ончейн-протоколах, риск деградации коллатераля.
Алгоритмические: высокая технологическая/рыночная рискованность — избегать для основного кассового потока.
Сети/стандарты: ERC-20 (Ethereum/Arbitrum/OP), TRC-20 (TRON), BEP-20 (BSC), SPL (Solana). Внимательно ведите map токена ↔ сеть ↔ decimals: ошибка = потеря средств.
4) Сети и их особенности (коротко)
Ethereum L1: высокая безопасность, выше газ; EIP-1559 (base fee + priority).
L2 (Arbitrum/OP/BASE): дешевле/быстрее, мосты и выход на L1.
TRON: низкие комиссии для USDT (TRC-20), энергомодель (bandwidth/energy).
BSC: низкий газ, выше риски валидаторов/ecosystem-quality.
Solana: высокая пропускная, «банкролл» на приём; особенности мемпула и финальности.
UTXO-сети (BTC/LN): другая модель адресов и UTXO, отдельные провайдеры.
5) Кастоди, ключи и безопасность
Модели: self-custody (ваши ключи), кастоди у провайдера, MPC/мультисиг (распределённые ключи).
Градации хранения: горячие (оперативные), тёплые (лимитные), холодные (хранилище/резервы).
Практики: HSM/Vault, белые списки адресов (withdraw), лимиты пер-транзакция/день/ASN, «четыре глаза» на крупные выводы, тайм-локи, адресные книги.
DR: план на форки/заторы, резервные маршруты, бизнес-правила «pause new on-chain».
6) Денежные инварианты и Ledger
Истина по балансу игрока — внутренний кошелёк (Ledger). Ончейн-приход → кредит игроку после критериев финальности.
Все write-команды (`wallet.credit/debit/rollback`) — идемпотентны, ключ `X-Idempotency-Key`.
Жёсткое разделение OLTP/OLAP и outbox/CDC для событий `deposit/withdraw/settle`.
7) Флоу депозита (on-chain)
1. Адресование: выдаём уникальный адрес/мемо (XRP/XLM/TRX tag, ETH nonce-метка в memo, или HD-деривация/xpub).
2. Мониторинг мемпула/блоков: видим входящий tx → статус `PENDING`.
3. Критерий финальности: N подтверждений (например, ETH=12, TRON=20, SOL=32; зависит от политики риска).
4. Кредит в Ledger: `wallet.credit` (идемпотентно) по хэшу транзакции, событие `deposit.succeeded`.
5. Хедж/конверсия (опция): авто-своп стейблкоина/фиата для снижения волатильности.
6. Reconciliation: ежедневная сверка «цепь ↔ Ledger ↔ отчёт кастоди/процессора».
Уточнения:- Для XRP/XLM/ATOM критичен Destination Tag/Memo — потеря = сложное ручное восстановление.
- Для UTXO держите пул UTXO; агрегируйте мелкие входы (UTXO consolidation) вне пиков газа.
8) Флоу вывода (on-chain)
1. Запрос withdraw → RG/AML/KYC проверки (санк-листы, адрес-риск, пределы velocity).
2. Проверка адреса: checksum/format, сеть/токен-совместимость, санкции/«чёрные списки» эмитента (USDT/USDC).
3. Оркестрация газа: расчёт fee (EIP-1559 maxFee/maxPriority), баланс газовой монеты.
4. Подпись/MPC → трансляция → статусная машина (`SUBMITTED → CONFIRMED/FAILED`).
5. Событие `withdraw.settled` после финальности; в случае фейла — компенсации/повтор с тем же idempotency.
Возвраты/Refunds: ончейн «чарджбэков» нет — это новая транзакция на адрес возврата, требуйте у игрока «return address/chain» и подтверждение владения (message-sign/микротест).
9) Off-chain флоу через процессор
Create intent → Receive credit webhook от провайдера (подписан HMAC/EdDSA) → `wallet.credit`.
Риски/плюсы: быстрый UX, провайдер берёт на себя сеть/Travel Rule, но вы зависите от его доступности/SLA.
Обязательно: дедуп по `event_id`/txid, DLQ, повторная сверка отчётов (reconciliation) T+1.
10) Комплаенс: KYC/KYT/Travel Rule
KYC/AML: до допуска к on-chain — верификация личности/источника средств.
KYT (Know Your Transaction): скрининг адресов/tx по риск-метрикам (санкции, миксеры, даркнет-маркет, высокорисковые сервисы).
Travel Rule (для VASP): обмен данными отправителя/получателя при переводах выше порога между VASP (TRISA/TRUST/аналог).
Blacklist/Freeze в стейблкоинах: эмитент может заморозить активы — учитывайте в рисковых политках.
Резидентность данных: журналы/адреса/PII — по регионам (EU/UK/BR…), запрет кросс-регионных чтений.
11) Волатильность и трежери
Авто-конверсия депозита в стейбл (или фиат) по правилу «сразу после финальности».
Натуральный хедж: хранить в той валюте, в которой платите выигрыши.
Политики лимитов: потолки на остатки нативных монет (газ-буферы отдельно), ребаланс по расписанию.
Учёт/налоги: реализованные/нереализованные PnL, курсовые разницы, кастомные отчёты для аудита.
12) Наблюдаемость, SLO и инциденты
SLO ориентиры (пример):- `deposit.finality` p95: ETH-L2/TRON/SOL ≤ 5–10 мин; ETH L1 ≤ 15–30 мин (зависит от сети/нагрузки).
- `withdraw.submit→confirm` p95: ≤ 10 мин (по сети).
- Webhook-доставка p99: ≤ 5 мин.
- «Потерянных/дублированных кредитов/дебетов» = 0.
Метрики: mempool lag, confirmations ETA, gas spike detector, адрес-риск-скор, webhook-retry storms, orphan/reorg rate.
Инциденты:- Газ-шипка — авто-повышение fee/отложить неприоритетные выводы.
- Реорг/форк — ожидание доп. подтверждений, пересчёт статусов.
- Стоп сети/моста — режим «pause new on-chain», офчейн-кредиты запрещены для соответствующей сети.
13) Reconciliation (сверка)
On-chain: блок-сканеры/ноды → витрина «входящие/исходящие» ↔ Ledger.
Off-chain: отчёты провайдера (SFTP/API) ↔ Ledger; классификация mismatch (`missing_chain`, `missing_platform`, `amount_mismatch`, `timing`).
Алерты: aging несверенных > N дней, рост `amount_mismatch`, расхождение decimals/chain-id.
14) Контракты API (эталонные фрагменты)
Выдать адрес депозита
POST /v1/crypto/deposit-address
{ "player_id":"p_123", "asset":"USDT", "network":"TRON" }
→ 200 { "address":"TXX...9k", "memo": null, "expires_at":"2025-10-30T00:00:00Z" }Ончейн-кредит после финальности
POST /v1/wallet/credit
Headers: X-Idempotency-Key: chain_tx_<txid>
{
"player_id":"p_123",  "amount":{"amount":100.00,"currency":"USDT-TRC20"},  "reference":{"txid":"...","network":"TRON","confirmations":25}
}
→ 200 {"status":"credited","entry_id":"w_789"}Webhook от процессора (off-chain)
POST /webhooks/crypto/deposit
X-Signature: eddsa=...
{
"event_id":"uuid",  "asset":"USDC",  "network":"ARB",  "amount_minor":100000000,  "player_ref":"p_123",  "txid":"0x..",  "confirmations":20,  "status":"finalized"
}
POST /v1/crypto/withdraw
Headers: X-Idempotency-Key: wd_001
{
"player_id":"p_123",  "asset":"USDT",  "network":"ETH",  "to_address":"0xAbc...",  "amount_minor":1000000,  "max_fee_wei":"..."
}
→ 202 {"status":"SUBMITTED","withdraw_id":"wd_001"}15) Чек-листы
Платформа/оператор
- Отдельные стеки per сеть/регион; токены/адреса валидируются.
- Идемпотентность всех write-операций; `trace_id` и `txid` в логах.
- KYT скрининг адресов/tx + Travel Rule для VASP-переводов.
- Политики финальности по сетям; SLO-дашборды и алерты.
- Белые списки и «четыре глаза» на крупные выводы; MPC/HSM.
- Авто-конверсия/хедж; лимиты остатков, ребаланс.
- Ежедневная сверка: цепь/процессор ↔ Ledger ↔ BI-витрины.
- DR-план: газ-спайки, форки, down-time сетей/мостов.
Провайдер/кастоди/процессор
- Подписанные вебхуки + дедуп по `event_id`.
- SLA финальности по сетям; отчёты T+1, целостность/хеш-подписи.
- Механизмы адресного скрининга/Travel Rule и журналы.
16) Красные флаги (анти-паттерны)
Кредит баланса по мемпулу (без подтверждений).
Приём USDT без фиксации какой сети и `decimals`.
Нет проверки memo/tag для XLM/XRP/BNB — «утерянные» депозиты.
Вывод с общего горячего кошелька без белых списков/лимитов.
Webhooks без подписи и окна валидности → реплеи.
Отсутствие KYT/санк-скрининга/Travel Rule.
Нет outbox/CDC для событий депозита/вывода.
Отсутствие политики на реорги/доп. подтверждения.
Смешение PII/ончейн-журналов всех регионов в одном бакете.
17) Итог
Криптоплатежи и стейблкоины в iGaming работают надёжно тогда, когда денежные инварианты остаются железными: финальность перед кредитом, идемпотентные команды, строгий KYT/Travel Rule, защищённые ключи и управляемый риск сетей. On-chain даёт прозрачность и самостоятельность, off-chain — скорость и проще UX; на практике выигрывает гибрид с правильной оркестрацией, SLO и ежедневной сверкой. На таком фундаменте платформа безопасно расширяет географию, снижает издержки и остаётся комплаентной.
