Как Fragment от Telegram спрятал больше 20 тысяч TON (около 30 тыс. $) пользователей в смарт-контрактах

С момента старта маркетплейса Fragment в октябре 2022 года объем торгов юзернеймами и анонимными номерами превысил 63,6 млн TON (<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fgetgems.io%2F%3Ftop-collections-period%3Dall&postId=763632" rel="nofollow noreferrer noopener" target="_blank">$89 млн</a>). В статье мы расскажем, как любой пользователь может потерять (или получить) лишние TON в процессе торговли NFT.
С момента старта маркетплейса Fragment в октябре 2022 года объем торгов юзернеймами и анонимными номерами превысил 63,6 млн TON ($89 млн). В статье мы расскажем, как любой пользователь может потерять (или получить) лишние TON в процессе торговли NFT.

Таинственное поведение трейдеров Fragment

В ночь с 14 на 15 мая известный трейдер Galya-u-nas-otmena потряс все активное ton-сообщество своими загадочными действиями (интервью с Galya). Он покупал с помощью автоматизированного бота-скупщика анонимные номера по цене 266 ton и буквально спустя 5 минут выставлял их на продажу за 170 ton (действовали и другие боты, но Galya совершил больше всех покупок). Аналогичные сделки на рынке, но в меньшем количестве, продолжались и в дальнейшем. На первый взгляд, каждая такая продажа должна была принести убыток в размере 96 ton. Однако при детальном изучении окажется, что это не совсем так. Но давайте по порядку.

<i>Цитата из интервью с Galya про багу с "застрявшими" средствами</i>
Цитата из интервью с Galya про багу с "застрявшими" средствами

В чем особенность контрактов анонимных номеров?

Смарт-контракты анонимных номеров и юзернеймов отличаются от тех, что используются в других NFT на TON. Команда Дурова, по сути, создала оригинальный способ проводить сделки с цифровой собственностью без помощи посторонних решений. Неважно, будь то продажа или аукцион, если вы имеете дело с Fragment, то все промежуточные расчеты будут происходить через контракт NFT. Так, покупая анонимный номер, вы переводите свои средства непосредственно на адрес самого лота. Только после этого часть средств отправляется на кошелек Fragment в качестве роялти, а вторая часть уходит продавцу. При этом, чтобы самостоятельно совершать операции в сети TON, контракт должен постоянно хранить небольшое количество монет для оплаты газа. Например, 1 ton. Этого достаточно, чтобы выставить номер на аукцион примерно 100 раз. Если за это время актив не был продан, то у владельца должна остаться возможность самостоятельно пополнить контракт. Как раз для этих целей предусмотрена возможность пополнения баланса NFT.

Хорошо. С этим все ясно. Баланс NFT можно пополнить, если это юзернеймы или номера.

Теперь представим, что по какой-то случайности хозяин перевел на свой номер дополнительные 100 ton. Что тогда произойдет? Если бы это сделал по ошибке любой другой пользователь, то тоны бы вернулись ему обратно при условии, что номер не выставлен на продажу. Но если монеты переведет владелец, то контракт примет их. Тогда баланс NFT составит 1 + 100 ton.

Как теперь вывести с него средства?

В любой непонятной ситуации — спроси в TON Дев чате

TON Дев чат — это не группа с молодыми девами, как можно подумать из названия, а уважаемое сообщество программистов и разработчиков на блокчейне TON. Что ни случись — все идут за помощью именно к ним.

В поисках удачного примера мы просмотрели историю Дев чата за несколько месяцев и нашли подходящий случай. Там же и описан способ, как можно вернуть обратно застрявшие монеты – нужно просто 1 раз отправить NFT самому себе, тогда ton спишется с адреса контракта и вернется на кошелек получателя, то есть обратно к вам.

Но что произойдет, если выставить на продажу такой номер или юзернейм? В таком случае средства на балансе перейдут покупателю вместе с NFT.

<i>14 ton пользователя «застряли» на смарт-контракте юзернейма</i>
14 ton пользователя «застряли» на смарт-контракте юзернейма

Сканируем трейдеров Fragment

Теперь давайте внимательно посмотрим на историю транзакций по нескольким номерам, купленных 15 мая и проданных дешевле. В истории транзакций на маркетплейсе GetGems вроде бы все в порядке. Сначала покупка, затем трансфер и продажа. Ничего необычного. Если мы воспользуемся для изучения транзакций Tonscan, то сразу увидим, что покупатель вместе с номером получил еще 204 ton. Они как раз хранились на балансе NFT и стали наградой для трейдера. Таким образом, убыточное на первый взгляд действие оборачивается для торговца прибылью в 108 ton.

<i>Пример 1 (вид GetGems VS Tonscan): 1 - Покупка номера за 266; 2 - получение 204 ton с баланса NFT, 3 - продажа за 170 ton; профит 108 ton</i>
Пример 1 (вид GetGems VS Tonscan): 1 - Покупка номера за 266; 2 - получение 204 ton с баланса NFT, 3 - продажа за 170 ton; профит 108 ton

Во втором примере профит составил 89 ton. И таких случаев с октября 2022 года произошло множество. Только по приблизительным оценкам прямо сейчас на контрактах NFT "заморожено" больше 10 тысяч TON, а за все время сумма "застрявших" средств могла составить от 20 до 50 тысяч ton (по данным из блокчейна).

<i>Пример 2 (вид GetGems VS Tonscan): 1 - Покупка номера за 299; 2 - получение 197 ton с баланса NFT, 3 - продажа за 171 ton; профит 69 ton.</i>
Пример 2 (вид GetGems VS Tonscan): 1 - Покупка номера за 299; 2 - получение 197 ton с баланса NFT, 3 - продажа за 171 ton; профит 69 ton.

Обратите внимание, что обе продажи изначально были совершены с одного и того же кошелька EQCjG5H99tDcIlqX4Hj1sfuve8Pt_9e2RGh_Lj1jQy9grqgq (баланс на момент статьи 288 тыс. ton).

Если вы знаете, на каких NFT есть баланс, то можете повторять эти действия многократно и получать доход со всех сделок (например, трейдер Galya заработал более 5 тысяч "застрявших" TON).

С точки зрения рынка покупатели NFT с балансом просто оказались хитрее. Но с позиции владельца NFT все выглядит по-другому: он получил ущерб из-за того, что на момент продажи не знал реальной стоимости NFT с учетом баланса. В масштабе микрокошельков, как было с пользователем в Дев чате, перерасход ton на покупку 1 NFT в 14 ton стал заметен практически сразу. В случае с бюджетом в десятки тысяч ton (столько было у крупного продавца в мае) трата излишних 100-200 ton уже не бросается в глаза.

Кто виноват и как обезопасить себя от продажи NFT с балансом?

Отправить лишние ton на контракт NFT, используя кошелек или маркетплейс, можно несколькими способами:

1. Сделать ставку на аукционе слишком поздно, например, когда таймер дошел до отметки 0:00 (так было у пользователя в Дев чате);

2. Подписать 2 раза одну и ту же транзакцию в кошельке Tonkeeper (так было у крупного продавца в мае).

Если с первым вариантом ничего не попишешь, виноват пользователь, то насчет второго можно поразмышлять. На момент майской истории некоторые пользователи сталкивались с тем, что при покупке на Fragment через браузер в Tonkeeper, кошелек предлагал подписать им 2 одинаковые транзакции подряд вместо одной. После того, как проблема стала обсуждаться в ton-чатах, примерно в июне, бага в кошельке исчезла. Еще чуть позже, примерно в июле, Fragment ввел предупреждения о том, что на балансе NFT хранится больше 1 ton.

<i>Предупреждение на Fragment о том, что на NFT избыточный баланс</i>
Предупреждение на Fragment о том, что на NFT избыточный баланс

Это похоже на основательную работу над ошибками от двух крупных сервисов в экосистеме TON. Однако нет ни одного, кто бы признал свою ответственность за эту проблему. Поэтому за проделанную работу так никто и не отчитался, а ущерб не был компенсирован пользователям. Мы взяли комментарий у представителя Tonkepeer, приводим скриншот ниже и полную цитату с ответом в конце статьи (согласно этой версии во всем виноват Fragment).

<i>Ответ представителя Tonkeeper об отправке "двойной транзакции" на адрес NFT из кошелька</i>
Ответ представителя Tonkeeper об отправке "двойной транзакции" на адрес NFT из кошелька

Также мы задали аналогичные вопросы в поддержку Telegram, но на момент публикации ответа так и не получили.

Как проверить баланс своих NFT?

Если вы хотите проверить баланс своих номеров и юзернеймов, то можете воспользоваться несколькими способами:

  1. В ручном режиме проверить все NFT на сайте Fragment. Для этого:
    - откройте список ваших NFT, попробуйте запустить продажу каждого NFT по очереди (но не подтверждайте), если на NFT есть баланс, то Fragment предупредит вас об этом;
  2. Также по нашей просьбе в Telegram-боте NFT TONificator добавлена автоматическая проверка баланса всех номеров и юзернеймов. Для этого:
    - запустите бота, выберите язык, нажмите "меню" и кликните на команду "/auction", подключите кошелек (официальная технология TonConnect)
    - в открывшемся меню выберите "проверить баланс NFT", дальше бот самостоятельно проверит все NFT на вашем адресе и сообщит вам, если на каких-то из них есть лишний баланс, который можно вывести.

После этого просто отправьте самому себе NFT с балансом, чтобы получить "застрявшие" ton обратно.

Будьте бдительны!

С уважением к Вам
Команда JPGM

Приложение (вопрос редакции и ответ Tonkeeper):

Вопрос от редакции JPGM:

Привет 👋

В Tonkeeper некоторое время существовала проблема, когда при переходе с сайта Fragment обратно в кошелек для подтверждения транзакции, приложение формировало 2 платежа вместо 1. Это привело к тому что на некоторых контрактах номеров образовался излишний баланс (первая транзакция уходила на покупку номера, вторая оставалась на контракте номера)

Дело в том, что по приблизительным подсчетам, ущерб пользователей в результате продажи номеров с балансом составил более 10000 тон. Часто юзеры даже не догадывались о том, что в момент покупки они заплатили за номер 2 раза.

В связи с этим у нас вопрос, признает ли кошелек ответственность за багу с отправкой двойной транзакции? Решена ли она сейчас? И могут ли пострадавшие пользователи обратиться к вам за компенсацией? Если да, то какой должен быть порядок подачи жалобы?

Ответ представителя Tonkeeper:

Добрый день!

Данная проблема была со стороны Fragment.com, т.к. это они формировали эти самые транзакции и всё залипало с их стороны. Там, если не ошибаемся, была немного иная история. Прошлая транзакция повторяла предыдущую по какой-то причине и пользователь её подписывал (не обращая внимания на то, что подписывает). Почему проблема со стороны Fragment? Просто потому что подобная ситуация имела место быть именно с Фрагментом. В других сервисах подобного поведения совершенно не было. Если бы вина лежала на кошельке, то это происходило бы и со свапом токенов, и с отправкой любых других NFT и вообще с любыми другими транзакциями, которые проходят через нас (что, в общем-то, и логично).

А уж если такое происходит исключительно на одном маркетплейсе при работе с определенными видами транзакций — это говорит только об одном. Это не говоря о том, что некоторые пользователи просто так иногда случайно по recent-адресам высылают себе на номера какое-то количество TON.

Вы можете попробовать обратиться в поддержку Telegram через telegram.org/support, описав им ситуацию с номерами. Если вы встречаетесь с залипанием транзакций, то обязательно репортите нам. Надеемся, что в будущем Fragment вовсе перейдет на TonConnect 2.0, чтобы таких ситуаций не происходило вовсе. Мы со своей стороны сделали все возможное, чтобы защититься от таких моментов, а Fragment в свою очередь, предупреждает о плюсовом балансе на NFT перед продажей.

1111
5 комментариев

Спасибо за статью. Хороший материал

2

Галя нехило так подняла))

1

Ага, только это он) там еще интервью с ним есть о том, как он поднял еще в 5 раз больше)

Отличная статья 👏

1