Jetton — это стандарт интерфейса взаимозаменяемых (fungible) токенов на блокчейне TON. Взаимозаменяемость означает, что любая единица одного Jetton идентична любой другой единице того же типа. Стандарт фиксирует единый интерфейс для всех TON-токенов: имеющиеся кошельки, DEX и dApps могут работать с любым Jetton без специальной интеграции.
Реализация — два связанных смарт-контракта на языках FunC и Tact. Самостоятельно выпустить токен можно без программирования через сервисы TON Minter и TON Raffles, заполнив форму с параметрами. Торговля Jettons идёт преимущественно на DEX STON.fi и DeDust.
История стандарта#
Стандарт описан в документе TEP-74, опубликованном 24 августа 2022 года в репозитории ton-blockchain/TEPs на GitHub. Документ ввёл архитектурную модель master-wallet, отличную от классических токен-стандартов (ERC-20), и зафиксировал требования к методам контрактов и порядку взаимодействия.
Архитектура#
Jetton состоит из двух типов контрактов: основного (master) и кошельков (wallets). На каждый выпуск Jetton приходится ровно один основной контракт. Кошельки создаются по одному на каждого владельца, который держит этот Jetton.
Основной контракт (Jetton Master)
В основном контракте хранятся:
- общее количество выпущенных токенов;
- метаданные: название, символ, описание, логотип, количество знаков после запятой, дополнительная информация (по отдельному стандарту TEP-64);
- байткод контракта кошелька (один и тот же для всех владельцев);
- функция выпуска новых токенов (mint), если она разрешена для конкретного Jetton.
Обязательные методы основного контракта: получение метаданных монеты и детерминированный расчёт адреса контракта-кошелька для произвольного владельца.
Кошелёк держателя (Jetton Wallet)
Контракт-кошелёк позволяет владельцу:
- переводить токены другому адресу;
- сжигать собственный баланс с уведомлением основного контракта;
- запрашивать состояние: текущий баланс, адрес владельца, адрес основного контракта, байткод.
Механизм перевода#
При отправке Jettons сообщение сначала уходит на контракт-кошелёк отправителя — баланс там уменьшается. Затем кошелёк-отправитель пересылает внутреннее сообщение кошельку получателя — там баланс увеличивается. Если у получателя ещё нет соответствующего контракта-кошелька, он автоматически создаётся в процессе перевода.
Такая модель распределяет состояние Jetton по тысячам отдельных контрактов вместо одного централизованного хранилища — это снижает «горячие точки» в шардах и улучшает параллелизацию.
Типы Jetton-монет#
Стандарт универсален; на практике выделяют три прикладные категории.
Обёрнутые токены
Стоимость такого Jetton привязана к другому активу, заблокированному в качестве обеспечения. Примеры: WTON (Wrapped TON), jUSDT, jUSDC, jWBTC. Это «обёртки» базовых активов: например, jWBTC даёт возможность работать с эквивалентом BTC в сети TON, не платя комиссии биткоин-сети и используя ликвидность TON-DEX. Применение: переводы между блокчейнами, торговля на DEX, голосования в кросс-чейн DAO.
Мемкоины
Токены, выпущенные ради виральности или как высокорисковый спекулятивный актив. Прежде всего — Notcoin, а также ARBUZ и другие. Notcoin привлёк многомиллионную аудиторию через Telegram-игру, выведя в крипту значительный сегмент Web2-пользователей.
Utility-токены
Используются для доступа к сервисам или функциям конкретной платформы. Примеры: JetTon — игровая монета на платформе азартных игр; Web3 TON Token — оплата доменов на TON DNS; TRIBE — монетизация цифрового контента.
Отличия Jetton от ERC-20#
Внешне Jetton и ERC-20 решают одну задачу (взаимозаменяемые токены), но архитектурно сильно различаются.
| Свойство | Jetton (TON) | ERC-20 (Ethereum) |
|---|---|---|
| Хранение балансов | Отдельный контракт для каждого владельца | Один контракт хранит все балансы |
| Передача | Через взаимодействие двух контрактов-кошельков | Вызов функции transfer основного контракта |
| Дополнительные данные при переводе | Можно передать payload и Toncoin | Не предусмотрено стандартом |
| Сжигание | Специальный метод burn с уведомлением master | Перевод на «мёртвый» адрес |
| Запрос актуального баланса в момент перевода | Eventual consistency (баланс получателя обновится в следующем блоке) | Атомарно в одной транзакции |
| Возможность блокировки счетов владельцем контракта | Нет | Есть |
Распределённая архитектура Jetton повышает децентрализацию: владелец master-контракта не может одной транзакцией заблокировать все балансы, как это возможно с некоторыми реализациями ERC-20.
Mintless Jetton#
Mintless Jetton — расширение стандарта, позволяющее распределять токены без их непосредственного выпуска на блокчейне. Это снижает нагрузку при массовых аирдропах: вместо тысяч транзакций mint на этапе раздачи используется off-chain дерево Меркла, а токены «материализуются» в момент первой активности получателя.
Принцип работы:
- Команда формирует дерево Меркла со всеми получателями и их балансами; дерево хранится вне сети (например, в IPFS).
- Получатель предъявляет Merkle proof, подтверждающий его право на токены.
- Контракт верифицирует доказательство и минтит баланс в кошелёк получателя; до этого момента баланса на блокчейне не существует.
Технология была отработана на тестовом Jetton Mintless Points (раздача 18 млн кошельков TON) и используется в Hamster Kombat.