Заказчику нужен был собственный процессинг криптовалютных платежей: принимать депозиты в нескольких сетях (BTC, USDT в сетях TRON и Ethereum), зачислять их на баланс клиента и безопасно выводить средства. Система работает с реальными деньгами, поэтому главными требованиями были надёжность, прозрачность каждой операции и защита от ошибок и злоупотреблений.
Задачи:
— принимать платежи по уникальным адресам и надёжно определять подтверждение транзакции в блокчейне;
— фиксировать курс на момент выставления счёта и защищаться от устаревших котировок;
— вручную проверять спорные случаи (недоплата, переплата, платёж не в той сети, поздний платёж) через единую очередь;
— давать операторам админ-панель с ролями, историей операций и выгрузками;
— исключить ситуации, когда сбой внешнего сервиса приводит к потере или двойному зачислению денег;
— обеспечить резервное копирование, восстановление на момент времени и мониторинг узлов.
Я спроектировал и реализовал управляющий сервис (backend на TypeScript, PostgreSQL, Redis, очереди фоновых задач) и админ-панель.
Основные решения:
— Строгая атомарность денежных переходов: статусы меняются через сравнение-и-обмен и блокировки строк, повторная доставка уведомления не приводит к двойному зачислению.
— Подпись входящих уведомлений и защита от повторов (одноразовые номера), двухфазная фиксация, чтобы сбой обработки не терял событие.
— Принцип «отказ в безопасную сторону»: если контроль недоступен, деньги останавливаются, а не проходят. Для этого есть аварийные выключатели по сетям и для выплат.
— Независимая сверка с блокчейном через несколько источников данных с кворумом: подтверждение и откат платежа принимаются только при согласии узлов.
— Выводы и активация адресов в белом списке проходят по схеме «четыре глаза», вторая подпись нужна для холодного кошелька (мультиподпись 2 из 4).
— Единая очередь ручной проверки с обязательным комментарием, ролями и вторым фактором для критичных действий.
— Схема базы описана декларативно, миграции накатываются только через инструмент, а в CI проверяется отсутствие расхождений с реальной БД.
— Интеграционные тесты на реальной базе в контейнерах, разработка по TDD, проверка ссылок документации в CI.
— Мониторинг: контроль работы фоновых задач (сторож), алерты с дедупликацией, мониторинг нод, резервные копии вне основной площадки с восстановлением на момент времени.
Получилась платформа, которая принимает и обрабатывает платежи в нескольких сетях и не допускает двойных зачислений и потери средств при сбоях внешних сервисов. Все критичные операции прослеживаются в истории, а спорные платежи разбирают операторы по понятной очереди.
Практически это даёт:
— автоматическое зачисление подтверждённых платежей и выставление счетов по актуальному курсу;
— понятный экран сверки, обзор состояния системы, фильтры и выгрузки для операторов;
— контролируемые выводы с двойным подтверждением и возможностью мгновенно остановить операции при подозрении на проблему;
— восстановимость данных (резервные копии и восстановление на момент времени с замеренным временем восстановления);
— подробную документацию: регламенты, инструкции по инцидентам и церемонии работы с холодными ключами.
Система работает в продакшене с реальными деньгами.