К основному содержанию
T TON Adoption
Кошельки GUIDE · 2026

TON Connect не работает: 10 ошибок и решений

Bridge timeout, deep-link не открывается, unknown wallet, разрыв сессии — разбираем 11 типичных ошибок TON Connect: симптом, причина, что делать.

Автор
TON Adoption Team · исследовательская группа проекта
Опубликовано
10 мин. чтения

TON Connect задумывался как «одна кнопка — и всё работает», но на практике пользователи регулярно упираются в одну и ту же десятку проблем: bridge не отвечает, deep-link открывает не тот кошелёк, сессия отваливается посреди свопа, а picker показывает чужой логотип вместо привычного Tonkeeper. Большая часть этих ошибок не баги протокола, а столкновение между типичным мобильным окружением и архитектурой TON Connect — там, где сходятся три независимых компонента (dApp, bridge, кошелёк), всегда есть точки рассинхронизации.

Этот текст собран как справочник: 11 повторяющихся ошибок, на каждую — короткий симптом (то, что видит пользователь), причина (что на самом деле произошло) и 1–3 шага решения. Полезно и юзеру, и разработчику dApp: чтобы понимать, когда чинить надо у себя, а когда направлять пользователя в настройки кошелька.

Как устроен TON Connect: три компонента, которые могут ломаться

Прежде чем разбирать ошибки, важно зафиксировать модель. Любой запрос в TON Connect проходит через три независимые сущности:

  • dApp — сайт или мини-аппа, которая запрашивает подключение и отправляет запросы на подпись.
  • Bridge — HTTP-сервер-релей, через который dApp и кошелёк обмениваются зашифрованными сообщениями. По умолчанию Tonkeeper использует bridge.tonapi.io, MyTonWallet — свой, есть и другие. Bridge ничего не подписывает, он просто транспорт.
  • Кошелёк — приложение, которое держит ключ, показывает запрос пользователю и подписывает транзакции.

Каждая из трёх сущностей может временно отказать, неправильно интерпретировать запрос или иметь устаревший протокол. Дальше разбираем конкретные сценарии.

Ошибка 1: Bridge timeout — кошелёк не получает запрос

Симптом. В picker dApp вы выбрали Tonkeeper, появилось окно «Ожидание подтверждения», крутится спиннер, через 60 секунд — сообщение «Bridge timeout» или «Wallet did not respond».

Причина. Bridge — это отдельный сервис, и он может быть временно недоступен или перегружен. Возможны и более тонкие сценарии: ваш ISP блокирует соединение с конкретным bridge-доменом, корпоративный firewall режет long-polling, на телефоне фоновый режим Android прибил соединение Tonkeeper до того, как пришёл запрос.

Что делать.

  1. Закройте picker, обновите страницу dApp, попробуйте снова — таймаут часто разовый.
  2. Откройте кошелёк до клика по Connect, чтобы он точно был в foreground.
  3. Если повторяется — в Tonkeeper зайдите в Settings → Connected apps → Bridge URL, переключите на резервный (например, bridge.tontech.io). Аналогично в MyTonWallet и Tonhub есть выбор bridge.

Симптом. Установлены Tonkeeper и MyTonWallet, в picker выбираете Tonkeeper — открывается MyTonWallet с экраном «Cannot read this connect request». Или наоборот.

Причина. Оба кошелька регистрируют обработчик схемы ton://. ОС выбирает один из них по последнему установленному правилу или по дефолту, который вы могли когда-то задать. Picker dApp не знает, какое именно приложение откроется — он просто кидает deep-link в систему.

Что делать.

  1. На Android: Settings → Apps → Default apps → Opening links → найдите ton:// и выберите нужный кошелёк.
  2. На iOS прямой настройки нет — приоритет получает последний установленный. Если хотите Tonkeeper по умолчанию, удалите конкурирующий кошелёк, переустановите Tonkeeper, потом вернитесь к нужному порядку.
  3. Альтернатива: в picker большинства dApp есть пункт «Connect by QR» — он не использует deep-link, а показывает QR-код, который вы сканируете в нужном кошельке вручную. Это надёжный обход.

Ошибка 3: Unknown wallet — кошелька нет в списке picker

Симптом. Вы зашли в dApp, нажали Connect Wallet, но в picker нет вашего кошелька — только Tonkeeper, MyTonWallet, Tonhub, OKX и ещё несколько. Ваш SomeNewWallet отсутствует.

