Техническая документация · 17 сентября 2026

Exton — некастодиальный кошелёк для сети TON

Документ описывает функциональность мобильных приложений для Android и iOS, смарт-контракты, серверную часть и модель безопасности. Составлен по исходному коду: каждое значение проверено по месту его объявления.

  • Android1.0.24
  • iOS1.0.0
  • СетьTON
Что это за продукт01

Exton — некастодиальный криптовалютный кошелёк для блокчейна TON

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

Приложение работает только с сетью TON, поддержки других блокчейнов нет. Нативная валюта сети в интерфейсе называется GRAM.

Отличие от типового TON-кошелька — собственные смарт-контракты вместо стандартных. Пользователь может выбрать, каким контрактом управляется его адрес, и перенести кошелёк из другого приложения, не теряя доступа к средствам.

Ключи и мнемоника02

Ключи и мнемоническая фраза

Кошелёк создаётся из мнемонической фразы — последовательности слов, по которой восстанавливается приватный ключ. Поддерживаются два стандарта.

BIP-39 — общепринятый стандарт

Приложение генерирует 32 байта случайности источником SecureRandom и превращает их в 24 слова. Последние восемь бит — контрольная сумма от SHA-256, поэтому опечатка в слове обнаруживается при вводе.

Длина фразы24 словаДругих длин при создании кошелька нет — требуется ровно 32 байта энтропии
Вывод ключаPBKDF2-HMAC-SHA512, 2048 итерацийСоль — «mnemonic» плюс дополнительное слово пользователя, если задано
ДеривацияSLIP-0010, путь m/44'/607'/0'607 — номер сети TON в реестре SLIP-0044

TON Native — стандарт экосистемы TON

Совместим с другими кошельками сети. Контрольной суммы в фразе нет: вместо неё проверяется свойство самого ключа — подходит примерно одна случайная фраза из 256, поэтому генерация перебирает варианты, пока условие не выполнится.

Проверка фразыPBKDF2, соль «TON seed version», 390 итерацийФраза принимается, если первый байт результата равен нулю
Вывод ключаPBKDF2, соль «TON default seed», 100 000 итерацийБерутся первые 32 байта результата; путь деривации не применяется

Дополнительное слово

К фразе BIP-39 можно добавить произвольное слово-пароль. Оно даёт другой кошелёк с другим адресом, а не защищает существующий. Само слово нигде не сохраняется в открытом виде: без него восстановить такой кошелёк невозможно.

Три контракта кошелька03

Один ключ — три формата адреса блокчейна TON, по одному на каждый тип контракта

Это свойство сети TON, а не особенность Exton: адрес вычисляется из кода контракта вместе с ключом. Средства, лежащие на адресе одного типа, не видны на адресе другого.

Практическое следствие: пользователь, пришедший из другого приложения, выбирает в настройках тот тип контракта, которым его кошелёк был создан, и сразу видит свои средства.

КонтрактПроисхождениеДействий за разОсобенности
ExtonСобственный255Пакетная отправка, смена ключа, обновление контракта, плагины
V4R2Стандарт TON4Прежнее поколение, самый распространённый
V5 (W5)Стандарт TON255Актуальный, создаётся современными кошельками
Переводы, токены и NFT04

Переводы, токены и NFT

Кошелёк отправляет нативную валюту сети, токены-джеттоны и NFT — поштучно и пакетом, с комментарием к переводу.

Что можно отправлять

  • GRAM — нативная валюта сети
  • Токен (жетон) — стандарт Jetton (TEP-74)
  • NFT — поштучно и пакетом
  • Комментарий к переводу — произвольный текст

Получатель

Адрес вводится вручную, сканируется с QR-кода или выбирается из адресной книги. Поддерживаются домены .ton, .t.me и .ext: приложение само находит адрес кошелька, которому домен принадлежит. Для неизвестного получателя предлагается сохранить его в адресную книгу, для известного — показывается сохранённое имя.

Обработка ошибок сети

Ошибки разбираются по типам и показываются человеческим текстом вместо внутреннего сообщения библиотеки. При перегрузке блокчейн-API запрос повторяется автоматически с нарастающей паузой.

