Техническая документация · 17 сентября 2026
Exton — некастодиальный кошелёк для сети TON
Документ описывает функциональность мобильных приложений для Android и iOS, смарт-контракты, серверную часть и модель безопасности. Составлен по исходному коду: каждое значение проверено по месту его объявления.
- Android1.0.24
- iOS1.0.0
- СетьTON
Exton — некастодиальный криптовалютный кошелёк для блокчейна TON
Некастодиальный означает, что распоряжение средствами остаётся у владельца: секреты кошелька хранятся под защитой устройства и на серверы проекта не передаются ни при каких операциях.
Приложение работает только с сетью TON, поддержки других блокчейнов нет. Нативная валюта сети в интерфейсе называется GRAM.
Отличие от типового TON-кошелька — собственные смарт-контракты вместо стандартных. Пользователь может выбрать, каким контрактом управляется его адрес, и перенести кошелёк из другого приложения, не теряя доступа к средствам.
Ключи и мнемоническая фраза
Кошелёк создаётся из мнемонической фразы — последовательности слов, по которой восстанавливается приватный ключ. Поддерживаются два стандарта.
BIP-39 — общепринятый стандарт
Приложение генерирует 32 байта случайности источником SecureRandom и превращает их в 24 слова. Последние восемь бит — контрольная сумма от SHA-256, поэтому опечатка в слове обнаруживается при вводе.
TON Native — стандарт экосистемы TON
Совместим с другими кошельками сети. Контрольной суммы в фразе нет: вместо неё проверяется свойство самого ключа — подходит примерно одна случайная фраза из 256, поэтому генерация перебирает варианты, пока условие не выполнится.
Дополнительное слово
К фразе BIP-39 можно добавить произвольное слово-пароль. Оно даёт другой кошелёк с другим адресом, а не защищает существующий. Само слово нигде не сохраняется в открытом виде: без него восстановить такой кошелёк невозможно.
Один ключ — три формата адреса блокчейна TON, по одному на каждый тип контракта
Это свойство сети TON, а не особенность Exton: адрес вычисляется из кода контракта вместе с ключом. Средства, лежащие на адресе одного типа, не видны на адресе другого.
Практическое следствие: пользователь, пришедший из другого приложения, выбирает в настройках тот тип контракта, которым его кошелёк был создан, и сразу видит свои средства.
Переводы, токены и NFT
Кошелёк отправляет нативную валюту сети, токены-джеттоны и NFT — поштучно и пакетом, с комментарием к переводу.
Что можно отправлять
- GRAM — нативная валюта сети
- Токен (жетон) — стандарт Jetton (TEP-74)
- NFT — поштучно и пакетом
- Комментарий к переводу — произвольный текст
Получатель
Адрес вводится вручную, сканируется с QR-кода или выбирается из адресной книги. Поддерживаются домены .ton, .t.me и .ext: приложение само находит адрес кошелька, которому домен принадлежит. Для неизвестного получателя предлагается сохранить его в адресную книгу, для известного — показывается сохранённое имя.
Обработка ошибок сети
Ошибки разбираются по типам и показываются человеческим текстом вместо внутреннего сообщения библиотеки. При перегрузке блокчейн-API запрос повторяется автоматически с нарастающей паузой.
Смарт-контракты
В сети TON развёрнуты два кошельковых контракта проекта. Их скомпилированный код — единственный источник истины для приложений: обе платформы используют один и тот же байт-код.
Мультиподпись
К одному счёту привязываются несколько ключей, а правило контракта задаёт, сколько подтверждений нужно для исполнения операции. В развёрнутой версии участников двое: первую подпись ставит приложение, вторую — аппаратный кошелёк через обмен QR-кодами, и транзакция исполняется только при обеих. Утрата ключа участника вместе с его резервной копией делает средства недоступными — это осознанное свойство схемы, а не дефект. Ключ приложения восстанавливается кодом Recovery Code, ключ аппаратного кошелька — его собственной резервной фразой.
Плагины
Механизм позволяет подключить к кошельку дополнительный контракт, который вправе действовать от его имени в оговорённых рамках. Всего двенадцать плагин-контрактов.
Красивые адреса и Recovery Code
Адрес контракта вычисляется из ключей владельца, поэтому «выбрать» адрес нельзя — его можно только подобрать перебором. Пользователь задаёт желаемое окончание адреса, сервер перебирает варианты сдвига ключа, пока не найдёт совпадение.
Что уходит на сервер
Только два публичных ключа. Приватный ключ, мнемоника и секрет приложения на сервер не передаются. Сервер возвращает найденный сдвиг и адрес; восстановить по ним приватный ключ невозможно.
Recovery Code
Результат подбора нельзя восстановить из одной мнемоники — нужен ещё найденный сдвиг. Поэтому пользователь получает отдельный код восстановления.
SeedForge — работа с мнемоническими фразами
Отдельный инструмент внутри приложения. Работает автономно: не обращается к сети и не связан с кошельками пользователя.
Досбор — основной сценарий инструмента. Он помогает, когда часть слов известна: пользователь фиксирует то, что помнит, а недостающие позиции перебираются до получения фразы с верной контрольной суммой. Случайность берётся из криптографического источника операционной системы.
TON Connect и встроенный браузер
TON Connect — стандартный протокол, по которому сайты запрашивают у кошелька подключение и подпись транзакций. Exton поддерживает его в двух режимах.
зашифровано отдельным ключом сессииСайт открыт в обычном браузере
или на компьютере
без посредникаСайт открыт во вкладке самого
кошелька
Что видит пользователь
Перед подключением показывается имя и адрес сайта. Перед подписью — получатель и сумма. Подключение и каждая транзакция подтверждаются отдельно; список активных подключений доступен в настройках, любое можно разорвать.
Подтверждение владения адресом
По запросу сайта кошелёк подписывает доказательство того, что владеет адресом. Подпись привязана к домену сайта и моменту времени, поэтому не переиспользуется на другом ресурсе.
Аппаратный кошелёк
Поддерживается Keystone 3 Pro. Устройство не подключается ни к сети, ни к телефону: обмен идёт анимированными QR-кодами — приложение показывает транзакцию, устройство сканирует её с экрана, подписывает и показывает подпись обратно.
Ключ аппаратного кошелька хранится в самом устройстве, и подпись формируется внутри него. В мультиподписи он даёт подпись второго участника; в обычном кошельке — единственную.
Хранение и защита
Секреты кошелька хранятся под защитой устройства. Ниже — где именно они лежат на каждой платформе, как устроен код доступа и что защищает от подбора.
Где лежат секреты
аппаратного модуляAES-256; отдельный ярус требует
биометрии на каждое чтение
Код доступа
Шестизначный, хранится не сам, а в виде необратимого преобразования PBKDF2 с 600 000 повторений и случайной солью. Сверка выполняется за постоянное время, чтобы по её длительности нельзя было судить о правильности.
Защита от подбора
Прочие меры
- Затирание ключей в памяти после использования — на уровне нативного кода
- Запрет снимков экрана на страницах с фразой, ключом и кодом восстановления
- Экран-заслонка при сворачивании приложения
- Автоблокировка по бездействию
- Запрет незашифрованных сетевых соединений
- Запрет резервного копирования данных приложения в облако
- Буфер обмена очищается сам: фраза через минуту, адрес и ключ через две
Инфраструктура и обновления
Серверная часть решает три задачи и никогда не имеет доступа к средствам пользователей: приватных ключей на ней нет.
Кэширование
Ответы блокчейн-API кэшируются с разным сроком: неизменяемые данные NFT — сутки, курсы — минуту, баланс — шесть секунд. Никогда не кэшируются счётчик транзакций и сама отправка: устаревший счётчик сделал бы подпись недействительной, а отправка не является повторяемой операцией.
Выпуск версий
Android обновляется внутри приложения. Каждый выпуск проходит единый порядок: метка версии, публикация, архив, обновление каталога, выкладка с резервной копией и обязательная сверка. Файл на сервере сверяется с локальным архивом побайтово, проверяется версия внутри установочного файла и подпись разработчика.
iOS в магазин приложений не публиковался.
Статус функций
Разделение введено, чтобы отличать работающее от заготовок в исходном коде.
