Я попробовал внимательно изучить то, что произошло 31.07 на бирже stone.fi, выяснить причины и и сделать выводы на будущее, чтобы подобное больше не повторялось. Итак, позвольте мне рассказать свою версию.
Я сформировал пул токена CHAMBY с USDT на DEX блокчейна TON stone.fi. В процессе формирования пула я, по всей видимости, был атакован неизвестным рейдером, который нарушил процесс формирования пула.
Правда, я это понял сильно позднее, а в момент атаки думал (подозревал), что что-то не так с механикой пула или я прошёл по фишинговой ссылке.
Что же произошло? Чтобы было понятно, сначала расскажу, как устроено формирование пула ликвидности на дексе stone.fi (кстати, это самая популярная биржа на блокчейне TON на данный момент).
----------------
Процесс формирования пула ликвидности на stone.fi проходит в 3 этапа.
На первом этапе задаётся первоначальное соотношение активов. Его можно выразить по-разному. Например, соотношением одного и другого актива. Или соотношением 1 единица одного актива и х другого.
На втором этапе происходит нечто вроде инициализации пула. То есть нужно создать пул с небольшим количеством активов, участвующих в пуле. На этом этапе пул уже становится уязвимым для мошенников.
Если мы, к примеру, сделаем пул ликвидности «Токен CHAMBY” – “USDT” в соотношении 10 000 токенов: 1 доллар, то мошенник может за 1 доллар выкупить все 10 000 токенов или их подавляющую часть за сумму, сопоставимую с 1 долларом. Причём, поскольку эти суммы маленькие, то в процессе создания сам пользователь может не понять, что произошло. Но это не единственная беда. Помимо похищения части пула ещё и нарушается изначальное соотношение активов. В том же соотношении (в котором у вас лежат ресурсы для пополнения пула) вы пул уже не пополните. Вам нужно будет пополнять ликвидность в другом соотношении.
Либо, к примеру, добавлять очень много USDT (гораздо больше, чем у вас есть), либо гораздо больше токенов, чем у вас есть.
То есть пул во время создания на stone.fi не защищён от торговли, а растянутость формирования на 3 стадии создаёт довольно сильную уязвимость для создателей и благоприятна для атакующего рейдера пулов.
Кстати, этот тип атаки нигде не описан ни в литературе, ни на форумах, ну или я это описание просто не встречал. Почему биржа не устраняет эту уязвимость — непонятно. Точнее, я догадываюсь почему, но это уже другой вопрос.
В конце второго этапа формирования пула ликвидности после деформации инициального пула атакованный создатель встаёт перед дилеммой (тетралеммой):
1. а Либо продолжить формирование деформированного пула в том же соотношении (или 1б после его исправления);
2.а Либо отказаться от его формирования вообще (либо 2б — начать формировать новый пул из этих же активов).
Но здесь минус в том, что на предварительное создание пула средства уже потрачены, а создание нового с теми же активами запрещено, да и нет никакой гарантии, что пул не был бы повторно атакован.
В принципе, самый безопасный путь — 1а. Но я выбрал путь 1б по причине того, что передо мной стояла задача полностью пополнить пул имеющимися ресурсами. Это примерно 18 млн. токенов CHAMBY и 241 USDT. То есть я решил вначале исправить соотношение активов, а только потом добавить ликвидность или даже просто добавить ликвидность путём продажи ресурсов в пул. Это была, как я теперь понимаю, моя самая большая ошибка.
Я продавал в маленький пул по очереди то большие части токенов CHAMBY, то USDT, надеясь выровнять соотношение активов в пулеили просто добавить всю ликвидность в пул путём продаж токенов CHAMBY и USDT.
В принципе, это могло быть нормальной рабочей схемой, если бы пул в процессе его формирования был защищён от торговли третьими лицами. То есть чтобы было нечто вроде кнопки «Выключить пул из торговли на время его формирования». Либо чтобы биржа позволяла формировать пул сразу, без предварительных уязвимых этапов. По-моему, на централизованных биржах торговые пары при их создании защищены от торговли.
Но на stone.fi нет ни того, ни другого. Пул формируется в 3 этапа и на втором этапе он никак не защищён.
Когда я начала выравнивать соотношение активов, поочерёдно продавая активы в пул, рейдер просто выкупал мои активы за копейки или сливал их за USDT. При этом у него осталось ещё много токенов CHAMBY. Я, честно говоря, даже не подозревал, что там на ДЕКСе может такая дичь твориться.
----------------------------------------------------------------
Какие я уроки вынес из этого фейла? Давайте разберёмся.
1. Это сложно признать, но токеномика 10/90 была ошибочной (10% сообществу, 90% в пул ликвидности). Точнее, это допустимо для проектов, которые могут заложить в пулы ликвидности в фиатную часть миллионы долларов, но для экспериментального проекта без бюджета с фиатной частью пула 100-300 USDT всегда может найтись информированный человек, который за 300 баксов выкупит 90% саплая.
Для проекта, подобного нашему, идеальная токеномика, по-видимому, 100% раздать сообществу с минимальным разбросом.
2. Если в фиатную часть пула идёт всего 100-300 баксов, то токеновую часть нужно формировать тоже малой частью токенов. Даже если рейдер выкупит поставку в 0.1% саплая за 300 баксов, то ему другие пользователи всегда смогут продать новын токены.
3. Пул ликвидности нужно формировать там, где это делается без этапа формирования промежуточного пула (или в это время он защищён от торговли, что вряд ли где есть). По принципу — просто загрузил оба ресурса в новый пул и пул готов.
4. Пул нужно делать раньше айрдропа, чтобы о нём не было лишней инфы и его никто бы не смог атаковать.
5. Популярные биржи на новых блокчейнах буквально нашпигованы мошенниками и их ботами.
6. Не надо принимать пожертвования. Готов возместить эти пожертвования, которые были сделаны для формирования пула. Напишите мне в личку соответствующий адрес.
7. Создание пула должно быть инициативой самого пользователя, чтобы он потом не смог никому высказывать претензий.
8. Мы получили колоссальный и уникальный опыт, нашли уязвимость, про которую никто толком не знает и которая нигде не освещена.
9. Основная проблема в создании проекта — это создание и налаживании нормальной работы пула ликвидности. Всё остальное — второстепенные, хоть и важные вещи. Для нормального его функционирования нужно порядка хотя бы 10 000 баксов, 1000 баксов на худой конец. Если меньше, то его придётся тщательно оберегать от рейдеров и постепенно лишь пополнять.
10. Возможно, мы выбрали слишком быстрый старт. Возможно, проект должен расти медленней и органичней...