Причина. Picker подтягивает список из публичного манифеста wallets-list.json, который ведут TON Foundation. Свежие или нишевые кошельки могут ещё не быть туда добавлены. Также если вы пользуетесь экспериментальной сборкой кошелька — она может не быть в листинге.

Что делать.

  1. В большинстве dApp есть пункт «Other wallet» — вставьте туда universal connect URL, который кошелёк сгенерирует у себя в разделе TON Connect.
  2. Используйте QR — каждый кошелёк, поддерживающий TON Connect, умеет читать QR из picker, даже не будучи в листинге.
  3. Авторам кошелька — отправить PR в репозиторий ton-blockchain/wallets-list с метаданными своего приложения, и через несколько недель он появится у всех.

Ошибка 4: Session expired — нужно подключаться заново

Симптом. Вчера всё работало, сегодня заходите на тот же dApp, а он показывает кнопку «Connect Wallet», будто вы пришли впервые. В кошельке в Active Sessions старая сессия исчезла.

Причина. Стандарт допускает сессии любой длительности, но многие dApp по умолчанию выставляют TTL 30–90 дней, а некоторые — несколько часов. После TTL bridge стирает данные, и сессию нельзя восстановить. Также сессия рвётся, если вы переустановили кошелёк, импортировали seed на новом устройстве или почистили storage браузера для конкретного dApp.

Что делать.

  1. Просто подключиться заново — это нормальный сценарий, не баг.
  2. Если переподключаетесь несколько раз в день — проверьте, не очищаются ли cookies у вас в браузере по выходу (Brave, Firefox с агрессивным privacy-режимом). dApp хранит часть состояния сессии в localStorage, и его потеря разрывает соединение.
  3. Разработчикам dApp — увеличить TTL у себя в @tonconnect/sdk через tonConnect.connector.bridgeUrl или конфигурацию сессии.

Ошибка 5: Manifest URL not accessible

Симптом. Вы открыли мини-аппу или сайт, нажали Connect, в picker выбрали кошелёк — но в самом кошельке вместо нормального запроса показывается ошибка «Cannot fetch manifest» или «Invalid manifest».

Причина. При подключении кошелёк скачивает по URL манифест dApp (JSON с именем, иконкой и допусками). Если этот URL недоступен (CORS-блокировка, неверный TLS-сертификат, dev-сервер на localhost без публичного домена, файл 404), кошелёк отказывается продолжать.

Что делать.

  1. Если вы пользователь — попробуйте через 1–2 минуты, иногда CDN dApp временно лежит.
  2. Если вы разработчик dApp — проверьте, что tonconnect-manifest.json доступен по HTTPS, отдаётся с правильным Content-Type: application/json, не блокируется CORS и содержит обязательные поля url, name, iconUrl. Используйте dev-туннель (например, cloudflared), если разрабатываете локально и хотите тестировать на телефоне.

Ошибка 6: Wrong network — кошелёк подключён, но dApp не видит баланс

Симптом. Подключение прошло, в picker появился ваш адрес, но dApp показывает баланс 0 TON или сообщение «No assets on this network». При этом в кошельке вы видите свои токены.

Причина. Чаще всего — кошелёк в режиме testnet, а dApp ожидает mainnet (или наоборот). TON Connect передаёт chain в connect-response, но в Tonkeeper, MyTonWallet и Tonhub есть отдельный переключатель сетей. Реже причина — это V5R1 vs W5 версия кошелька, и dApp не парсит новый формат адреса.

Что делать.

  1. Откройте кошелёк, проверьте, что сверху стоит Mainnet (для большинства публичных dApp).
  2. Если используете несколько wallets-аккаунтов внутри одного приложения — убедитесь, что подключаете тот, на котором лежит баланс. В Tonkeeper это указано в шапке экрана подключения.
  3. Разработчикам dApp — добавить проверку chain в свой код и явно предупреждать пользователя, если он подключился из testnet.

Ошибка 7: TON Connect SDK старой версии — кошелёк падает с Unknown method

Симптом. Кошелёк после подтверждения подключения выдаёт ошибку «Unknown method» или «Method not supported», dApp получает unhandled exception в SDK.

Причина. TON Connect — живой протокол, в нём появляются новые методы (tonProof, signData, расширенные параметры sendTransaction). Если dApp обновился до новой версии @tonconnect/sdk, а пользовательский кошелёк давно не апдейтился — он не поддерживает запрашиваемый метод.

