Смарт-контракты TON: Jetton, NFT и логика на асинхронных сообщениях
TON устроен не так, как Ethereum: у каждого держателя Jetton свой кошелёк-контракт, а вызовы превращаются в цепочку сообщений, которые исполняются в разных блоках. Перенос привычек из EVM здесь приводит к потерянным токенам. Напишем контракты под модель TON.
Jetton в TON состоит из главного контракта и отдельного контракта-кошелька для каждого владельца. Перевод — это сообщение от кошелька отправителя кошельку получателя, а уведомление о поступлении — ещё одно сообщение. Если какое-то звено не получило достаточно газа или сообщение вернулось, состояние должно откатиться корректно. Обработка возвратов и расчёт оплаты за пересылку составляют заметную часть работы.
Пишем на Tolk, FunC или Tact в зависимости от задачи и того, кто будет поддерживать код после нас. Для тестов используем фреймворк Blueprint и песочницу, в которой можно проиграть цепочку сообщений целиком и посмотреть, как она ведёт себя при нехватке газа, при возврате и при повторной доставке. В основную сеть выходим только после прохода по тестовой.
Метаданные Jetton — имя, символ, описание, изображение — хранятся в контракте или по ссылке, и от выбора зависит отображение в кошельках и обозревателях. Отдельно решаем вопрос администратора: передать права мультиподписи, оставить возможность выпуска или отказаться от неё. Каждое решение фиксируется в документации для держателей.
Чем мышление TON отличается от EVM
EVM
- Вызов другого контракта выполняется сразу в той же транзакции.
- Балансы токена хранятся в одной таблице внутри контракта.
- Ошибка откатывает всю транзакцию целиком.
TON
- Контракты общаются сообщениями, которые исполняются позже.
- У каждого держателя Jetton свой контракт-кошелёк.
- Ошибка на втором шаге требует отдельного возвратного сообщения.
Возможности
Что делает контракт
Выпустить Jetton по стандарту
Главный контракт и кошельки держателей соответствуют TEP-74 и корректно отображаются в популярных кошельках.
Обработать возвраты сообщений
При ошибке на любом шаге цепочки токены возвращаются отправителю, а не исчезают.
Рассчитать оплату газа
Каждое сообщение несёт достаточно средств на исполнение и пересылку, излишек возвращается пользователю.
Передать управление
Права администратора переходят на мультиподпись заказчика или отзываются по согласованному решению.
Калькулятор
Смарт-контракты TON и Jetton — расчёт стоимости
Отраслевые модули уже отмечены. Уберите лишнее или добавьте нужное — сумма в счёте будет та же, что в смете.
Выберите пакет
Добавьте нужное
Ваша смета
Стоимость работ
44 800 ₽
Срок: 2–3 недели
Счёт сейчас: 44 800 ₽ — 100%, сумма до 50 000 ₽
Без регистрации. Счёт и анкета придут на почту сразу. Гарантия 3 месяца после запуска.
Типичные промахи в контрактах TON
Не обработан возврат сообщения
Перевод не дошёл, а баланс отправителя уже уменьшен. Нужен обработчик возвращённого сообщения, восстанавливающий состояние.
Фиксированная оплата газа
Константа, подобранная на тестах, перестаёт хватать после изменения тарифов сети. Проверяем запас и возвращаем излишек.
Доверие к отправителю без проверки
Контракт принимает уведомление от любого адреса, а не только от своего кошелька Jetton. Адрес отправителя вычисляем и сверяем.
Как проверяем перед запуском
В песочнице проигрываем полные цепочки: обычный перевод, перевод с уведомлением, перевод на несуществующий кошелёк, отправку с недостаточным газом. Для каждой цепочки сверяем итоговые балансы всех участников и сумму возвращённых средств.
После выпуска в тестовой сети проверяем отображение в нескольких кошельках и обозревателях, а затем вы проводите собственные переводы. Только после вашего подтверждения выпускаем рабочую версию и передаём права администратора.
Вопросы и ответы
Вопросы о контрактах TON
Можно перенести готовый контракт с Ethereum на TON?
Логику — да, код — нет. В TON нет синхронного вызова одного контракта из другого, поэтому механику переписываем под обмен сообщениями. Часто меняется и сама схема: то, что в EVM хранится в одном контракте, в TON распределяется по множеству небольших контрактов.
На каком языке пишете?
Tolk, FunC или Tact. Tolk и FunC дают больший контроль над расходом газа, Tact проще читать и поддерживать. Выбираем вместе с вами с учётом того, кто будет развивать проект после сдачи.
Почему перевод Jetton иногда «зависает»?
Перевод состоит из нескольких сообщений, которые исполняются последовательно, и полный результат виден через несколько блоков. Если отправитель приложил мало газа, цепочка может остановиться на середине. Правильно написанный контракт возвращает средства, а интерфейс показывает пользователю промежуточный статус.
Можно принять оплату в Toncoin за ваши услуги?
Нет. Работы оплачиваются только в рублях по договору. Контракты TON мы разрабатываем как программный код, а не принимаем через них оплату.
Источники и проверка сведений
Смотрите также
Похожие решения
Спросите что угодно о заказе: сколько будет стоить ваш проект, что входит в пакет, как платить, какие документы получите.