Архитектура hot/cold кошельков для крипто-казино
Почему любое серьёзное крипто-казино разделяет кошелёк на горячий и холодный — и как спроектировать это разделение, не превратив эксплуатацию в боль.

Если вы строите софт крипто-казино с одним кошельком — вы построили обязательство, которое ждёт плохого дня. Это короткий, прямой гайд по разделению кошелька на горячий и холодный слои так, чтобы операторам не было больно жить.
Зачем вообще разделять
У одного кошелька два сценария отказа:
- Компрометация сервера выносит всю операцию. Приватные ключи лежат на том же железе, что и application-сервер. Любая уязвимость уровня приложения (инъекция, RCE, утечка env-переменных) — это событие на всю казну.
- Одна ошибка оператора заканчивает вечер. Опечатка в выводе, админка без 2FA, угнанная сессионная кука — любое из этого двигает все ваши монеты разом.
Разделение существует, чтобы ограничить худший случай. Горячий кошелёк держит ровно столько, сколько нужно для нормальной работы; всё сверх этого живёт в холодном хранилище, до которого application-сервер не дотягивается.
Скучная форма разделения
Архитектура неэффектная, и в этом весь смысл:
- Горячий кошелёк — Подключён к приложению. Используется для входящих
депозитов и исходящих выводов. Держит настраиваемый потолок, например
MAX_HOT_BALANCE = max(2 × daily_withdrawal_p95, 0.5 BTC equivalent). - Sweep-задача — Запускается раз в N минут. Если горячий кошелёк превысил потолок — sweep излишка в холодное хранилище. Если упал ниже пола — алерт оператору на пополнение.
- Холодный кошелёк — Оффлайн. Ключи на железе или в защищённом зашифрованном бэкапе. Трогается только людьми и нечасто.
Всё. Остальное — это параметры.
Как выбрать потолок
Потолок — единственное число, которое реально имеет значение. Слишком высокий — и ваша экспозиция ровно такая, от которой вы и пытались уйти. Слишком низкий — операционное трение: sweep стреляет постоянно, выводы тормозят в ожидании пополнения.
Разумные стартовые ориентиры:
- Маленький оператор (< $10k дневного объёма): Hot ceiling $5k–10k.
- Средний оператор ($10k–100k): Hot ceiling $30k–80k.
- Крупные операторы: Считайте от своего распределения выводов.
Через две недели работы у вас будут данные для тюнинга. Первый месяц — это оценка; второй — уже решение.
Механика sweep, которую важно сделать правильно
Здесь операторов кусают три вещи. Каждую из них мы видели в проде:
- Слишком агрессивная частота sweep. Sweep каждые 30 секунд накручивает on-chain комиссии и создаёт шумный след в блокчейне. Раз в 5–15 минут — нормально.
- Sweep игнорирует gas/dust. Если sweep двигает "всё, что выше потолка", он рано или поздно начнёт sweep'ить dust-суммы, у которых комиссия больше, чем сама сумма. Поставьте минимальный размер sweep.
- Sweep блокирует выводы. Если задача вывода и задача sweep делят один лок на горячий кошелёк, sweep может голодом убить выводы. Используйте паттерн резервации: выводы резервируют свою сумму до того, как sweep считает потолок.
Флоу вывода внутри разделения
Выводы — это то, где прячется большая часть операционной боли. Мы используем трёхуровневую модель апрува:
- Авто-апрув ниже порога T1. Идёт напрямую через горячий кошелёк. Idempotency key обязателен для защиты от double-spend.
- Авто-апрув T1 < amount < T2 с доп. проверками. Аккаунт игрока должен быть старше X дней и иметь пройденный KYC.
- Ручная проверка выше T2. Висит в очереди. Админ смотрит и апрувит; сама исходящая транзакция всё равно идёт по тому же идемпотентному code path.
Конкретные пороги зависят от объёма, но именно три уровня — это паттерн. Два — недотягивает; четыре — переусложняет.
Хардненинг горячего кошелька
Даже с ограниченным потолком ваш горячий кошелёк — мишень. Defense in depth:
- Ключи никогда не лежат в plaintext env-переменных в проде. Мы шифруем их at rest ключом, производным от секрета, который знает только deploy pipeline.
- Подписывающий компонент крутится в отдельном процессе от веб-сервера. HTTP-трафик никогда не видит материал для подписи.
- Эндпоинты апрува вывода — admin-only и под rate-limit. 2FA обязательна на каждом админ-аккаунте.
- Audit log на каждую исходящую транзакцию. Append-only. Tamper-evident.
Ничего экзотического. Просто те вещи, которые уже спасли реальных операторов из наших знакомых.
Эксплуатация холодного кошелька
Холодное хранилище должно быть неудобным. Это неудобство — фича, а не баг. На холодном кошельке вам нужны ровно две операции:
- Приём sweep'ов. Без участия человека — горячий кошелёк подписывает исходящую, холодное хранилище принимает.
- Пополнение горячего. А вот это уже человеческая церемония. Двое операторов на месте, один подписывает, второй сверяет суммы и адреса out-of-band. На каждое пополнение заводится тикет и фиксируется причина.
Держите церемонии пополнения редкими — раз-два в неделю это здорово. Ежедневно — значит ваш потолок слишком низкий или операция слишком тонкая.
Что мы поставляем из коробки
Наш софт крипто-казино выкатывается с этой архитектурой по умолчанию. Hot ceilings, частота sweep, минимальный размер sweep, пороги авто-апрува и алерты на пополнение — всё это параметры в админке. Вы не изобретаете это заново, вы это тюните.
Если вы прикидываете прикрутить свои крипто-рельсы внутри уже существующего казино — именно эту часть копируйте в деталях. Остальной код может быть как угодно неряшливый, и вы выживете. Ошибитесь с разделением кошелька — и один плохой вечер заканчивает операцию.
Вопросы по конкретной архитектуре? В Telegram быстрее, чем по почте — в рабочие часы обычно отвечаем за минуты.
