Допустим, вы хотите, чтобы ваш кошелёк не просто хранил активы, а умел обменивать их напрямую — без отправки на централизованную биржу. Вы не первый, кому это пришло в голову. Причины разные: кто-то не хочет доверять средства третьей стороне, кому-то важна автономность, а кто-то просто хочет понять, как это работает изнутри. В любом случае, задача реальная, но требует понимания нескольких слоёв — от выбора протокола до безопасного управления приватным ключом.
Разберём по порядку: что такое децентрализованный биржевой модуль, из чего он состоит, как его собрать и какие подводные камни вас ждут.
- Что вообще значит «биржевой модуль в кошельке»
- Из чего состоит такой модуль
- Выбор блокчейна и протокола
- Пошаговая сборка модуля
- Шаг 1. Подготовка окружения
- Шаг 2. Подключение к DEX-протоколу
- Шаг 3. Маршрутизация и поиск лучшего курса
- Шаг 4. Подписание и отправка транзакции
- Шаг 5. Обработка статуса и подтверждения
- Лимитные ордера: стоит ли усложнять
- Частые ошибки, которые лучше предвидеть
- Что выбрать в зависимости от вашей ситуации
- Практические рекомендации
- Что в итоге
Что вообще значит «биржевой модуль в кошельке»
Когда люди говорят о биржевом модуле внутри кошелька, обычно имеют в виду одну из двух вещей. Первая — это встроенный DEX-агрегатор, который ищет лучший курс обмена по нескольким децентрализованным биржам и проводит сделку напрямую из интерфейса вашего кошелька. Вторая — это полноценный смарт-контракт или набор контрактов, которые самостоятельно исполняют ордера, управляют ликвидностью и проводят свопы без посредников.
Если вы разработчик и хотите встроить такую функциональность в свой некастодиальный кошелёк, речь пойдёт именно о втором варианте. Это не «кнопка обмена», а полноценный модуль, который взаимодействует с блокчейном, управляет ордерной книгой или обращается к пулам ликвидности и при этом остаётся под контролем пользователя.
Из чего состоит такой модуль
Прежде чем писать код, полезно разобраться в архитектуре. Децентрализованный биржевой модуль — это не одна программа, а связка нескольких компонентов, каждый из которых решает свою задачу.
- Приватный ключ и подпись транзакций. Это фундамент. Все обменные операции должны подписываться ключом, который хранится у пользователя. Никаких посредников.
- Смарт-контракт обмена. Именно он проводит своп: блокирует активы одной стороны, передаёт активы другой и фиксирует курс. Если используете существующие протоколы вроде Uniswap, Curve или 1inch, вам не нужно писать свой контракт с нуля — вы взаимодействуете с их контрактами через ABI.
- Модуль маршрутизации. Он определяет, через какие пулы или биржи провести обмен, чтобы получить лучший курс. Это может быть простой запрос к агрегатору или самостоятельный расчёт на основе состояния пулов.
- Модуль управления ордерами. Если вы хотите поддерживать лимитные ордера, а не только мгновенные свопы, понадобится система хранения и исполнения ордеров. Она может быть ончейн-полностью или гибридной (ордера хранятся офчейн, а исполняются ончейн).
- Пользовательский интерфейс. То, что видит пользователь: выбор активов, отображение курса, комиссии, подтверждение сделки.
Выбор блокчейна и протокола
Здесь нет универсального ответа — выбор зависит от того, для кого вы делаете кошелёк и какие активы планируете поддерживать.
| Параметр | EVM-сети (Ethereum, Polygon, BSC, Arbitrum) | Solana | Cosmos-экосистема |
|---|---|---|---|
| Инфраструктура для DEX | Огромное количество протоколов, зрелые SDK, документация | Быстрые и дешёвые транзакции, но меньше готовых решений | Меньше DEX-протоколов, но растущая экосистема |
| Язык смарт-контрактов | Solidity, Vyper | Rust | Go, Rust (CosmWasm) |
| Сложность интеграции | Средняя — много готовых библиотек и примеров | Выше — другая модель аккаунтов, другой подход к контрактам | Выше — специфическая архитектура, меньше готовых решений |
| Комиссии для пользователя | Зависят от сети — от центов до десятков долларов | Очень низкие | Низкие |
| Аудит и безопасность | Много аудиторов, много данных по уязвимостям | Меньше аудиторов, но сообщество активно растёт | Меньше специализированных аудиторов |
Если вы делаете первый проект такого рода, я бы советовал начать с EVM-совместимой сети. Инфраструктура там наиболее зрелая, и вы сможете быстрее собрать рабочий прототип.
Пошаговая сборка модуля
Шаг 1. Подготовка окружения
Вам понадобится среда для работы с блокчейном. Минимальный набор:
- Установите Node.js версии 18+ и пакетный менеджер (npm или yarn).
- Настройте доступ к ноде через провайдера — это может быть собственная нода или сервис вроде Infura, Alchemy, QuickNode.
- Установите библиотеку для взаимодействия с Ethereum — ethers.js (v6) или viem. Обе хорошо документированы, viem легче и современнее, ethers.js — более привычна и имеет больше примеров.
- Подготовьте кошелёк для тестирования с теровыми токенами в тестовой сети (Sepolia, Mumbai).
Шаг 2. Подключение к DEX-протоколу
Самый быстрый путь — не писать свой смарт-контракт обмена, а использовать уже существующие. Возьмём Uniswap V3 как пример — это один из самых распространённых протоколов с открытым исходным кодом.
Вам нужно получить ABI (Application Binary Interface) контракта маршрутизатора Uniswap. Он опубликован в репозитории Uniswap на GitHub. ABI — это описание функций контракта в формате JSON. С его помощью ваш код понимает, какие функции можно вызывать и с какими параметрами.
Базовый вызов свопа выглядит примерно так: вы вызываете функцию exactInputSingle на контракте маршрутизатора, передавая адрес входного и выходного токена, сумму, минимально приемлемую сумму на выходе и срок действия транзакции. Минимальная сумма на выходе — это защита от проскальзывания. Если курс изменится и вы получите меньше, транзакция откатится.
Важно: перед каждым свопом пользователь должен дать разрешение (approve) контракту маршрутизатора на использование его токенов. Это отдельная транзакция, и её нужно учитывать в пользовательском потоке.
Шаг 3. Маршрутизация и поиск лучшего курса
Если вы ограничиваетесь одной биржей, маршрутизация тривиальна — обращаетесь к одному контракту. Но если хотите действительно хорошие курсы для пользователя, нужно сравнивать предложения от нескольких источников.
Здесь есть два подхода:
- Офчейн-агрегация. Вы запрашиваеты котировки у нескольких агрегаторов (1inch API, 0x API, Paraswap API), сравниваете и выбираете лучший маршрут. Плюс — быстро и просто. Минус — вы доверяете корректности ответа API.
- Ончейн-агрегация. Вы деплоите собственный контракт, который на лету запрашивает котировки у нескольких пулов и выбирает оптимальный. Плюс — полная децентрализация. Минус — дороже по газу и сложнее в реализации.
Для первого варианта я рекомендую начать с офчейн-агрегации через 1inch API или 0x API. Это даёт хорошие курсы без необходимости поддерживать сложную ончейн-логику.
Шаг 4. Подписание и отправка транзакции
Когда маршрут определён, нужно подписать транзакцию пользовательским ключом и отправить её в сеть. Здесь ключевой момент — безопасность ключа.
В идеале ключ вообще не должен покидать устройство пользователя. Если вы делаете мобильный или браузерный кошелёк, используйте нативные хранилища: Keychain на iOS, KeyStore на Android, аппаратные модули для десктопных приложений.
При подписании обязательно показывайте пользователю все детали сделки: что он отдаёт, что получает, комиссию сети, ожидаемое проскальзывание. Не скрывайте эти данные — это вопрос доверия.
Шаг 5. Обработка статуса и подтверждения
После отправки транзакции нужно отслеживать её статус. Транзакция может быть в мемпуле, в блоке, отклонена или завершена ошибкой. Пользователь должен видеть каждый из этих этапов.
Используйте WebSocket-подписки на события контракта или периодические запросы к ноде для проверки статуса. Не надейтесь только на ответ от отправки — он подтверждает, что транзакция принята нодой, но не что она успешно выполнена.
Лимитные ордера: стоит ли усложнять
Мгновенные свопы — это база. Но если вы хотите сделать полноценный биржевой модуль, рано или поздно пользователи попросят лимитные ордера. Здесь всё заметно сложнее.
Ончейн-лимитные ордера означают, что ордер хранится в смарт-контракте и исполняется, когда курс достигает нужного уровня. Это требует механизма «газа исполнителя» — кто-то должен заплатить за исполнение. Обычно это делает сатель ордера заранее или исполнитель получает комиссию из сделки.
Офчейн-лимитные ордера проще: вы храните подписанные ордера на своём сервере, а когда курс подходит, кто-то (вы, бот, пользователь) отправляет транзакцию в сеть. Это не полностью децентрализовано, но работает эффективно и не требует от пользователя заранее платить газ.
Если вы только начинаете, я бы советовал начать с мгновенных свопов и добавлять лимитные ордера уже после того, как базовый функционал стабильно работает.
Частые ошибки, которые лучше предвидеть
- Неправильный расчёт проскальзывания. Если поставить слишком высокое допустимое проскальзывание, пользователь может получить значительно меньше, чем ожидал. Если слишком низкое — транзакция будет постоянно откатываться при волатильном рынке. Разумный подход — показывать расчётное проскальзывание и позволять пользователю корректировать его в разумных пределах.
- Забывают про approve. Пользователь не может свопнуть токен, не дав разрешение контракту. Если вы не обрабатываете этот шаг автоматически, пользователь столкнётся с непонятной ошибкой. Лучше всегда проверять текущий allowance и запрашивать approve при необходимости.
- Отсутствие проверки на фронтенд-атаку. Если вы берёте котировку из одного источника, а состояние пула меняется между моментом котировки и отправкой транзакции, пользователь получает другой курс. Используйте минимальную сумму на выходе с учётом актуального состояния пула.
- Хранение приватного ключа в открытом виде. Это банальность, но регулярно встречается в прототипах, которые почему-то попадают в продакшн. Ключ должен храниться только в защищённом хранилище устройства.
- Нет обработки откатов. Транзакция может откатиться по разным причинам: недостаточный баланс, изменение курса, ошибка контракта. Если вы не обрабатываете эти случаи и не показываете пользователю причину, он просто не поймёт, что произошло.
Что выбрать в зависимости от вашей ситуации
Если вы делаете кошелёк для себя или небольшого круга пользователей — начните с интеграции с одним агрегатором (1inch или 0x) и мгновенными свопами. Этого достаточно для основного сценария использования. Не усложняйте раньше времени.
Если вы разрабатываете продукт для широкой аудитории — добавьте маршрутизацию через несколько агрегаторов, настройте разумные значения проскальзывания по умолчанию и обязательно показывайте все детали сделки перед подтверждением. Подумайте о поддержке нескольких сетей — пользователи ожидают этого.
Если для вас принципиальна полная децентрализация — вам понадобится собственный контракт агрегации и ончейн-маршрутизация. Это значительно увеличивает сложность разработки и стоимость аудита, но убирает зависимость от сторонних API.
Практические рекомендации
- Начните с тестовой сети. Никогда не разрабатывайте и не тестируйте биржевой модуль сразу в основной сети. Ошибки стоят реальных денег.
- Используйте существующие аудитрованные контракты. Не пишите свой своп-контракт с нуля, если не уверены в своих силах. Ошибка в финансовом контракте — это потенциальная потеря средств пользователей.
- Показывайте комиссию сети отдельно от комиссии протокола. Пользователи должны понимать, за что платят.
- Делайте таймаут на транзакцию. Если пользователь подтвердил сделку, а она долго не включается в блок, он должен иметь возможность отменить или заменить её.
- Тестируйте на волатильных активах. Странное поведение часто проявляется только при резких движениях рынка.
Что в итоге
Собрать децентрализованный биржевой модуль в кошельке — задача не простая, но вполне выполнимая, если разбить её на этапы. Начните с мгновенных свопов через проверенный агрегатор, обеспечьте безопасное хранение ключей, корректную обработку транзакций и понятный пользователю интерфейс. Лимитные ордера, ончейн-агрегация и мультичейн — это следующие уровни, к которым можно переходить, когда базовый функционал стабилен.
Главное — не торопиться и помнить, что вы работаете с деньгами пользователей. Каждая транзакция необратима, и цена ошибки здесь выше, чем в большинстве других задач.
Информация в этой статье носит ознакомительный характер. Работа с децентрализованными финансами сопряжена с рисками, включая полную потерю средств из-за ошибок в смарт-контрактах, волатильности рынка и действий третьих лиц. Перед принятием решений о разработке или использовании подобных инструментов рекомендуется проконсультироваться с профильными специалистами в области блокчейн-разработки и аудита безопасности.