Что делать.

  1. Обновите кошелёк до последней версии (Tonkeeper 4.7+, MyTonWallet 2024+).
  2. Разработчикам dApp — обернуть вызов нового метода в проверку connector.wallet.device.features и показывать fallback, если фича отсутствует.

Ошибка 8: Подпись прошла, но транзакция не в блокчейне

Симптом. В кошельке вы подтвердили транзакцию, появилось сообщение об успехе, но в эксплорере её нет, а dApp продолжает показывать «Waiting for confirmation».

Причина. TON Connect отдаёт dApp boc подписанной транзакции, но сам отправляет её в сеть кошелёк, а не bridge. Если у кошелька в этот момент проблемы с lite-server (свой RPC), транзакция может зависнуть в локальной очереди или вообще не уйти. Также бывает, что транзакция ушла, но dApp ищет её по неверному хэшу (Tonkeeper и MyTonWallet возвращают boc, а не сразу хэш; хэш надо вычислять отдельно).

Что делать.

  1. В Tonkeeper зайдите в Activity — там видно все исходящие транзакции с фактическим статусом. Если её там нет, нажмите Refresh.
  2. Откройте Tonviewer или Tonscan, найдите свой адрес — посмотрите, ушла ли исходящая транзакция в последние 5 минут.
  3. Разработчикам dApp — не полагаться только на ответ TON Connect, а сразу подписаться на свой адрес через TonAPI WebSocket или поллить TonCenter для подтверждения on-chain.

Ошибка 9: User rejected the request — но пользователь ничего не отклонял

Симптом. В dApp выскакивает ошибка «User rejected the request» (-32000 или специфичный TonConnectError), хотя пользователь не нажимал «Отклонить» — он либо не успел подтвердить, либо переключился на другое приложение.

Причина. TON Connect SDK по умолчанию считает отклонением любое из трёх: явный клик по «Reject», истечение таймаута ожидания (обычно 5 минут на подпись), потеря соединения с bridge посреди запроса. С точки зрения dApp всё это — USER_REJECTED_ERROR, что вводит в заблуждение.

Что делать.

  1. Пользователю — переоткрыть кошелёк, найти в нём pending-запрос (в Tonkeeper это раздел Requests или сразу в шапке), подтвердить заново; если запрос пропал — нажать в dApp ту же кнопку, новый запрос придёт автоматически.
  2. Разработчикам dApp — различать причины ошибки по коду и тексту: USER_REJECTED_ERROR с пустым полем cause обычно таймаут, а не реальный reject. Показывайте разные сообщения для двух кейсов.

Ошибка 10: Mini App в Telegram открывает кошелёк, но возвращается с пустой сессией

Симптом. Вы в Telegram-мини-аппе нажали Connect, открылся Tonkeeper или Wallet, подтвердили подключение. Мини-аппа открылась снова — но кнопка Connect Wallet по-прежнему висит, как будто ничего не произошло.

Причина. Telegram WebApp при возврате из внешнего приложения иногда полностью перезагружает контекст мини-аппы. Если dApp хранит state TON Connect только в памяти (а не в localStorage или Telegram CloudStorage), на перезагрузке всё теряется. Также: некоторые версии Telegram на Android не восстанавливают focus на правильный таб, и WebApp ловит событие возврата в свёрнутом виде.

Что делать.

  1. Закройте мини-аппу, откройте заново — состояние сессии в кошельке всё ещё активно, dApp его поднимет с правильно настроенным SDK.
  2. Разработчикам мини-аппы — подписаться на tonConnect.onStatusChange и сохранять wallet.account.address в Telegram CloudStorage или собственный backend. На повторном входе восстанавливать UI из сохранённого состояния, не дожидаясь свежего подключения.

Ошибка 11: Picker открывается, но вместо Tonkeeper показывается другой логотип

Симптом. В picker dApp на месте Tonkeeper стоит другой логотип или вообще пустая иконка. Имя приложения может быть искажённое, в URL подключения — незнакомый домен.

Причина. Это может быть один из двух сценариев. Безобидный — dApp загружает wallets-list.json со старой CDN, где у Tonkeeper ещё стоит прошлый логотип; решается обновлением SDK. Опасный — вы попали на фишинговую копию dApp, которая подсунула свой список кошельков с тем же именем, но другим connect-URL, и через несколько секунд после подключения вы получите запрос на подпись вредной транзакции.