Смарт-контракты05

Смарт-контракты

В сети TON развёрнуты два кошельковых контракта проекта. Их скомпилированный код — единственный источник истины для приложений: обе платформы используют один и тот же байт-код.

Extonодноключевой, хранилище 321 битПакетная отправка, смена ключа, самообновление, подключение плагинов
Exton MultiSigмультиподпись, хранилище 577 битВ развёрнутой версии два участника — приложение на телефоне и аппаратный кошелёк, требуются подписи обоих

Мультиподпись

К одному счёту привязываются несколько ключей, а правило контракта задаёт, сколько подтверждений нужно для исполнения операции. В развёрнутой версии участников двое: первую подпись ставит приложение, вторую — аппаратный кошелёк через обмен QR-кодами, и транзакция исполняется только при обеих. Утрата ключа участника вместе с его резервной копией делает средства недоступными — это осознанное свойство схемы, а не дефект. Ключ приложения восстанавливается кодом Recovery Code, ключ аппаратного кошелька — его собственной резервной фразой.

Плагины

Механизм позволяет подключить к кошельку дополнительный контракт, который вправе действовать от его имени в оговорённых рамках. Всего двенадцать плагин-контрактов.

ПлагинЧто делаетСтатус
Белый списокРазрешает перевод на заранее одобренный адрес одной подписьюРаботает
Суточный лимитРазрешает переводы в пределах суммы за суткиРаботает
Остальные десятьОтложенный перевод, наследование, зарплата, подписки и другиеВ разработке
Vanity и Recovery Code06

Красивые адреса и Recovery Code

Адрес контракта вычисляется из ключей владельца, поэтому «выбрать» адрес нельзя — его можно только подобрать перебором. Пользователь задаёт желаемое окончание адреса, сервер перебирает варианты сдвига ключа, пока не найдёт совпадение.

Что уходит на сервер

Только два публичных ключа. Приватный ключ, мнемоника и секрет приложения на сервер не передаются. Сервер возвращает найденный сдвиг и адрес; восстановить по ним приватный ключ невозможно.

Recovery Code

Результат подбора нельзя восстановить из одной мнемоники — нужен ещё найденный сдвиг. Поэтому пользователь получает отдельный код восстановления.

Размер52 байта → около 71 символа в кодировке Base58
Составсекрет приложения (12) + сдвиг (8) + публичный ключ аппаратного кошелька (32)
Вывод ключаSHA-256 от секрета с солью «exton-multisig-v1»Соль неизменна: её замена сделала бы невосстановимыми все выданные коды
SeedForge07

SeedForge — работа с мнемоническими фразами

Отдельный инструмент внутри приложения. Работает автономно: не обращается к сети и не связан с кошельками пользователя.

ВозможностьОписание
Генерация BIP-39Фразы на 12, 15, 18, 21 или 24 слова с корректной контрольной суммой
Генерация TON NativeВсегда 24 слова, с проверкой по правилу экосистемы TON
Проверка фразыСоответствие словарю и контрольной сумме
Досбор фразыЧасть слов задаёт пользователь, остальные подбираются так, чтобы фраза стала корректной

Досбор — основной сценарий инструмента. Он помогает, когда часть слов известна: пользователь фиксирует то, что помнит, а недостающие позиции перебираются до получения фразы с верной контрольной суммой. Случайность берётся из криптографического источника операционной системы.

TON Connect и браузер08

TON Connect и встроенный браузер

TON Connect — стандартный протокол, по которому сайты запрашивают у кошелька подключение и подпись транзакций. Exton поддерживает его в двух режимах.

РежимКак работаетДля чего
Внешний сайтЧерез публичный мост, каждое сообщение
зашифровано отдельным ключом сессии
Сайт открыт в обычном браузере
или на компьютере
Встроенный браузерПрямой обмен внутри приложения,
без посредника
Сайт открыт во вкладке самого
кошелька

Что видит пользователь

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

Подтверждение владения адресом

