Какие протоколы подключения используются
В кошельке Tonhub подключение к веб-приложениям и dApp для сети TON выполняется через протокол TON Connect. Для Solana отдельного протокола “Solana Connect” нет: подписание транзакций Solana в тех же приложениях работает через дополнительные методы, которые добавляются в ту же сессию TON Connect. Ниже описано, как это устроено.TON Connect
TON Connect — это протокол для подключения кошельков к приложениям, то есть dApp, в сети TON. Он позволяет:- подключаться к приложению: приложение запрашивает разрешение на подключение, пользователь подтверждает его в кошельке, после чего приложение получает адрес TON-кошелька и при необходимости proof владения;
- отправлять транзакции: приложение создает транзакцию, кошелек показывает ее пользователю и подписывает после подтверждения;
- подписывать данные через
signData: любые сообщения для авторизации или верификации без отправки средств; - отключаться: завершать сессию с приложением.
Интеграция с Holders
Holders — один из основных примеров использования TON Connect в Tonhub. Интеграция с Holders построена именно на этой технологии. Holders открывается как Connect App, то есть приложение, работающее через общий bridge в WebView. При первом входе пользователь проходит процедуру подключения, то есть enroll: с сервера Holders загружается конфигурационный файл TON Connect/jsons/tonconnect-manifest.json, пользователь подтверждает подключение в кошельке, после чего сохраняются сессия и, при необходимости, токен от Holders.Для TON Holders использует стандартный TON Connect: в ответ на запрос подключения кошелек передает TON-адрес и при необходимости proof, после чего Holders может запрашивать подписание TON-транзакций и данных через те же bridge-методы
sendTransaction и signData.
Как работает коннектор Solana
Для Solana в экосистеме TON отдельного протокола “Solana Connect” нет. В Tonhub это решено следующим образом:- при подключении к Holders ответ включает не только TON-данные, то есть адрес и proof, но и Solana proof, благодаря чему Holders получает доступ к вашему Solana-адресу, который генерируется из того же кошелька;
- для получения пользовательского токена сервер Holders принимает запрос, передающий авторизационные данные и для TON, и для Solana, то есть
TonSolanaAuthRequest; таким образом, “подключение” Solana к Holders — это не отдельный протокол, а расширение одной сессии TON Connect данными Solana при первом подключении; - когда Holders нужно подписать транзакцию в сети Solana, приложение вызывает уже не TON Connect, а специальные bridge-методы
sendSolanaTransactionилиsendSolanaVersionedTransaction. Tonhub показывает экран подтверждения Solana-перевода, пользователь подписывает транзакцию, а подпись возвращается в Holders.
Разрешения и управление сессиями
Несколько приложений одновременно
Пользователь может быть одновременно подключен к нескольким приложениям, то есть Connect App. Список подключенных приложений сохраняется отдельно для каждого адреса кошелька, и у каждого приложения есть собственная сессия, встроенная или remote. Ограничений по количеству активных подключений нет.Список активных подключений и отзыв доступа
Список подключенных Connect App, то есть приложений, к которым вы подключались через TON Connect, можно посмотреть в разделе приложений и браузера в Tonhub, то есть на экране с расширениями и подключенными приложениями. Там же отображаются и remote-сессии, если подключение происходило по QR-коду из внешнего браузера.Как завершить сессию
Для каждого приложения в списке доступно действие “Revoke Access”. После подтверждения приложение удаляется из списка подключенных, сессия завершается, и при следующем входе приложение должно будет снова запросить подключение. Для remote-сессий отзыв также отправляется на сервер Tonhub по маршруту/connect/revoke, чтобы на другой стороне сессия тоже считалась недействительной.
Удаление Tonhub и смена устройства
Информация о подключенных приложениях и сессиях хранится локально на устройстве, то есть в памяти приложения. При удалении Tonhub эти данные удаляются. Все сессии с вашим кошельком со стороны dApp перестают работать при следующем запросе, потому что кошелек больше не отвечает. Переустановка Tonhub и восстановление кошелька по seed-фразе не восстанавливают старые подключения: каждое dApp нужно подключать заново.Перенос кошелька на новое устройство через импорт seed-фразы также не переносит список подключенных приложений и сессий: они остаются привязаны к старому устройству. На новом устройстве список подключений будет пустым, и все dApp придется подключать снова.
Ограничения и поддерживаемые сценарии
Gasless, то есть оплата комиссии токеном: функция gasless-отправки в Tonhub в первую очередь работает для переводов внутри самого приложения. При запросе транзакции из внешнего dApp через TON Connect возможность оплачивать комиссии токенами, то есть gasless, может быть недоступна или ограничена, например в зависимости от типа актива и сценария использования. Полноценный gasless-сценарий через произвольный внешний dApp по TON Connect не работает; лучше всего эта функция подходит для переводов из самого приложения Tonhub.Версионирование и совместимость
Версия TON Connect в Tonhub
Tonhub поддерживает протокол TON Connect версии 2, то естьCURRENT_PROTOCOL_VERSION = 2. Более старые версии не поддерживаются, то есть MIN_PROTOCOL_VERSION = 2. При подключении кошелек сообщает приложению максимальную поддерживаемую версию протокола.
Что следует учитывать разработчикам dApp
- Методы: поддерживаются методы SendTransaction, то есть отправка одной или нескольких TON-транзакций; для wallet v5 — до 255 сообщений в одной транзакции,
extraCurrencySupported: true, а также SignData для типов text, binary и cell. Остальные методы должны соответствовать спецификации TON Connect v2. - Manifest: приложение должно предоставлять конфигурационный файл, то есть manifest, по URL, указанному в запросе на подключение, то есть
manifestUrl. Обязательные поля: name, url, iconUrl. Необязательные: termsOfUseUrl и privacyPolicyUrl. Если manifest отсутствует или некорректен, подключение будет отклонено. - Запрос на подключение: запрос должен содержать
manifestUrlи непустой списокitems, то есть запрашиваемых данных, напримерton_addr,ton_proof. Иначе запрос считается некорректным. - Дополнительные поля: приложение может запрашивать опциональные элементы, например proof; кошелек вернет только то, что поддерживает и что разрешил пользователь. Для интеграций вроде Holders поддерживается расширенный набор, включая
solana_proof, но это не часть стандартного TON Connect, а дополнение Tonhub и Holders.