$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$). Ваше доверие для меня — знак, что я двигаюсь в правильном направлении, несмотря на неудачи.
Отдельное спасибо Терну за помощь с рефакторингом кода и моральную поддержку после сейла. Я немного погрущу пару дней, выпью водочки. Ну а вообще дальше - больше
(больше неудач)