Задача
В ранний период работы с криптоактивами пользователь был сам себе интегратором: отдельный кошелёк под каждую сеть, ручное обращение с адресами, memo и сетевыми комиссиями, сторонний обменник для конвертации и ещё один сервис, чтобы завести деньги с карты. Каждый стык — место, где средства теряются: перевод без memo, адрес не той сети, обмен по курсу, который успел уйти.
PayRue сводил это в один продукт с единым аккаунтом, портфелем и историей операций. Сложность здесь не в количестве экранов, а в том, что за ними стоит финансовая система в регулируемом контуре. Баланс не может быть «примерно верным». Депозит, замеченный индексатором дважды, реорганизация блокчейна, задержавшийся webhook провайдера и повторный callback банка не имеют права изменить остаток второй раз. Вывод должен пройти проверку санкционных списков раньше, чем транзакция уйдёт в сеть, а не после. И всё это — на трёх клиентских приложениях, которые обязаны показывать одно и то же состояние.
Решение
Внутренний ledger как источник истины. Пользовательские балансы живут во внутреннем реестре, а блокчейн и внешние финансовые системы регулярно с ним сверяются. Критичные операции идемпотентны и имеют сквозной correlation ID, поэтому повтор запроса — это тот же результат, а не вторая проводка.
Blockchain adapters. Каждая сеть подключена собственным адаптером, скрывающим различия Bitcoin, Ethereum, Stellar и токен-протоколов от остальных сервисов. Адаптер отвечает за выдачу адреса, синхронизацию блоков, обнаружение входящих транзакций, подсчёт подтверждений, подготовку и broadcast исходящей, оценку network fee, обработку reorg, retry и сверку, поддержку memo и tag. Подключение новой сети не трогает KYC, портфель, уведомления и поддержку.
Депозиты. Транзакция замечена индексатором, определены адрес и актив, пройдены risk- и compliance-проверки, набрано нужное число подтверждений, сумма зачислена в ledger, пользователь уведомлён, средства при необходимости консолидированы в treasury-кошелёк. Дедупликация по хешу транзакции и индексу выхода защищает реестр от повторного начисления. Для сетей с memo и destination tag интерфейс показывает оба реквизита и предупреждает о последствиях перевода без них.
Выводы. Перед созданием операции проверяются формат и сеть адреса, доступный баланс, минимальная сумма, лимиты аккаунта, уровень KYC, санкционный и AML-риск, velocity и аномальное поведение, второй фактор, комиссия сети и её текущее состояние. Дальше операция живёт понятным статусом: review, queued, signing, broadcast, confirming, completed, rejected или failed. Крупные и рискованные выводы уходят в ручную compliance-очередь, а не блокируются молча.
Ключи и treasury. Секретный контур отделён от пользовательского API: зашифрованное хранение, разделение hot и cold кошельков, ограниченные signing-полномочия, multi-approval для казначейских операций, allowlist направлений, emergency freeze и аудит каждого запроса на подпись. Поддержка не видит приватные ключи и не может единолично инициировать перевод из treasury.
Котировки и обмен. Котировки собираются из нескольких источников, торговые пары нормализуются, устаревшие и аномальные значения отбрасываются. Пользовательская цена считается с учётом комиссии и доступной ликвидности, а quote выдаётся с ограниченным сроком действия и идентификатором для последующей сверки — по истечении срока расчёт обновляется до подтверждения, а не исполняется по мёртвой цене. Execution service подбирает ликвидность, контролирует проскальзывание, резервирует баланс и проводит атомарные операции по реестру.
Фиат в обе стороны. On-ramp связывает банковский или карточный платёж с покупкой актива: проверка юрисдикции и лимитов, крипто-котировка, payment intent, 3DS или банковская авторизация, подтверждение поступления денег и только затем зачисление. Сценарии declined, pending, expired, reversed и chargeback обрабатываются явно, чтобы необеспеченный актив не попал на баланс. Off-ramp фиксирует котировку, резервирует актив, выполняет обмен и создаёт выплату после compliance-проверки, а settlement-контур сверяет блокчейн, ledger, исполнение на бирже, банковский payout, комиссии и возвраты.
Комиссии и PROPEL. Fee engine складывает сетевую комиссию, transfer fee, комиссию обмена, фиатный сбор, спред, скидку за PROPEL и минимальный порог — пользователь видит финальный расчёт до подтверждения. Конфигурация версионируется, чтобы операцию можно было воспроизвести после изменения тарифов, а правила бонусов и комиссий вынесены в настройки: маркетинг и финансы меняют программу без обновления мобильных приложений.
Compliance с человеком в контуре. Консоль объединяет пользователя, операции и доказательства риска: KYC, sanctions и PEP screening, риск устройства и сессии, скрининг блокчейн-адресов, мониторинг транзакций, velocity-правила, запросы источника средств и неизменяемый аудит. Risk engine не принимает необратимое решение по одному внешнему скорингу — оператор видит причины, исходные данные и историю пользователя.
Результат
Пользователь получил один аккаунт вместо связки из кошелька, обменника и платёжного сервиса: портфель с эквивалентом в фиате, доступным и заблокированным остатком и ожидающими подтверждениями; отправку и приём по QR с сохранением получателя в адресную книгу; конвертацию по зафиксированной котировке; покупку и продажу за фиат; единую историю, где blockchain-, обменные и фиатные операции лежат рядом с хешем, комиссией, курсом и таймлайном статусов.
Операционная команда получила рабочие инструменты, а не доступ к базе: compliance-консоль с очередями и решениями, treasury-панель с hot- и cold-балансами, очередью подписей, нехваткой валюты для сетевых комиссий, расхождениями блокчейна и реестра и состоянием провайдеров, административную панель с блокировкой сессии, заморозкой операции и полным аудитом изменений.
Публичные материалы кампании 2019 года сообщали о более чем 22 000 зарегистрированных пользователях и более чем 4 500 аккаунтах, прошедших KYC, при работающих приложениях Web, iOS и Android.