На этой неделе в книгу рекордов Гиннесса попали эмитенты двух токенов на блокчейне TON: Notcoin и DOGS. Попали они туда вовсе не за какие-либо особенности своих токенов, а за шоу дронов, устроенное в небе над Дубаем.
Хоть непосредственно токены Notcoin и DOGS здесь и ни при чём, я думаю, что это событие станет толчком для роста интереса и к самим этим токенам, и к другим токенам на блокчейне TON, и привлечь внимание к этой экосистеме.
Если вы никогда не имели дела с токенами в блокчейне TON, вам будет полезно узнать об одной их особенности, которую я знаю не понаслышке, потому что с ней столкнулось несколько клиентов обменника rabbit.io.
Представьте себе ситуацию: пользователь впервые выводит свои TON-токены (например, стейблкоин USDT в сети TON) на внешний сервис. Он копирует адрес магазина, биржи или обменника, отправляет токены через свой привычный кошелёк - и ждёт зачисления. Проходит пять, десять минут, а на балансе по-прежнему 0. Паника нарастает: "Неужели мои токены пропали навсегда?" Обращается в поддержку, и выясняется, что причина кроется вовсе не в техническом сбое у получателя, а в отсутствии Jetton Notification при отправке.
Пользователь отправил токены без специального уведомления (Jetton Notification), поэтому автоматическая система магазина, биржи или обменника просто не заметила поступление средств.
“Стоп! Что? - думает пользователь. - Я же не какой-нибудь новичок! Я уже много раз отправлял разные токены в разных блокчейнах, и нигде никаких дополнительных уведомлений не требовалось!”
В ряде ситуаций, в которую попали пользователи сайта rabbit.io, именно так всё и было. “Пропали” (а точнее, остались незамеченными) токены, отправленные нашими постоянными клиентами: теми, кто уже много раз совершал обмены и снова обратился на сайт, зная, что все обмены всегда проводятся предельно просто, без каких-либо заморочек и по лучшим курсам. Того же самого они ожидали и при отправке токенов через TON, но неожиданно столкнулись с проблемами из-за отсутствия уведомления Jetton Notification.
Почему так вышло и что это за загадочное уведомление? Давайте разбираться.
Все активы, выпускаемые в блокчейне TON (кроме основной монеты Toncoin) реализованы как Jetton - аналог стандартов вроде ERC-20 в Ethereum. Проще говоря, Jetton - это пользовательский токен на TON, управляемый смарт-контрактами. Для каждого токена существует основной контракт-минтер (хранит общую информацию, может выпускать новые монеты) и множество контрактов-кошельков - по одному на каждого владельца. Вместо хранения баланса на одном контракте, как в Ethereum, в TON у каждого владельца есть свой отдельный смарт-контракт - Jetton-wallet, - который “держит” его баланс токена. Образно можно сравнить это с тем, что монеты Toncoin мы держим в своих собственных кошельках, а любые токены держат в кошельках наши слуги-роботы (которые не могут их украсть или как-то использовать).
Как происходит перевод токенов? Когда Алиса отправляет токены Бобу, её “слуга” (Jetton-wallet) отправляет токены “слуге” Боба.
Как видно, разница серьёзная: с Jetton Notification получатель активно оповещается о приходе токенов, а без него - нет. Чтобы уведомление сформировалось, отправитель должен приложить к транзакции минимум крошечную долю TON (на газ) и опционально какой-то комментарий. Стандартом TON установлено, что для таких целей достаточно добавить 1 нанотон (0.000000001 TON) - этого хватит, чтобы Jetton-wallet получателя сгенерировал уведомление получателю. Иными словами, отправляя токены, нужно "вложить" в транзакцию копеечку и данные уведомления - тогда получатель непременно узнает о переводе.
Если же этого не сделать (не прикрепить дополнительную комиссию и payload), токены технически всё равно поступят на адрес: в дальнейшем только Jetton-wallet Боба может распоряжаться токенами. Но сам Боб может об этом не узнать, пока вручную не проверит баланс через блокчейн-сканер. В случае обычного пользователя это приведёт лишь к замешательству. А вот в случае биржи или обменника - к тому, что автоматическая система просто не обработает депозит.
Бизнес-пользователи блокчейна TON - магазины, биржи, обменники и др. - стремятся обрабатывать поступления средств автоматически. Для этого они обычно отслеживают входящие сообщения на свои адреса. Проще говоря, программа ждёт: "Пришло ли на наш кошелёк сообщение о переводе токенов?" Если да - она читает, какой токен, сколько, от кого, и сразу зачисляет на аккаунт пользователя.
Но если пользователь отправил перевод без уведомления, то никакого входящего сообщения на адрес мерчанта не было. Токены-то дошли, но молча. Автоматический скрипт ничего не поймал - ему просто нечего ловить. Это как если бы курьер принёс вам подарок, отдал бы его вашему слуге-роботу, но не попросил бы слугу передать вам, что подарок доставлен. А слуга - это ведь робот: он делает только то, о чём его попросят. Не попросили - стоит смирно и ни о чём вам не рассказывает.
В итоге перевод зависает в неопределённости. Система мерчанта "не увидела" и не зачислила его. Именно поэтому TON Foundation настоятельно указывает, что все сервисы при выводе токенов должны включать Jetton Notification - иначе другие сервисы не смогут корректно обработать транзакцию. Это требование уже стало де-факто стандартом: "если перевод токена - то с уведомлением".
Новички, однако, нередко попадаются. Если есть возможность отправить перевод без дополнительной небольшой комиссии, они так и делают. В итоге “курьер”, получивший деньги только за доставку, а не за передачу слуге получателя просьбы об уведомлении его хозяина, выполняет только то, за что ему заплатили. Поэтому обменник, биржа или магазин не узнают о том, что им поступил перевод, и отправителю приходится обращаться в поддержку и решать проблему в индивидуальном порядке.
Такая ситуация может казаться запутанной, но аналоги есть и в других сетях - просто проявляются по-разному:
В 2023 году появилось явление Ordinals - привязка NFT-данных к конкретным сатоши биткоина. Эти "индивидуальные" сатоши называют rare sats. Однако сам биткоин-протокол никак не отличает такие "особенные" сатоши от обычных. Всё держится на дополнительном уровне протокола. Поэтому если отправить редкий сатоши обычным переводом на биржу, биржа воспримет его просто как BTC и, скорее всего, навсегда утратит уникальные данные Ordinal. Специальные вещи требуют специальных процедур - как Ordinals нуждаются в особых транзакциях, так и токены на TON требуют отправки по стандарту с уведомлением.
Многие знают, что при отправке XRP, XLM или, кстати, того же Toncoin на биржу часто нужен Memo/Tag - специальный идентификатор. Если его забыть указать, активы поступят на общий биржевой адрес, но не будут ассоциированы с конкретным пользователю. С Jetton Notification схожая логика: комментарий (memo) в TON-транзакции выполняет роль такого идентификатора и одновременно технически запускает уведомление. Без него перевод автоматически не распознаётся нужным аккаунтом.
Если в кошельке получателя не включено отображение конкретного токена, получатель может не узнать о том, что этот токен ему поступил, пока не посмотрит в обозреватель блокчейна. Этим даже иногда пользуются мошенники, отправляя свежесозданные токены на адреса крупных держателей криптовалюты (“китов”), чтобы ввести в заблуждение тех, кто отслеживает активность этих адресов в блокчейне. Неискушённый наблюдатель может подумать, что “кит” купил эти токены, и захочет повторить Smart Money Move. Хотя на самом деле “кит” может даже не догадываться о том, что эти токены есть у него на балансе.
Все эти примеры показывают: в каждой экосистеме есть свои правила обращения с токенами, и игнорирование этих правил может привести к проблемам.
Что делать, чтобы ваш перевод токенов TON не застрял? Вот несколько советов:
1. Всегда прикрепляйте комментарий (Memo) при отправке токенов на обменники и биржи.
Мост TON-кошельки часто добавляют поле "Комментарий" при отправке. Достаточно вписать туда любые символы - и ваш кошелёк вынужден будет автоматически добавить тот самый 1 нанотон, чтобы заплатить за отправку нужного уведомления. Jetton-wallet получателя технически не сможет доставить комментарий, но не доставить Jetton Notification.
2. Тестируйте с малой суммой.
Если получатель по какой-то причине настаивает на отсутствии комментария, или вы не уверены, что делаете всё правильно, сначала отправьте небольшую сумму. Убедитесь, что она дошла и зачислена. Это снизит стресс, даже если что-то пойдёт не так.
3. Используйте надёжные кошельки.
Современные TON-кошельки (Tonkeeper, TonWallet и др.) уже подстраховывают пользователя: как правило, они автоматически добавляют необходимые данные при переводе токенов. Однако, если вы пользуетесь кастомными скриптами или устаревшими приложениями, будьте особенно внимательны - возможно, вам вручную нужно указать forward_ton_amount и payload. В документации разработчиков прямо сказано: “для успешного перевода с уведомлением добавьте 1 нанотон и сформируйте forward_payload (комментарий)”.
4. Если проблема уже случилась - действуйте.
При обмене на rabbit.io отправили токены без уведомления? Не паникуйте. Соберите данные о транзакции (хэш, время, адреса) и напишите в поддержку обменника или биржи. В большинстве случаев поддержка сможет найти ваш “застрявший” перевод вручную. Но это неудобно, это может занять время и даже потребовать уплаты комиссии. Поэтому лучше предупредить проблему, чем потом её решать.
Jetton Notification - не прихоть и не дополнительная плата, а неотъемлемая часть экосистемы TON-токенов. Когда понимаешь, как устроены переводы в этой сети, становится ясно, почему просто "переслать токены на адрес" недостаточно для мгновенного зачисления. Блокчейн TON работает асинхронно и модульно: перевод токена - это диалог между смарт-контрактами, и если не попросить смарт-контракт оповестить получателя, он может и не узнать о состоявшемся диалоге.
К счастью, для обычного пользователя всё не так уж сложно. Достаточно следовать подсказкам кошелька и инструкциям биржи: вписать Memo, отправить минимальный “газ” вместе с токенами, и тогда ваша транзакция пройдёт гладко. Автоматические системы мгновенно учтут поступление, а вы избежите лишних волнений.