По запросу сайта кошелёк подписывает доказательство того, что владеет адресом. Подпись привязана к домену сайта и моменту времени, поэтому не переиспользуется на другом ресурсе.

Аппаратный кошелёк09

Аппаратный кошелёк

Поддерживается Keystone 3 Pro. Устройство не подключается ни к сети, ни к телефону: обмен идёт анимированными QR-кодами — приложение показывает транзакцию, устройство сканирует её с экрана, подписывает и показывает подпись обратно.

Ключ аппаратного кошелька хранится в самом устройстве, и подпись формируется внутри него. В мультиподписи он даёт подпись второго участника; в обычном кошельке — единственную.

Хранение и защита10

Хранение и защита

Секреты кошелька хранятся под защитой устройства. Ниже — где именно они лежат на каждой платформе, как устроен код доступа и что защищает от подбора.

Где лежат секреты

ПлатформаХранилищеЗащита
AndroidЗашифрованное хранилище на ключе из
аппаратного модуля
AES-256; отдельный ярус требует
биометрии на каждое чтение
iOSСистемная связка ключейДоступ по биометрии или коду устройства

Код доступа

Шестизначный, хранится не сам, а в виде необратимого преобразования PBKDF2 с 600 000 повторений и случайной солью. Сверка выполняется за постоянное время, чтобы по её длительности нельзя было судить о правильности.

Защита от подбора

Неудачных попытокЗадержка
3–430 секунд
5–95 минут
10–1430 минут
15 и болееЧас; при включённой настройке — удаление всех кошельков

Прочие меры

  • Затирание ключей в памяти после использования — на уровне нативного кода
  • Запрет снимков экрана на страницах с фразой, ключом и кодом восстановления
  • Экран-заслонка при сворачивании приложения
  • Автоблокировка по бездействию
  • Запрет незашифрованных сетевых соединений
  • Запрет резервного копирования данных приложения в облако
  • Буфер обмена очищается сам: фраза через минуту, адрес и ключ через две
Инфраструктура11

Инфраструктура и обновления

Серверная часть решает три задачи и никогда не имеет доступа к средствам пользователей: приватных ключей на ней нет.

СлужбаНазначение
Прокси к блокчейнуПрячет ключ доступа к блокчейн-API, кэширует ответы, ограничивает частоту обращений
Подбор адресовПринимает публичные ключи, запускает перебор, отдаёт результат
УведомленияОповещает о поступлении средств

Кэширование

Ответы блокчейн-API кэшируются с разным сроком: неизменяемые данные NFT — сутки, курсы — минуту, баланс — шесть секунд. Никогда не кэшируются счётчик транзакций и сама отправка: устаревший счётчик сделал бы подпись недействительной, а отправка не является повторяемой операцией.

Выпуск версий

Android обновляется внутри приложения. Каждый выпуск проходит единый порядок: метка версии, публикация, архив, обновление каталога, выкладка с резервной копией и обязательная сверка. Файл на сервере сверяется с локальным архивом побайтово, проверяется версия внутри установочного файла и подпись разработчика.

iOS в магазин приложений не публиковался.

Статус функций12

Статус функций

Разделение введено, чтобы отличать работающее от заготовок в исходном коде.

ФункцияAndroidiOSСтатус
Создание и восстановление кошелькаДаДаРаботает
Переводы GRAM и JettonДаДаРаботает
NFT: просмотр и передачаДаДаРаботает
Выбор контракта Exton / V4R2 / V5ДаДва из трёхРаботает
TON Connect и встроенный браузерДаДаРаботает
Аппаратный кошелёк KeystoneДаДаРаботает
Мультиподпись и подбор адресаДаДаРаботает
SeedForgeДаДаРаботает
Адресная книгаДаНетЧастично
Смена ключа кошелькаКод естьКод естьСкрыто из интерфейса
Публикация в магазинах приложений——Дорожная карта
Регистрация в реестре TON Connect——Дорожная карта

DApps

Экосистема приложений поверх вашего кошелька

  • DEX
  • Маркетплейс
  • NFT-маркетплейс
  • Займы