Криптобиржа с хранением средств, построенная вокруг изоляции
Когда платформа хранит деньги пользователей, безопасность закладывается в неё с самого начала. Эта криптобиржа, созданная для клиента под NDA, следовала одному принципу: часть системы, которая работает с кошельками, отделена от части, которая общается с интернетом.
Мы вели проект в роли тимлида full-stack-команды из трёх человек в течение семи месяцев и сдали MVP с кастодиальными сценариями.
Ключевые возможности
- Публичный сервис биржи: аккаунты пользователей, ордера и торговый интерфейс.
- Изолированный сервис кошельков и нод: операции с кошельками и оркестрация блокчейн-нод работают в отдельном контейнеризированном сервисе, изолированном от внешнего трафика.
- Идемпотентные операции с кошельками: повторный запрос не выполняется второй раз, поэтому тайм-ауты и повторы не дублируют операцию.
- Эфемерные ключи: короткоживущие ключи для чувствительных операций ограничивают время, в течение которого утёкшие учётные данные остаются опасными.
- Инструменты проверки выводов: сотрудники бэк-офиса проверяют выводы средств, и в рискованных сценариях последнее слово остаётся за людьми.
- Релизы через контроль в CI: тесты PHPUnit и статический анализ должны пройти до слияния кода.
Архитектура и технологический стек
Два сервиса вместо одного
Бэкенд построен на Symfony с MariaDB и разделён на два сервиса. Публичный сервис биржи отвечает за аккаунты, ордера и всё, с чем взаимодействуют пользователи. Сервис оркестрации кошельков и нод работает отдельно в Docker-контейнерах, изолированно от внешнего трафика.
Разделение ограничивает, насколько далеко может распространиться инцидент. Проблему в публичном сервисе можно расследовать и исправить, не открывая доступ к инфраструктуре кошельков. А сервис кошельков можно закрыть гораздо строже, чем публичное веб-приложение.
Фронтенд на React и Redux Toolkit
Интерфейс биржи построен на React.js и Redux Toolkit, благодаря чему состояние аккаунтов, балансов и ордеров остаётся предсказуемым в насыщенном данными торговом интерфейсе.
Операции с кошельками, которые безопасно повторять
В любой системе, которая перемещает деньги, повторы неизбежны: сеть отваливается по тайм-ауту, воркеры перезапускаются, пользователи кликают дважды. Операции с кошельками сделаны идемпотентными, поэтому повторный запрос даёт тот же результат, а не вторую транзакцию. Вместе с эфемерными ключами для чувствительных операций это снижает шанс, что рядовой сбой превратится в финансовый.
Инженерная дисциплина и безопасные релизы
Каждое изменение проходило CI, прежде чем его можно было слить. Наборы тестов PHPUnit и статический анализ были обязательным условием слияния, а инструменты контроля качества кода применялись во всей команде. Для продукта, который хранит средства пользователей, упавший пайплайн обходится гораздо дешевле, чем неудачный релиз.
Инструменты бэк-офиса добавляют проверку человеком. Выводы средств проходят через инструменты проверки, поэтому сотрудники могут изучить рискованную операцию до её завершения, а не после.
Наша роль
Как тимлид, мы отвечали за разделение сервисов, контроль в CI и операционные механизмы вокруг кошельков. Мы провели команду из трёх разработчиков от архитектуры до работающего MVP с кастодиальными сценариями.
Смежные работы
Фронтенд криптотрейдинга представлен в кейсах «Фронтенд криптобиржи с WalletConnect» и «Фронтенд DAO для торговли ресурсами». Наш «Агрегатор криптовалютного рынка в реальном времени» отвечает за рыночные данные. Подобные проекты входят в нашу услугу по разработке веб-приложений.



