Post #25
4.95K

Потерял $40,000 на Uniswap Unichain 😑😑
Хочу поделиться своей ошибкой, которая стоила мне нервов и денег. Возможно, это убережет кого-то от похожих последствий.
В апреле Uniswap запустили программу вознаграждений для провайдеров ликвидности на Unichain. У меня уже была код база и я решил плотно участвовать, тогда была низкая конкуренция.
Одним из важных этапов работы софта были свапы между токенами. Вместо построения собственного маршрутизатора я решил использовать внутренний endpoint, который применяется на сайте Uniswap для генерации транзакций. Что я сделал:
🌸Провел реверс-инжиниринг интерфейса Uniswap
🌸Нашел внутренний API, который по входным данным возвращал готовую calldata для свапа
🌸Интегрировал его в свой софт
Код стабильно работал около 7 дней, но одним утром мой кошелек задрейнело на свапах под ноль. Что пошло не так:
🌸API начал возвращать маршруты через пулы, в которых практически не было ликвидности
🌸Например, нужно было свапнуть 20к$ в ETH, а маршрут вел через пул с ликвидностью 5к$
🌸В результате огромное проскальзывание и фактическая потеря средств
Я до конца не понял, почему это произошло и почему API с сайта Uniswap внезапно начал возвращать такие маршруты. Неясно, было ли это случайностью, багом или целенаправленным вмешательством. Я рассмотрел около 100 соседних блоков и не было видно, чтобы в тот пул с низкой ликвидностью кто-то добавлял средства, что могло бы объяснить выбор маршрута. Вот код, который я использовал на тот момент: ТЫК
Я несколько раз писал в поддержку Uniswap, но получал лишь стандартные ответы. Они утверждали, что я сам совершил свап через пул с низкой ликвидностью. При этом никак не комментировали тот факт, что маршрут был сгенерирован их собственным API.
В тот день после потери средств я полностью переписал логику свапов в своем софте и продолжил работать с Uniswap еще 15 дней. Теперь хочу поделиться конкретными рекомендациями для кодеров.
1️⃣Никогда не стройте бизнес-логику на внутренних API, полученных через реверс-инжиниринг интерфейсов. Через реверс-инжиниринг можно извлекать ABI.
2️⃣Что важно учитывать при построении свапов:
🌸Свапайте только через конкретные надежные пулы с подтвержденной ликвидностью
🌸Перед свапом обязательно сравнивайте спред с централизованными биржами. Если спред не в вашу сторону, то ждать пока его закроет арбитраж бот.
🌸Не делайте крупный свап одной транзакцией. Разбивайте сумму на более мелкие части. Например, чтобы свапнуть 20к$ в ETH производить свапы по 3к$.
🌸Если используете ABI напрямую, всегда указывайте minAmountOut. Никогда не оставляйте это поле пустым. При использовании SDK или API агрегаторов обязательно задавайте slippageTolerance
🌸После каждого свапа проверяйте изменение баланса и сравнивайте его с ожидаемым результатом. Если расчетная и фактическая суммы не сходятся, то стопайте код
Сделай репост и поделись с другом софтером, ты обязательно сохранишь чей-то банк 🌟
Ну а я дальше пойду получать уроки 🦍
Хочу поделиться своей ошибкой, которая стоила мне нервов и денег. Возможно, это убережет кого-то от похожих последствий.
В апреле Uniswap запустили программу вознаграждений для провайдеров ликвидности на Unichain. У меня уже была код база и я решил плотно участвовать, тогда была низкая конкуренция.
Одним из важных этапов работы софта были свапы между токенами. Вместо построения собственного маршрутизатора я решил использовать внутренний endpoint, который применяется на сайте Uniswap для генерации транзакций. Что я сделал:
🌸Провел реверс-инжиниринг интерфейса Uniswap
🌸Нашел внутренний API, который по входным данным возвращал готовую calldata для свапа
🌸Интегрировал его в свой софт
Код стабильно работал около 7 дней, но одним утром мой кошелек задрейнело на свапах под ноль. Что пошло не так:
🌸API начал возвращать маршруты через пулы, в которых практически не было ликвидности
🌸Например, нужно было свапнуть 20к$ в ETH, а маршрут вел через пул с ликвидностью 5к$
🌸В результате огромное проскальзывание и фактическая потеря средств
Я до конца не понял, почему это произошло и почему API с сайта Uniswap внезапно начал возвращать такие маршруты. Неясно, было ли это случайностью, багом или целенаправленным вмешательством. Я рассмотрел около 100 соседних блоков и не было видно, чтобы в тот пул с низкой ликвидностью кто-то добавлял средства, что могло бы объяснить выбор маршрута. Вот код, который я использовал на тот момент: ТЫК
Я несколько раз писал в поддержку Uniswap, но получал лишь стандартные ответы. Они утверждали, что я сам совершил свап через пул с низкой ликвидностью. При этом никак не комментировали тот факт, что маршрут был сгенерирован их собственным API.
В тот день после потери средств я полностью переписал логику свапов в своем софте и продолжил работать с Uniswap еще 15 дней. Теперь хочу поделиться конкретными рекомендациями для кодеров.
1️⃣Никогда не стройте бизнес-логику на внутренних API, полученных через реверс-инжиниринг интерфейсов. Через реверс-инжиниринг можно извлекать ABI.
2️⃣Что важно учитывать при построении свапов:
🌸Свапайте только через конкретные надежные пулы с подтвержденной ликвидностью
🌸Перед свапом обязательно сравнивайте спред с централизованными биржами. Если спред не в вашу сторону, то ждать пока его закроет арбитраж бот.
🌸Не делайте крупный свап одной транзакцией. Разбивайте сумму на более мелкие части. Например, чтобы свапнуть 20к$ в ETH производить свапы по 3к$.
🌸Если используете ABI напрямую, всегда указывайте minAmountOut. Никогда не оставляйте это поле пустым. При использовании SDK или API агрегаторов обязательно задавайте slippageTolerance
🌸После каждого свапа проверяйте изменение баланса и сравнивайте его с ожидаемым результатом. Если расчетная и фактическая суммы не сходятся, то стопайте код
Сделай репост и поделись с другом софтером, ты обязательно сохранишь чей-то банк 🌟
Ну а я дальше пойду получать уроки 🦍
- 🔥 54
- 😢 17
- ❤ 4
- 😱 4
- 👍 3
- ✍ 1
- 🙏 1





