Skip to main content
В приложении Tonhub реализованы два варианта обмена криптовалют:
  • Changelly — обмен через централизованный партнерский сервис Changelly.
  • DeDust — swap через сайт DeDust.io во встроенном WebView с использованием TON Connect.

Общая схема доступа

  • Экран “Exchange” / “Swap”: с главного экрана или из раздела продуктов пользователь может перейти к выбору способа обмена. При выборе “Exchanges” открывается экран выбора партнера: DeDust.io и Changelly.
  • DeDust: по нажатию открывается фрагмент с WebView на https://tonhub.dedust.io/, где интеграция построена через TON Connect. Доступен только для обычных кошельков; если пользователь работает через Ledger, опция DeDust в списке обменов не показывается.
  • Changelly: по нажатию открывается нативный сценарий обмена, то есть выбор валюты получения, затем валюты отправки, затем ввод суммы, создание ордера и экран ордера с адресом для депозита. Дополнительно приложение предоставляет виджет Changelly, который открывается на отдельном экране во WebView на widget.changelly.com. Changelly доступен и для обычных кошельков, и для Ledger.

Интеграция Changelly

Changelly — это партнерский сервис обмена криптовалют. Пользователь задает валютную пару, то есть что он отправляет и что хочет получить, а также сумму; затем получает адрес для депозита, и после поступления средств выполняется обмен в выбранную валюту. В Tonhub интеграция реализована через виджет, то есть страницу Changelly во WebView.

Процесс обмена

  • Через “Exchanges” → выбор “Changelly” → открывается отдельный экран с WebView на widget.changelly.com в режиме Swap, где пользователь сначала выбирает актив, который хочет получить.
  • На экране Swap пользователь выбирает одну из валют: TON, USDT, то есть usdton, SOL, USDC в сети Solana. После выбора открывается список валют отправки, то есть ChangellyListFragment — перечень валют, которые Changelly поддерживает для обмена в выбранную валюту. Затем следует этап расчета, где вводится сумма, показывается оценка, комиссии и создается транзакция через backend Tonhub API. После создания пользователь переходит на экран ордера, то есть ChangellyOrderFragment: там отображаются адрес депозита, сумма, курс и статус. Пользователь отправляет средства на указанный адрес, а приложение может периодически опрашивать статус ордера через resolve и показывать обновления.
  • Виджет: отдельный экран ChangellyFragment открывает https://widget.changelly.com с параметрами, например fromDefault: ton, toDefault: usdton, merchant_id, v: 3. Перед первым открытием пользователь принимает условия и политику Changelly, и этот флаг сохраняется локально. Виджет доступен только в mainnet; в testnet показывается сообщение, что сервис работает только в mainnet.

API и backend

Все запросы к Changelly идут через backend Tonhub, то есть connect.tonhubapi.com, а не напрямую к Changelly API:
  • GET /changelly/currencies?currencyTo= — список валют, которые можно обменять на выбранную валюту, например USD, SOL, USDC. В ответе возвращается массив валют с полями ticker, name, image, blockchain, network и другими.
  • POST /changelly/estimate — оценка обмена. Тело запроса: { toCurrency, fromCurrency, amount }. В ответе приходят сумма к получению, комиссии, курс и лимиты, то есть min и max. Приложение проверяет лимиты и показывает ошибку при их превышении, например ChangellyLimitError.
  • POST /changelly/transaction/create — создание обменного ордера. В теле передаются fromCurrency, toCurrency, network, amount, idempotencyKey, wallet, то есть адрес кошелька пользователя. В ответе возвращаются данные ордера: payinAddress, payoutAddress, amountExpectedFrom, amountExpectedTo, networkFee, status и другие поля. После создания ордера в mainnet может дополнительно отправляться аналитическое событие, например в Maestra.
  • POST /changelly/transaction/details — получение деталей ордера по идентификатору.
  • POST /changelly/transaction/resolve — обновление и разрешение статуса ордера, например после того как пользователь отправил депозит.
  • POST /changelly/transactions — список обменных транзакций пользователя, где в тело запроса передаются адрес и другие параметры.
В ордере пользователь видит payinAddress, то есть адрес, на который нужно отправить исходную валюту, срок жизни ордера expiresAt и статусы: new, waiting, confirming, exchanging, sending, finished, failed, refunded, hold, expired, overdue, resolved. После отправки средств приложение периодически обновляет статус и показывает результат при успешном завершении.

Интеграция DeDust

DeDust — это децентрализованная биржа, то есть DEX, и интерфейс для свопов в сети TON, включая обмен TON и токенов. В Tonhub интеграция реализована через открытие партнерской страницы DeDust во WebView с подстановкой параметров кошелька и использованием TON Connect для подписи транзакций. Вся логика swap, включая выбор пары, расчеты и отправку транзакций, выполняется на стороне сайта DeDust, а приложение лишь предоставляет кошелек и bridge.

Доступ к DeDust

  • Через “Exchanges” → выбор “DeDust.io” → открывается DedustFragment. DeDust отображается в списке обменов только если кошелек не Ledger; при работе через Ledger опция скрыта.
  • Открывается страница https://tonhub.dedust.io/ с подставленными query-параметрами:
    • address — текущий адрес TON-кошелька, bounceable или non-bounceable в зависимости от пользовательской настройки;
    • utm_source, utm_content, ref — tonhub, extension, tonhub;
    • lang — текущий язык приложения;
    • currency — выбранная пользователем основная валюта для показа эквивалентов;
    • themeStyle — light или dark в соответствии с темой приложения;
    • pushNotifications — true или false в зависимости от разрешения на push-уведомления.
Во WebView внедряется bridge, совместимый с TON Connect, через tonhubBridgeSource + injectionEngine: страница DeDust может вызывать connect, sendTransaction, signData и другие методы, а запросы обрабатываются приложением, где пользователь подтверждает операции в Tonhub. Благодаря этому swap выполняется на стороне DeDust, но подпись транзакций остается внутри Tonhub.

Юридические документы

При первом открытии DeDust показывается экран подтверждения условий, то есть ConfirmLegal: с заголовком, описанием и ссылками на условия использования и политику конфиденциальности DeDust. После принятия флаг сохраняется локально, то есть по ключу skipLegalDeDust, и при следующих запусках WebView открывается сразу.

Полезные ссылки

Changelly DeDust