Разработка крипто-обменника: где ломается обмен и ликвидность
Боль входа в крипто-обменник почти всегда одна и та же. Внутренние балансы кабинета расходятся с публичным реестром: пополнение прошло, а зачисление не отобразилось; вывод ушёл, а резерв списался дважды. На резком движении рынка заявки зависают в промежуточном состоянии — клиент повторяет сделку и получает её дважды.
Причина не в отдельном сбое, а в архитектуре. Приём средств, котирование и исполнение живут в разных контурах со своими источниками истины: пока нет единого журнала операций и сквозной сверки, любой разрыв между ними превращается в ручной разбор и одностороннюю сделку.
Цена измерима. Отраслевые обзоры, которые мы разбирали вместе с Chainalysis, сходятся: значимая доля инцидентов на обменных сервисах — не взломы, а рассинхрон балансов и зависшие заявки. Каждый час простоя обменного сервиса на живом рынке — потерянные обороты и клиенты, которые возвращаются уже к конкуренту.
Узкие места обменника вскрываются в момент нагрузки, когда исправлять их дороже всего. Поэтому разработку крипто-обменника мы начинаем не с интерфейса, а с учёта: регулярная сверка с реестром, карантин спорных операций вместо ручных правок, отдельный контур для односторонних сделок. Разбираем, как это закрывается.
Что меняется после внедрения: скорость, маржа, устойчивость
Управляемая архитектура меняет три измеримые величины: долю заявок, закрытых без оператора, время от открытия до расчёта и размер маржи, которая остаётся после работы внешних поставщиков ликвидности. Ниже — за счёт чего именно.
Время обработки заявки и очередь операций
Автоматизация обменных операций начинается с того, что заявка хранит состояние на каждом шаге: проверка адреса, резерв под пару, подтверждения в сети, зачисление. Шаги идемпотентны, поэтому обработчик после перезапуска продолжает с последнего состояния, а не с нуля, — очередь операций не растёт при всплеске нагрузки. Оператор вмешивается только там, где авто-проверки выставили флаг ручного разбора; доля таких заявок и есть метрика скорости обработки.
Устранённый класс отказов и расчёт маржи
Устойчивость к отказам здесь означает управляемое поведение при сбое внешнего поставщика: пока он отвечает дольше заданного порога, маршрутизация переводит поток на резервный источник, а спред пересчитывается от фактической цены исполнения. Уходит целый класс отказов — заявки, закрытые по устаревшему курсу.
Маржа обменника считается по каждой сделке: комиссия, стоимость привлечения ликвидности, проскальзывание. Расхождение видно в реальном времени, поэтому лимиты правятся по факту, а не по месячному отчёту. Разграничение доступов и проверки сводим к требованиям ISO/IEC 27001.
Гибридная модель обменника против прямых сделок: что выбрать
Режим работы обменника определяет, откуда берётся вторая сторона сделки: из собственного резерва площадки, от внешних поставщиков ликвидности или от других пользователей. От этого зависят спред, скорость исполнения и поведение сервиса при резком движении рынка. Ниже — реальные варианты, между которыми выбирают на этапе проектирования.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Собственный резерв | Узкий список пар, предсказуемый поток заявок | Капитал заморожен; при тренде одна сторона резерва вырабатывается |
| Гибридная модель обменника | Много пар, нужны крупные заявки без проскальзывания | Сложнее сверка позиций, зависимость от контрагентов |
| Прямые сделки между пользователями | Редкие пары, нестандартные активы | Долгое ожидание контрагента, нужен эскроу и арбитраж |
| Книжный обмен с ордербуком | Ликвидные пары с плотным потоком | Без маркет-мейкеров стакан остаётся пустым |
Гибрид: свой резерв плюс внешняя ликвидность
Ядро считает цену по собственному резерву, а недостающий объём добирает у внешних поставщиков через маршрутизацию заявок. Резерв закрывает мелкие сделки без задержки, внешний канал — крупные и редкие пары. Нужны лимиты на контрагента и регулярная сверка позиций: расхождение балансов иначе всплывёт на клиентских выплатах.
Прямые сделки между пользователями и книжный обмен
Площадка здесь не держит капитал: она сводит заявки, блокирует актив в эскроу до подтверждения оплаты и разрешает спор через арбитраж. Ограничения модели — время ожидания контрагента и риск недобросовестного поведения, поэтому нужны рейтинг, лимиты и понятные правила разблокировки. Ордербук даёт мгновенное исполнение на ликвидных парах, но требует постоянной поддержки стакана.
Порядок внедрения: от аудита до передачи в эксплуатацию
Разработка крипто-обменника идёт волнами, и порядок здесь важнее скорости: сначала фиксируем то, как средства двигаются сейчас, и только потом меняем. Иначе новая логика расчёта ложится поверх неучтённых ручных операций, и расхождения всплывают уже на живых клиентах.
- Аудит инфраструктуры обменника. Снимаем карту узлов, внешних источников курса и ликвидности, мест хранения ключей и списка тех, у кого есть доступ. Отдельно выписываем всё, что до сих пор делается руками.
- Схема движения средств. Описываем маршрут от поступления на адрес до зачисления в баланс пользователя: резервы, подтверждения сети, лимиты, комиссии, зависшие операции и порядок их разбора.
- Настройка окружений. Разводим контуры разработки, тестовый и рабочий, держим одинаковые конфигурации, секреты — вне репозитория, ключи у каждого контура свои. Проверки и эксперименты перестают трогать боевые средства.
- Правила расчёта. Задаём спред и маржу, порядок применения курса, округление, лимиты на операцию и на пару — с журналированием каждого решения, чтобы расчёт можно было объяснить и пересчитать.
- Приёмочные проверки на исторических данных. Прогоняем новые правила на записях прошлых сделок и сверяем результат до последнего знака. Расхождение — повод вернуться к схеме, а не списывать на погрешность.
- Передача в эксплуатацию. Передаём регламенты, дашборды, оповещения об отклонениях и порядок отката на предыдущее состояние, обучаем дежурную смену.
Кто и что делает на каждом шаге
Аудит и схему потоков ведут наши инженеры вместе с вашим финансистом и службой поддержки — они знают реальные исключения. Окружения, расчётный модуль и приёмочные прогоны закрываем мы, а решение о запуске принимаете вы после демонстрации сверки. Дальше остаёмся на связи по регламенту сопровождения.
Комплект передачи: конфигурации, схемы, политики доступа
Комплект передачи собирается параллельно с разработкой, а не в конце: каждый контур описывается в момент, когда в него вносится изменение. Поэтому документация на систему не расходится с фактической конфигурацией, а приёмка превращается в сверку, а не в восстановление истории по переписке.
Документация и схемы
- Схемы интеграций: потоки ордеров между ядром обменника, контуром ликвидности, кошельками, антифродом и источниками курса — с точками отказа и таймаутами.
- Конфигурации окружений: параметры тестового, предпродуктивного и продуктивного контуров — лимиты, спреды, список активов, настройки повторов запросов.
- Описание модели данных: сделки, проводки внутреннего учёта, балансы и история статусов; порядок сверки с блокчейном.
- Инструкции для операторов: обработка зависшей заявки, ручная выплата, перевод пары в режим только чтения.
Регламенты и матрица ответственности
- Матрица ролей и политики доступа: кто меняет лимиты, инициирует выводы и ротирует ключи — разделение обязанностей и второй фактор.
- Регламенты обслуживания: плановые работы, обновление узлов и курсовых источников, резервное копирование и проверка восстановления.
- Регламент реагирования: действия при скачке курса, всплеске выводов или отказе провайдера — пороги оповещений и ответственные.
- Порядок отката: версия конфигурации, автор изменения, способ вернуть предыдущее состояние без простоя.
Кейс: как сократили ручные операции и убрали класс отказов
Обменник работал на гибридной модели: часть объёма закрывал внутренний стакан, часть уходила на внешнюю ликвидность. Узким местом стала не пропускная способность, а ручные операции — оператор подтверждал каждый вывод, сверял остатки на горячем и холодном кошельках и разбирал расхождения по журналу.
Класс отказов оказался дорогим: при повторной отправке запроса на вывод из-за сетевого таймаута операция могла пройти дважды, и расхождение всплывало только на следующей сверке. Реакция на такой сбой занимала часы, а спорные сделки закрывались вручную — по выпискам и переписке.
Что изменили: идемпотентность по идентификатору операции, автоматическую сверку балансов с оповещением при расхождении, пороговые правила маржи и очередь модерации, куда попадают только аномалии выше лимита. Ручное подтверждение осталось там, где сумма или поведение аккаунта выходят за заданные границы.
Что было до и что стало после
| Показатель | До | После |
|---|---|---|
| Доля операций с ручным подтверждением | большинство выводов | единицы процентов, только аномалии |
| Реакция на расхождение балансов | часы, по факту обнаружения | минуты, по оповещению |
| Спорные сделки за квартал | десятки | единичные |
| Поиск причины сбоя | вручную по журналу | по идентификатору операции, минуты |
Класс отказов с двойным проведением вывода больше не воспроизводился: повторный запрос отсекается по идентификатору операции, а сверка находит расхождение раньше, чем его заметит клиент. По отраслевым данным Chainalysis, заметная часть инцидентов в обменниках связана не с пробитым периметром, а с операционными процессами и ручными подтверждениями — этот слой мы и убрали.
Что делать, если платформа уже развёрнута на готовом решении?
Миграция обменного сервиса почти никогда не делается одним переключением. Готовое решение против своего — это не выбор «или-или»: старая платформа продолжает обслуживать клиентов, пока рядом поднимается собственное ядро с тем же набором операций — приём заявки, расчёт курса, списание и зачисление, вывод. Оба контура живут одновременно, и это снимает главный риск — простой обмена.
Перенос данных операций начинается с истории: заявки, сделки, движения по балансам и комиссии переносятся пакетами с контрольными суммами и повторяемой записью, поэтому повторный прогон не создаёт дублей. На время перехода обе системы пишут в общий учёт или синхронизируются встречным обменом, а сверка по каждому клиенту идёт до полного совпадения остатков.
Постепенный переход трафика — по направлениям и валютным парам. Сначала на новое ядро уходит небольшая доля заявок с ограничением суммы, затем лимиты поднимаются, а старый контур остаётся резервным маршрутом. Курсовой и риск-контур при этом общий: расхождение котировок между платформами недопустимо, иначе появляется арбитраж внутри собственного сервиса.
Отдельно закрываем технические сомнения: заявки, зависшие в промежуточном статусе, двойное списание при сбое, возврат на готовое решение в одну сторону. Для этого ведём журнал операций, регулярно сверяем итоги и держим механизм быстрого отката, который возвращает весь трафик на прежнюю платформу без потери истории.
Технические сомнения: хранение средств, маржа, проверки
Самый частый технический вопрос заказчика — где физически лежат средства клиентов и у кого на руках ключи. Мы строим кастодиальную модель с разделением на горячий, тёплый и холодный контуры: в горячем только операционный запас под выводы, остальное — в холодном хранении. Приватные ключи не попадают на сервер приложения: подпись транзакции проходит через отдельный сервис с пороговой схемой, где компрометация одной площадки не открывает доступ к балансу.
Второй пласт — расчёт маржи и проверка операций. Начисления считает не биржа и не интерфейс, а собственный модуль с журналом двойной записи: каждая сделка, комиссия и ручная корректировка — отдельная проводка с неизменяемым идентификатором. Регулярная автоматическая сверка сопоставляет внутренние балансы с фактическими остатками на адресах, и расхождение выше порога останавливает выводы до разбора.
Кто владеет приватными ключами после сдачи проекта?
Ключами управляете вы. Мы описываем процедуру генерации, резервного копирования и ротации долей доступа, но не сохраняем за собой возможность вывода средств. Передача доступов идёт по протоколу с фиксацией ответственных.
Как проверяется корректность начислений?
Каждая операция проходит через журнал двойной записи, поэтому баланс всегда сходится по проводкам, а не по текущему значению в базе. Спорную сделку можно поднять целиком: заявка, курс на момент исполнения, комиссии, статусы.
Что происходит при спорной операции?
Выводы по счёту можно приостановить точечно, без остановки всей платформы. История сделок неизменяема, поэтому разбор опирается на фактические записи, а не на восстановленные логи.
Обсудим задачу: что нужно для оценки и плана работ
Чтобы вернуться с оценкой задачи и планом работ, а не общими формулировками, нам нужен минимум входных данных. Ниже — про вашу текущую схему, а не про наши шаблоны: чем точнее опишете обмен и нагрузку, тем меньше допущений останется в смете и календаре.
- Текущая схема обмена: откуда берутся котировки, куда уходят заявки, как сейчас сводятся остатки и в каком месте считается маржа.
- Роли и доступы: кто меняет курсы, кто подтверждает вывод средств, какие права нужны оператору, риск-менеджеру и поддержке.
- Требования к проверкам: обязательные шаги перед зачислением и выводом, пороги для ручного разбора, что делать при расхождении баланса.
- Ожидаемая нагрузка: сколько операций в сутки, пиковые часы, сколько направлений обмена и пар планируете держать на старте.
- Контуры и интеграции: платёжные каналы, решения для хранения активов, внутренние системы, с которыми обменник должен обмениваться данными.
- Сроки внедрения: дата, к которой обменник должен работать, этапы запуска, есть ли готовая инфраструктура и требования площадки.
- Кто со стороны заказчика принимает результат и по каким критериям договоримся считать работу принятой.
Получив это, мы называем состав команды под ваш объём: сколько инженеров нужно, кто отвечает за сведение заявок, кто за безопасность и проверки, кого подключаем на интеграции. Дальше раскладываем работы по этапам с датами и точками приёмки. Опишите задачу — вернёмся с оценкой и планом работ.
- Заказывают «обменник» как витрину с кнопкой «купить», не описав заранее, откуда берётся ликвидность и кто закрывает разницу при резком движении рынка — платформа запускается, а первый же всплеск волатильности вскрывает дыру в запасе.
- Держат средства клиентов, операционный резерв и прибыль на одном кошельке: при первой задержке вывода невозможно показать, что обязательства перед пользователями покрыты, а разбирательство с партнёрами идёт вслепую.
- Просят «гибрид», не определив, какие операции закрываются внутри книги заявок, а какие уходят на внешние площадки — в итоге маржа считается дважды или не считается вовсе, и настоящая доходность направления неизвестна.
- Экономят на проверках: вход без подтверждения личности, лимиты выставлены «на глазок», правила пополнения не описаны — канал быстро начинают использовать для обналичивания, и претензии от платёжных посредников приходят раньше первой прибыли.
- Оставляют ключи и права администратора у подрядчика «до лучших времён», без разделения ролей — один человек может и пополнить резерв, и утвердить вывод, поэтому любая ошибка или уход специалиста превращаются в угрозу для всего баланса.
- Считают, что работа заканчивается запуском: нет регламента на сбой, нет плана на остановку внешней площадки, нет дежурного — обычный технический инцидент растягивается на часы и стоит репутации.
- Наращивают функции вместо устойчивости: сначала новые способы оплаты и разделы кабинета, а журналирование операций, оповещения и порядок восстановления — «потом», хотя именно они определяют, переживёт ли обменник первый серьёзный сбой.
- Не фиксируют в договоре, что именно передаётся: без описания настроек, инструкций поддержки и порядка восстановления платформа остаётся завязанной на одного человека, и сменить исполнителя без остановки сервиса уже нельзя.