Что делать.

  1. Не подтверждайте подключение, пока не убедитесь в URL dApp в адресной строке. Если домен незнакомый или содержит лишние символы (tonkeeper-app.com вместо tonkeeper.com) — закройте вкладку.
  2. Если URL верный, а логотип всё равно странный — попробуйте обновить SDK dApp или открыть его в incognito-окне, чтобы исключить старый кеш.
  3. Раздельно держите cold-wallet с основными средствами и hot-wallet для экспериментальных подключений. Никогда не подключайте cold-wallet к dApp, в котором сомневаетесь. Подробнее о фишинге через TON Connect — в отдельном разборе векторов атак.

Что делать, если ничего из списка не сработало

Иногда проблема не покрывается типовой ошибкой — кошелёк виснет на splash-screen, dApp падает с пустым stack trace, picker не открывается вовсе. Универсальный чек-лист последней надежды:

  1. Перезапустите кошелёк — force quit и заново. Это решает 30% проблем с зависшими сессиями.
  2. Очистите кеш dApp в браузере — конкретно для домена приложения. localStorage, cookies, IndexedDB. После этого подключение будет с нуля.
  3. Попробуйте другой кошелёк на том же dApp. Если работает — проблема в первом кошельке (вероятно, устаревшая версия или повреждённое состояние). Если нет — проблема у dApp.
  4. Попробуйте другой dApp с тем же кошельком. Если работает — проблема у dApp, написать им в support. Если нет — проблема у кошелька.
  5. Проверьте версии: TON Connect 2.0 был релизнут в 2023, дальше шли минорные обновления. Любой кошелёк старше середины 2024 года рискует не поддерживать актуальный набор методов. То же касается @tonconnect/sdk в dApp.

Резюме

Большинство «TON Connect не работает» — это либо рассинхронизация версий между dApp, SDK и кошельком, либо конфликты обработчиков deep-link, либо временные проблемы bridge. Десять перечисленных сценариев покрывают около 90% всех тикетов, которые видят support-команды dApp в TON-экосистеме в 2026 году.

Дисциплина для пользователя: держите кошелёк в актуальной версии, не доверяйте picker без проверки URL, при странных симптомах сначала проверяйте список Active Sessions в самом кошельке. Дисциплина для разработчика: парсите ошибки SDK по типам, показывайте человекочитаемые сообщения, не полагайтесь на состояние, которое может пропасть, и логируйте версии всех трёх компонентов в каждом запросе.

И помните: TON Connect — это транспорт и handshake, не магия. Если он молчит, виноваты конкретные звенья, и каждое можно проверить отдельно.

Частые вопросы

Bridge — это отдельный сервер-релей между dApp и кошельком, и он не зависит от вашего соединения с сайтом. Чаще всего таймаут означает временную недоступность дефолтного bridge либо то, что кошелёк не успел получить запрос в окне 60 секунд. Решение: закрыть picker, попробовать снова, при повторе — переключить bridge URL в настройках dApp или в самом кошельке.
Нет. Сессия привязывается к ключу, сгенерированному кошельком при подключении, и активна только на устройстве, где этот ключ хранится. Если переустановили кошелёк или перешли на новое устройство — нужно подключаться к dApp заново, старая сессия больше не валидна.
В picker dApp подтягивает список кошельков из публичного манифеста wallets-list.json. Если ваш кошелёк свежий или ставился из неофициального источника, его там может не быть. Решение: либо ввести universal connect URL вручную, либо подключаться через QR — формат QR универсальный и не зависит от listing.
Зависит от момента. Если кошелёк успел показать вам экран подтверждения и вы его нажали, транзакция уйдёт в сеть независимо от состояния сессии — bridge нужен только для доставки запроса, а саму транзакцию шлёт уже кошелёк. Если же сессия упала до подтверждения, dApp не получит ответа, и подписи не будет вовсе.
Когда установлены и Tonkeeper, и MyTonWallet, и Wallet в Telegram, deep-link `ton://` может открыть не тот кошелёк. На iOS работает приоритет последнего установленного, на Android — настройка default app для ton-схемы. Чистое решение: открывать picker и явно выбирать кошелёк по имени, а не нажимать `ton://`-ссылку вслепую.

Похожие материалы