$FUEL Sale, как это было?
Как всё начиналось?
Мне поступили предложения написать софт для покупки $FUEL на сейле, но я решил отказаться — недостаток опыта и ожидание сильной конкуренции заставили меня усомниться в своих силах. Вечером, когда нечем было заняться, я всё же решил попробовать. К тому же это был период, когда я пытался завязать с алкоголем (сегодня в своей борьбе я одержал неудачу) и у меня было много свободного времени и сил. Так же я постепенно учу GOLang, и это был хороший момент для отработки своих навыков.
Поиск и разработка
Сначала я приступил к поиску контракта клейма, сделать это было не трудно - адреса клейм контрактов приходили с запроса на их эндпоинт.
Далее разбирая функцию покупки я столкнулся с первым нюансом — merkleProof. Я попробовал древний приём: локально изменил время на странице сейла и увидел, что кнопка покупки стала активной. При нажатии на неё запрос возвращал merkleProof. Проблема решена.
После я написал софт, который парсит аллокацию, статус KYC и merkleProof, и сохраняет все эти данные в файл. Идея была в том, что если во время сейла API может лечь, но у нас всё равно будут все необходимые данные. Оставалось лишь за 5 секунд до начала открытия клейма спамить транзакциями на покупку.
Позже я связался с Терном (@terncrypto) с просьбой о предоставлении ноды, слово за слово, и мы решили поработать вместе. Он помог отрефакторить код, научил пользоваться GitHub, и мы довели софт до ума. Однако тут начался фад: начали говорить что адрес контракта могут поменять, либо сделать фейк-адрес в ответе на получение адреса клейма, при отправке на который ваши $USDC просто сгорят. Благо всё это оказалось ложью, но на всякий случай я добавил обновление merkleProof и адреса контракта в реальном времени.
Перед стартом
Примерно за час до начала сейла всё пошло через одно место: merkleRoot начали менять, а эндпоинт для получения merkleProof стал выдавать случайные значения. Мы решили что оставим софт таким, какой он есть, так как в любом случае он обновлял merkleProof в реальном времени, и с учетом спама транзакций - хотя бы одна должна была быть с верным merkleProof.
Час X
За 5 минут до старта мы сделали финальные правки и загрузили код на сервера. Оставалось считанные секунды. 10 секунд...5.…4…...3...…2….....1… Бам! Софт крашится. Моя вина: не обработал nil значение, из-за чего софт упал в момент открытия клейма.
Результат:
Комьюнити-раунд у терна: 37 успешных покупок из 60 (61% success).
У меня — 0%.
Причина моей неудачи не ясна: мы использовали один и тот же код, у терна работало, у меня — нет. Самый смех в том, что на протяжении всего дебагинга софта у терна постоянно что-то не работало, при этом у меня работало прекрасно, из-за этого результат кажется смешным.
После сейла:
После сейла выяснилось, что для бридж-раунда запрос на merkleProof изменили, добавив параметр isFuel=true
. В итоге многие софтеры обосрались с бридж-раундом. Комьюнити-раунд проходил без этого параметра, поэтому у Терна такой результат.
Итоги
Мой результат: 0% success.
Результат терна: 0% success для бриджеров и 61% sucess для комьюнити.
Дополнительная сложность: некоторые клиенты не пополнили баланс кошельков нативным токеном, что тоже сказалось на итогах.
Я снова убеждаюсь, что надо мной висит какой-то «купол неудач»: даже работающий скрипт оказывается нерабочим в моих руках. Тем не менее, у многих софтеров вообще не получилось взять комьюнити-раунд, а у нас хотя бы был положительный результат.
Хочу поблагодарить - Вас, Вы доверил мне свои кошельки. Всего было 96 кошельков для бридж-раунда (~50k$) и 6 кошельков для комьюнити (~13k$). Ваше доверие для меня — знак, что я двигаюсь в правильном направлении, несмотря на неудачи.
Отдельное спасибо Терну за помощь с рефакторингом кода и моральную поддержку после сейла. Я немного погрущу пару дней, выпью водочки. ну а вообще дальше - больше (больше неудач)