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

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

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

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

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

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

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

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

Из чего состоит02
КомпонентТехнологияНазначение
Приложение AndroidKotlin, Jetpack ComposeОсновной клиент, ~48 000 строк
Приложение iOSSwift, SwiftUIКлиент, ~30 000 строк
Смарт-контрактыTolk 1.2Кошельки и плагины в сети TON
Подбор адресовRustПодбор адресов на сервере
Серверная частьPython, FlaskПрокси к блокчейн-API, задачи подбора, уведомления
Агентский навыкPythonОперации с кошельком из чат-агента

Как части связаны

Ключ доступа к блокчейн-API не входит в состав приложений. Оба клиента обращаются к блокчейну исключительно через собственный прокси, где этот ключ и хранится. Из установочного файла его извлечь нельзя.

  1. Android / iOS
  2. api.exton.app → tonapi.io → блокчейн TON

    прокси прячет ключ доступа к блокчейн-API,
    кэширует ответы, ограничивает частоту

  3. multisig.exton.app → подбор адресов (Rust)

    принимает ТОЛЬКО публичные ключи

  4. bridge.tonapi.io → связь с внешними сайтами (TON Connect)

    принимает ТОЛЬКО публичные ключи

  5. Keystone 3 Pro → вторая подпись, обмен QR-кодами; устройство не подключается к сети

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

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

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

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 можно добавить произвольное слово-пароль. Оно даёт другой кошелёк с другим адресом, а не защищает существующий. Само слово нигде не сохраняется в открытом виде: без него восстановить такой кошелёк невозможно.

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

Один и тот же ключ даёт три разных адреса — по одному на каждый тип контракта

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

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

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

Корректность подписи для контракта V5 закреплена тестами против эталонной библиотеки экосистемы TON: подписанные сообщения совпадают с эталоном побайтово, включая проверку на реальном кошельке, существующем в основной сети.

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

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

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

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

  • GRAM — нативная валюта сети, в том числе «отправить весь остаток»
  • Token-jetton — по стандарту TEP-74, с выбором токена в списке
  • NFT — поштучно и пакетом
  • Комментарий к переводу — произвольный текст

Получатель

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

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

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

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

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

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

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

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

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

Плагины

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

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

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

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

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

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

Recovery Code

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

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

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

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

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

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

TON Connect и браузер09

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

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

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

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

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

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

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

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

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

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

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

Аппаратный кошелёк работает с контрактом V4R2. Это ограничение прошивки устройства, а не приложения.

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

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

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

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

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

Код доступа

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

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

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

Прочие меры

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

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

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

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

Кэширование

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

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

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

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

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

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

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

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

Открытые вопросы

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

ВопросСуществоОценка
Совместимость мнемоники
TON Native между платформами
Вывод ключа на iOS и в SeedForge отличался от Android; из одной фразы получались разные кошелькиИсправлено в коде
Развёрнутый код мультиподписиИсходный текст в репозитории расходится с развёрнутым в сети кодом; идут восстановление исходника и независимая проверкаВ работе
Хранение секретов подобранного адресаНезашифрованное хранилище; удаление кошельков
их не затрагивало
Исправлено в коде
Задержка при переборе
кода доступа
Действовала только на экране блокировкиИсправлено в коде
Проверка источника запроса
во встроенном браузере
Усиливается проверка того, какой сайт запрашивает подключениеВ работе
Автоматические тесты iOSОтсутствуют; на Android — 47 тестов, покрывают криптографию и сетевой слойК устранению

DApps

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

Биржа, займы и маркетплейс цифровых активов — следующие сервисы экосистемы. Они подключаются через Exton Connect и работают в границах, которые вы задаёте плагинами, — без безлимитных approve.