Перейти к содержимому

Смарт-контракты TON: Jetton, NFT и логика на асинхронных сообщениях

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

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

Пишем на Tolk, FunC или Tact в зависимости от задачи и того, кто будет поддерживать код после нас. Для тестов используем фреймворк Blueprint и песочницу, в которой можно проиграть цепочку сообщений целиком и посмотреть, как она ведёт себя при нехватке газа, при возврате и при повторной доставке. В основную сеть выходим только после прохода по тестовой.

Метаданные Jetton — имя, символ, описание, изображение — хранятся в контракте или по ссылке, и от выбора зависит отображение в кошельках и обозревателях. Отдельно решаем вопрос администратора: передать права мультиподписи, оставить возможность выпуска или отказаться от неё. Каждое решение фиксируется в документации для держателей.

Чем мышление TON отличается от EVM

EVM

  • Вызов другого контракта выполняется сразу в той же транзакции.
  • Балансы токена хранятся в одной таблице внутри контракта.
  • Ошибка откатывает всю транзакцию целиком.

TON

  • Контракты общаются сообщениями, которые исполняются позже.
  • У каждого держателя Jetton свой контракт-кошелёк.
  • Ошибка на втором шаге требует отдельного возвратного сообщения.

Возможности

Что делает контракт

01

Выпустить Jetton по стандарту

Главный контракт и кошельки держателей соответствуют TEP-74 и корректно отображаются в популярных кошельках.

02

Обработать возвраты сообщений

При ошибке на любом шаге цепочки токены возвращаются отправителю, а не исчезают.

03

Рассчитать оплату газа

Каждое сообщение несёт достаточно средств на исполнение и пересылку, излишек возвращается пользователю.

04

Передать управление

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

Калькулятор

Смарт-контракты TON и Jetton — расчёт стоимости

Отраслевые модули уже отмечены. Уберите лишнее или добавьте нужное — сумма в счёте будет та же, что в смете.

1

Выберите пакет

2

Добавьте нужное

+ 4 900 ₽
+ 19 900 ₽
+ 9 900 ₽
+ 144 900 ₽
+ 29 900 ₽
+ 12 900 ₽
+ 9 900 ₽/мес
+ 74 900 ₽
от 14 900 ₽ за сеть
+ 24 900 ₽
3

Ваша смета

  • Пакет «Спутник»39 900 ₽
  • Метаданные и отображение4 900 ₽

Стоимость работ

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 мы разрабатываем как программный код, а не принимаем через них оплату.

Источники и проверка сведений

Помощник по заказуЦены, сроки, оплата, договор — отвечает сразу

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