Jetton: как выпустить токен в TON и не ошибиться с контрактом
Выпустить Jetton в TON можно за день через веб-сервис или за несколько недель через собственный контракт. Разница в контроле: готовый шаблон даёт стандартный токен, а свой код нужен, если требуются лимит эмиссии, вестинг, заморозка или особые правила перевода. В обоих случаях главное — заранее решить, кто управляет выпуском и как эта роль будет закрыта после запуска.
Как устроен Jetton
Jetton — это стандарт взаимозаменяемого токена в TON, описанный в TEP-74. В отличие от ERC-20, где все балансы лежат в одном контракте, Jetton состоит из двух частей: мастер-контракта (minter), который хранит общие данные и правила выпуска, и отдельного кошелька-контракта на каждого владельца. Перевод — это обмен сообщениями между такими кошельками.
Из этого следуют практические вещи. Узнать баланс пользователя — значит найти адрес его Jetton-кошелька; для этого мастер-контракт отдаёт адрес по методу get_wallet_address, описанному в расширении TEP-89. Каждый кошелёк платит за хранение своих данных. А стандарт намеренно не фиксирует, как устроен выпуск новых токенов: правило эмиссии каждый эмитент задаёт сам.
| Элемент | Что делает | О чём решить заранее |
|---|---|---|
| Мастер-контракт | Хранит общий выпуск, метаданные, адрес администратора | Кто администратор, можно ли его сменить или отказаться от роли |
| Jetton-кошелёк | Хранит баланс одного владельца, принимает и отправляет переводы | Нужны ли особые правила перевода или заморозки |
| Метаданные | Название, тикер, число знаков, иконка | Где хранить: в контракте или по ссылке, кто может менять |
| Правило выпуска | Кто и сколько может выпустить | Есть ли потолок эмиссии, закрывается ли выпуск после старта |
Выбор реализации
Документация TON сравнивает несколько реализаций Jetton на странице Jetton implementations comparison. Там прямо сказано, что исходная реализация устарела и для продакшена её брать не стоит. Долгое время самой распространённой была версия Discoverable Jetton, на ней работает и веб-инструмент выпуска TON Minter.
Как выбирать: если нужен обычный токен без особых правил, берите проверенную реализацию из официальных репозиториев и не меняйте её логику. Каждая правка в стандартном коде — повод для отдельной проверки. Если нужны особые правила, например максимальная эмиссия или цена выпуска, их добавляют поверх проверенной основы, а не пишут с нуля.
Без кода или с кодом
| Способ | Когда подходит | Ограничения |
|---|---|---|
| Веб-сервис выпуска | Тестовый токен, внутренние баллы, быстрый прототип | Стандартная логика, права администратора надо закрывать самому |
| Проверенный шаблон через Blueprint | Боевой токен со стандартным поведением | Нужен разработчик, тесты и деплой из своего окружения |
| Свой контракт на основе шаблона | Потолок эмиссии, вестинг, особые переводы | Обязательны полные тесты и внешний аудит |
Пошаговый план выпуска
- Опишите назначение токена одним абзацем: что он даёт держателю и почему нужен именно токен, а не баллы в базе данных.
- Зафиксируйте параметры: название, тикер, число десятичных знаков, общий объём, правило выпуска, распределение по группам.
- Решите вопрос администратора: адрес мультиподписи, а не личный кошелёк. Определите, когда и как права администратора будут отозваны.
- Выберите реализацию и окружение. Для TON официально продвигается Blueprint: шаблоны, сборка и тесты в песочнице.
- Напишите тесты на все сценарии: выпуск, перевод, перевод на несуществующий кошелёк, нехватка газа, возврат сообщения, попытка выпуска чужим адресом.
- Разверните токен в тестовой сети, пройдите сценарии вручную через кошелёк и через свой интерфейс.
- Закажите внешний аудит, если меняли логику или токен будет торговаться. Что в него входит — в статье про аудит смарт-контрактов.
- Разверните в основной сети, проверьте метаданные в обозревателе и кошельках, опубликуйте адрес мастер-контракта на своём сайте.
- Включите мониторинг выпуска и крупных переводов, см. мониторинг контрактов и кошельков.
Права администратора: главный риск
В большинстве реализаций у мастер-контракта есть адрес администратора, который может выпускать новые токены и менять метаданные. Если этот адрес — личный кошелёк основателя, держатели токена зависят от одного телефона. Если ключ украдут, злоумышленник выпустит токены и продаст их.
- Делайте администратором мультиподпись с несколькими независимыми подписантами.
- Если эмиссия фиксирована, после выпуска отзовите права на выпуск и сообщите об этом публично с ссылкой на транзакцию.
- Право менять метаданные храните отдельно от права выпуска, если реализация это позволяет.
- Пишите в документации токена, какие права остались и у кого. Скрытые права — красный флаг для держателей и бирж.
Метаданные и отображение в кошельках
Кошельки показывают название, тикер и иконку из метаданных, формат которых описан в TEP-64. Метаданные можно хранить прямо в контракте или по внешней ссылке. Внешняя ссылка удобнее для изменений, но если сервер с файлом пропадёт, токен в кошельках станет безымянным. Для боевого токена мы советуем хранить ключевые поля в контракте и не зависеть от одного сервера.
Ещё одна частая ошибка — неверное число десятичных знаков. Если интерфейс считает с одним значением, а контракт с другим, пользователи увидят суммы в тысячу раз больше или меньше. Проверяйте это в тестовой сети в нескольких кошельках.
Сколько это стоит и сколько длится
Стоимость складывается из разработки и тестов, аудита и инфраструктуры: интерфейс, мониторинг, публикация документации. Стандартный токен без изменений логики — небольшая работа, но тесты и правильная настройка прав всё равно нужны. Свой контракт с вестингом или особыми переводами занимает недели вместе с аудитом. Оценить свой случай можно через калькулятор стоимости разработки, а состав работ по TON описан на странице смарт-контракты TON и Jetton.
Чек-лист перед запуском
- Администратор — мультиподпись, подписанты и порядок подписания записаны.
- Тесты покрывают отказы и возвраты сообщений, а не только успешные сценарии.
- Метаданные проверены в нескольких кошельках и обозревателе.
- Адрес мастер-контракта опубликован на официальном сайте проекта.
- Настроены алерты на выпуск, смену администратора и крупные переводы.
- Есть план действий на случай кражи ключа администратора.
Ошибки, которые всплывают после запуска
Первая — перевод на адрес биржи или сервиса без комментария. Многие сервисы различают входящие платежи по комментарию к переводу, и без него средства приходится искать вручную. Предупреждайте пользователей в интерфейсе и в инструкции.
Вторая — нехватка TON на газ у пользователя. Перевод Jetton требует небольшой суммы TON на отправку сообщений, и человек с нулевым балансом TON не сможет отправить токены. Если продукт рассчитан на новичков, подумайте, кто и как покроет газ на первых операциях.
Третья — подделки. Любой может выпустить Jetton с таким же названием и иконкой. Кошельки и обозреватели различают токены по адресу мастер-контракта, а не по имени. Поэтому адрес нужно публиковать на официальном сайте, в канале и в документации, а в поддержке — проверять его в первую очередь, когда пользователь жалуется на «пропавшие» токены.
Вопросы и ответы
Чем Jetton отличается от ERC-20?
В ERC-20 все балансы хранятся в одном контракте. В Jetton у каждого владельца свой контракт-кошелёк, а переводы идут сообщениями между ними. Поэтому иначе устроены поиск баланса, комиссии и обработка ошибок.
Можно ли выпустить Jetton без программиста?
Да, через веб-сервисы выпуска на проверенной реализации. Это подходит для тестов и простых токенов. Но права администратора и метаданные всё равно нужно настроить осознанно.
Можно ли потом изменить общий объём токена?
Зависит от реализации и прав администратора. Если права на выпуск не отозваны, новые токены выпустить можно. Если эмиссия обещана фиксированной, права нужно отозвать и показать это транзакцией.
Нужен ли аудит для простого Jetton?
Если вы взяли проверенную реализацию без изменений, риск ниже, но проверить настройку прав и деплой всё равно стоит. Если логику меняли или токен будет торговаться, внешний аудит нужен.