
23–24 апреля в Москве проходит Blockchain Forum — одно из ключевых событий в мире блокчейна и криптотехнологий. На форуме изучаем тренды, делимся опытом и слушаем коллег, набираемся насмотренности.
Мы в CleverPumpkin разрабатываем и развиваем мобильные приложения, в том числе для криптовалютных сервисов, и хорошо понимаем с какими техническими вызовами сталкиваются команды.
Современные криптотрейдеры всё чаще выбирают смартфон в качестве основного инструмента — по данным отрасли, более 60% сделок совершаются именно с мобильных устройств. Это требует от разработчиков создания не просто красивых приложений, а полноценных, безопасных и быстрых платформ для торговли, где ошибки могут стоить дорого: от некорректного отображения баланса до утерянных средств.
Создание мобильного криптотрейдинга — это не перенос веб‑интерфейса в приложение. Это отдельная инженерная задача со множеством нюансов. Пользователь ожидает, что сможет торговать быстро, удобно и безопасно, не вникая в технические детали.
Среди трендов, которые формируют рынок мобильного криптотрейдинга:
Активный переход пользователей с веба в мобайл — интерфейсы становятся более приспособленными к экрану телефона, а требования к производительности выше.
Запрос на нативность — приложения должны быть быстрыми, безопасными и «родными» для операционной системы.
В этой статье мы делимся совместным опытом с командой EVEDEX, где мы интегрировали SDK на TypeScript (изначально предназначенный для веба) в нативные приложения, чтобы сохранить единую бизнес‑логику между платформами. Это решение дало массу преимуществ — но и принесло немало сложностей.
Почему мы выбрали SDK и с какими вызовами столкнулись
На веб‑версии EVEDEX уже использовался собственный Exchange SDK — библиотека на TypeScript, которая соединяет API биржи с клиентской частью. Постепенно в ней появилась полноценная бизнес‑логика: от агрегации рыночных данных до подписания ордеров и отправки их на валидацию.
Ключевая задача — обеспечить идентичное поведение на всех платформах. Мы хотели избежать дублирования логики, сократить количество ошибок и ускорить разработку. Это означало: интеграция существующего веб‑SDK в нативные приложения.
Однако SDK был написан на TypeScript и не предусматривал использование за пределами браузера. Это стало главным техническим вызовом.
Мы вместе подробно обсудили возможные варианты реализации. С учётом всего контекста решили попробовать внедрить полноценный SDK на TypeScript в нативное приложение. Для нас это было в новинку — но мы были готовы решить эту нестандартную задачу.
Александр Кияйкин, CTO CleverPumpkin
Первым шагом стало подключение полноценного JavaScript-движка внутрь приложения. На iOS был доступен встроенный JavaScriptCore, но для Android пришлось искать альтернативу. Мы остановились на LiquidCore — независимом JS-движке с открытым исходным кодом.
Чтобы обеспечить удобную работу с SDK из нативного кода, была написана кроссплатформенная обёртка, которая реализовывала взаимодействие между SDK и бизнес-логикой приложения.
Проблемы, с которыми мы столкнулись:
Не все JS-движки поддерживают последний синтаксис ECMAScript — нам пришлось понизить уровень трансляции TypeScript в поддерживаемую версию JS.
JS-движки не имеют прямого доступа к системным возможностям: HTTP-запросы, WebSocket, работа с сетью — всё это требует реализации в нативном коде.
В результате SDK был модифицирован. Теперь он использует внешние интерфейсы для сетевой логики — HTTP и WebSocket-взаимодействие реализуется на стороне Swift/Kotlin, а логика обработки остаётся в JS. Как итог, бизнес-логика осталась в SDK, а низкоуровневая работа с сетью — за нативным кодом. Это позволило сохранить целостность архитектуры и ускорить разработку без ущерба для производительности.
Работа с кошельками. Реализация депозита и вывода средств
Ни одна криптобиржа не обходится без функциональности депозита и вывода средств. Нашей целью было сделать этот процесс понятным и безопасным. Для удобства пользователей мы добавили возможность гибкого внесения средств с разных сетей, используя сервис LI.FI, что позволило:
Переводить активы из одной сети в другую.
Делать это в несколько кликов, без необходимости вручную искать бриджи или понимать внутреннюю логику взаимодействия между сетями.
Гибко подбирать подходящий вариант по цене/скорости.
Мы сознательно остановили свой выбор на использовании WebView. Несмотря на то, что приложение написано на нативных технологиях, а для работы с JS мы используем отдельный движок, WebView помогло быстро интегрировать интерфейс LI.FI без необходимости повторной реализации его UI в нативе. Это дало возможность сохранить единый пользовательский опыт на вебе и в мобильном приложении, а также упростить обновление функциональности депозитов.
При этом нужно было учесть особенности взаимодействия с криптокошельками в мобильной среде. Для подключения и взаимодействия с ними мы использовали EIP-1193 (Ethereum Provider JavaScript API) — стандарт, определяющий, как приложения могут интегрироваться с Ethereum-кошельками. Мобильное приложение поддерживает разные варианты подключения:
С помощью MetaMask.
Импорт внешнего кошелька по сид-фразе или приватному ключу.
Создание нового кошелька прямо внутри приложения.
Независимо от выбранного способа, приложение умеет выступать в роли провайдера используемого кошелька для страницы депозита. Это позволило использовать уже существующий интерфейс из веб-версии без необходимости создавать для приложения отдельную систему.
NB: на текущем этапе EVEDEX работает с Ethereum‑совместимыми сетями, поэтому альтернативные стандарты не рассматривались.
Интеграция TypeScript SDK в нативное мобильное приложение оказалась задачей нестандартной и местами сложной, но она позволила нам обеспечить идентичное поведение на всех платформах, исключить дублирование логики, сократить количество ошибок и значительно ускорить процесс разработки:
SDK для веба можно адаптировать под мобильную среду, но это требует пересмотра архитектуры и грамотной декомпозиции логики.
Изоляция бизнес-логики от системных вызовов — ключ к поддерживаемой архитектуре. В нашем случае нативный код взял на себя сетевые операции и работу с WebSocket, а SDK остался отвечать только за логику.
Использование стандартов, таких как EIP-1193, позволило сохранить совместимость с кошельками и упростить реализацию.
Комбинация нативного кода, JS-движка и WebView дала нужный баланс между скоростью разработки, гибкостью и UX.
Было непросто, но теперь мы точно знаем, как встроить TypeScript SDK в нативное криптоприложение. Это не только ускорило работу, но и дало нам архитектурную основу на будущее.
Влад Комиссаров, CTO EVEDEX
Создание мобильного приложения EVEDEX стало не просто реализацией очередного продукта, а реальным технологическим экспериментом, который теперь может стать отправной точкой для других команд, ищущих нестандартные решения в мире крипты.
Это блог CleverPumpkin. Мы разрабатываем и развиваем мобильные приложения и цифровые продукты. На Хабре рассказываем про наши проекты, сложности разработки, лайфхаки и инструменты. Среди наших кейсов разные проекты сферы финтех, в том числе для удобного и безопасного управления финансами или торговли на бирже.
Если у вас есть идея или вопросы к нам — напишите в телеграм